在第 10 行第 3 列开始显示字符串“ Hello ASM! ”
在实模式下,从B800:0开始是进行显示,最开始纠结与一点,因为我-e编辑后再-d显示发现不一样。后来终于弄明白了是因为在-d输出的时候位置已经改变过了。就是说最开始在B800:0 为38 是数字9 。可在你按回车以后发现数字9已经是上一行的东西了,-d以后更会跳过好多行。
下面进行实模式下的显示输出。首先窗口的长度为80*25.就是说 每个字符需要两个字节,(一个字符,一个颜色)一共需要4000个字节。而且0,160,。。。160*n就是第n+1行的第一个字。当然换成十六进制就变成0,A0,140.。。。第十行是640.当在第十行输入hello以后由于命令所占位置原因就会换行 所以做如下实验来确定要在第几行输入才能使HELLO ASM!恰好输出在第十行。
先做个试验,看看在20行开始输入HELLO ASM! 会上升多少行。计算得知HELL输入之后需要在17行第5个AA0+8开始输入接下来的字符,发现计算失误第17行应该是16*16的十六进制。
由于第一次以为是在20行 实际是在21行 最后显示的时候Hell是在第13行可知总共提高了8行 所以要想在第十行输入HELLO ASM! 需要在第18行开始输入 17*160的十六进制是AA0
B800:AA0
第二次-e 是在第14行 13*160 的十六进制 820 第五个字符 (5-1)*2 的十六进制是8 B800:828
第三次 -e是在第10行 9*160 的十六进制 5A0 第9个字符 (9-1)*2 的十六进制是10 B800:5B0
大功告成
总结一下 第X行 第Y列 在显存中的地址是B800:((X-1)*160+(Y-1)*2)的十六进制