练习一:
t1.asm具体内容:
assume cs:code code segment mov ah,2 mov dl,3 add dl,30h int 21h mov ah,2 mov dl,6 add dl,30h int 21h mov ah,4ch int 21h code ends end
运行效果:
将mov dl,3改为mov dl,4 mov dl,6改为mov dl,9
运行结果变为49;
debug调试t1.exe:
cx的值是0016,寄存器ds和寄存器cs满足(cs)=(ds)+10h
PSP的头两个字节是CD 20;
u命令对t1.exe反汇编;
单步执行:
后查询后知 mov ah,2 ,int 21h 输出的是ascii码,为了输出想要的数字,所以dl加30h。
练习二:
t2.asm源码:
assume cs:code code segment mov ax,0b800h mov ds,ax mov bx,0 mov [bx],0133h add bx,2 mov [bx],0136h mov ax,4c00h int 21h code ends end
运行结果:
(1)左上角果真出现数字红色36
(2)左上角数字变为红色29
(3)左上角数字变为浅蓝色36
延伸思考
要输出的字符与寄存器中的字符相差30h,输出字符可以通过寄存器,也可以通过段地址。
现在大体可以猜到,输出的字符颜色与高字节有关。但是至于为什么,有什么样的关系还不知道,对于汇编如何输入字符到屏幕上还是不清楚。