实验三

实验任务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、运行测试截图:

  

 

 

 

 

 

 

 

 

 

 

  

 

 

 

 

posted @ 2021-11-27 20:57  brilliant_blue  阅读(48)  评论(2)    收藏  举报