练习一
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
对以上代码进行汇编、连接、调试、运行。结果如下:
结果为36
然后我将第四行和第九行的dl的值分别改为5和4继续汇编、连接、调试、运行:
结果变为了54。
然后使用r命令查看cx、ds、cs的值发现满足cs=ds+10h
然后用debug反汇编得出偏移地址0000到0015的为源代码部分
再用d命令和r命令查看PSP的头两个字节验证确实为CD 20。
然后用p和t命令单步调试,遇到int用p命令。如下图
返现依次输出的是5和4(与之前改的一致)
练习二
assume cs:code
code segment
mov ax, 0b800h
mov ds, ax
mov bx,0
mov [bx],0333h
add bx,2
mov [bx],0336h
mov ax,4c00h
int 21h
code ends
end
对t2代码进行汇编、连接、调试、运行。结果如下:
输出红色的36
将源代码中line7的0433h改为0432h, line10 的 0436h改为0439h,然后进行汇编、连接、调试、运行:
结果如下输出红色29
试将源代码中line7的0433h→0333h, line10 的 0436h→0336h,然后进行汇编、连接、调试、运行:
结果如下输出蓝绿色的36
总结感想:
通过本次实验一我明白了计算机通过每次单个输出dl的值来完成对字符的输出(即输出54需要输出两次)。
由于最后36颜色的改变是修改了寄存器中的高字节,改变数字修改的低字节,猜测高字节控制颜色,低字节控制数据。
熟悉了汇编中对稍微复杂的源代码汇编、连接、调试、运行等的过程。