实验三
实验内容
练习1
编写汇编源程序t1.asm
在此软件下完成
输出结果为36
将line4和line9中寄存器dl的值分别修改为0-9中任何一个数字,重新汇编,连接,运行,观察程序输出结果的变化。
结果为寄存器dl中值的逐个输出。
用debug对生成的可执行文件t1.exe进行调试。
1.使用r命令查看。观察寄存器cx的值是多少,观察寄存器ds和cs的值是多少,它们之间是否满足关系(cs)=(ds)+10h。
cx=0016 ds=075a cs=076a 满足(cs)=(ds)+10h
2.psp(程序段前缀)的头两个字节是CD 20,用debug查看psp的内容,验证是否如此。
百度上说
的确如此
3.使用u命令对t1.exe进行反汇编,观察反汇编得到的源代码。
4.使用t命令和p命令(遇到int命令时,用p命令)单步调试,观察结果。
练习2
同样的软件下出错了
编写汇编源程序t2.asm
实验3中第2个程序写法,里面隐藏着一个error,尽管在dosbox环境中汇编器没有报错,但在masm for windows集成软件环境里,明确定位了错误行,请尝试后,结合错误提示,把错误找出来并修正。
无效的指令操作数
大佬处得知 word ptr 指定长度
8086CPU的指令,可以处理两种尺寸的数据,byte和word。所以在机器指令中要指明,指令进行的是字操作还是字节操作。
line6-7相当于mov [0], 0433h line9-10相当于mov [2], 0436h 至于为什么这样使用两条指令,而不直接简化写成上面的形式,有两个原因。其中一个 是方便以后循环;另一个原因,留待第5章再解释说明。暂时,先这样使用。
对源程序 t2.asm 进行汇编、连接、运行、调试
1.对t2.asm进行汇编、连接后,得到可执行文件t2.exe。运行t2.exe,观察程序运行 结果,验证是否在屏幕左上方出现红色的数值36。
经测试,有些平台在 dosbox 下运行这个程序时有些问题,如果屏幕左上方没有 输出结果,请运行程序t2.exe前,先输入cls命令清空一下屏幕,然后再执行t2.exe。
2. 如果(1)结果得到验证,重新打开t2.asm,尝试将源代码中line7的0433h→0432h, line10 的 0436h→0439h, 然后重新汇编、连接,得到可执行文件 t2.exe。使用 cls 命令清 屏后,再次观察程序运行结果。
3. 如果(1)结果得到验证,重新打开t2.asm,尝试将源代码中line7的0433h→0333h, line10 的 0436h→0336h, 然后重新汇编、连接,得到可执行文件 t2.exe。使用 cls 命令清 屏后,再次观察程序运行结果。
延伸思考和分析
练习一程序结果为寄存器dl中值的逐个输出。练习二为【bx】最低位输出,通过改变,高位控制颜色。
二种方法输出位置不同,练习一直接输出,练习二位左上方输出。
总结与体会
在操作系统中,执行可执行文件时,操作系统依照可执行文件中的描述信息,将可执行文件中的机器码和数据加载入内存,并进行相关的初始化(比如设置cs:ip指向第一条要执行的指令),然后由CPU执行程序。
mov ax,4c00h
int 21h
这两条指令所实现的功能就是程序返回。