实验三
实验任务1
1、task1.asm源码及运行截图:



2、回答问题
(1)由于LOOP指令的偏移指令为0019,且要跳转到000D,因此跳转的位移量为12。跳转指令的机器码为E2F2,机器码的低两位F2为8位位移的补码形式(8位位移=标号处的地址-loop指令后的第一个字节的地址),这里F2=(000D-001B)补。

(2)由于LOOP指令的偏移指令为0037,且要跳转到0029,因此跳转的位移量为14。跳转指令的机器码为E2F0,机器码的低两位F0为8位位移的补码形式,即F0=(0029-0039)补。

实验任务2
1、task2.asm源码:

2、给出分析、调试、验证后,寄存器(ax)=? (bx)=? (cx)=? 附上调试结果界面截图
(1)由于ds:[0]中存放的是s1的偏移地址,因此执行call word ptr ds:[0]时,先将它后面一条指令的地址s1先压入栈,然后执行s1处的指令:将地址s1出栈并保存到ax中。所以(ax)=s1;
由于ds:[2]中存放的是s2的偏移地址,ds:[4]中存放的是cs中的段地址,因此执行call dword ptr ds:[2]时,先将当前cs中的段地址压入栈,再将它后面一条指令的地址s2压入栈,然后执行s2处的指令:将地址s2出战并保存到bx中,再将当前代码段段地址出战并保存到cx中。所以(bx)=s2,(cx)=(cs)。
(2)调式结果界面:


实验任务3
1、task3.asm源码:

2、运行测试截图:
![]()
实验任务4
1、task4.asm源码:
2、运行测试截图:

实验任务5
1、task5.asm源码:

2、运行测试截图:


浙公网安备 33010602011771号