0x800b_8000
,实际的物理地址为0x000b_8000
)的。
.roll_screen:
cmp bx,2000 ;光标超出屏幕?滚屏
jl .set_cursor
cld
mov esi,0x800b80a0 ;小心! 32 位模式下 movsb/w/d
mov edi,0x800b8000 ;使用的是 esi/edi/ecx
mov ecx,1920
rep movsd
mov bx,3840 ;清除屏幕最底一行
mov ecx,80 ;32 位程序应该使用 ECX
如上图,为实现屏幕上滚的汇编。其实就是把0x800b_80a0
处的东西,复制到0x800b_8000
处。
虽然上面这些东西不是书里的重要内容。但还是有几个问题,想问一下:
0x800b8000
开始的 n 字节的字符串吗?所以就需要 copy 到这个特定位置。或者说,这个“上滚”我是不是理解反了。屏幕刚开始是 显示的是开始的内容,然后屏幕往上动,然后人就看到了 后面的内容。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.