汇编语言(第四版)实验2 习题解答

实验 2 用机器指令和汇编指令编程

1、预备知识:Debug的使用

(略)

2、实验任务

(1)使用Debug,将下面的程序段写入内存,逐条执行,根据指令执行的实际情况填空

(详细图解在实验结果中)

特别说明:由于笔者的实验环境是在Win98(虚拟机)上进行实验的,有些同学是在DOSBOX上进行实验的。不同机器的ROM配置可能不相同,因此 FFFF:0000~0000F 这一段的信息可能不相同,因此实验结果不尽相同。但只要是正确的操作,答案都是正确的

mov ax,ffff

mov ds,ax

mov ax,2200

mov ss,ax

mov sp,0100

mov ax,[0]        ; AX = 19CDH  (答案不唯一)       FFFF:0 = 19CDH

add ax,[2]         ; AX = 1AADH  (答案不唯一)       FFFF:2 = 00E0H    19CDH + 00E0H = 1AADH

mov bx,[4]        ; BX =  30F0H  (答案不唯一)        FFFF:4 = 30F0H

add bx,[6]         ; BX =  6022H  (答案不唯一)        FFFF:6 = 2F32H    30F0H + 2F32H = 6022H

push ax             ; SP = 00FEH        修改的内存单元的地址是 220FEH 内容为1AADH (答案不唯一)

push bx             ; SP = 00FCH        修改的内存单元的地址是 220FCH 内容为 6022H (答案不唯一)

pop ax               ; SP = 00FEH        ax=  6022H 

pop bx               ; SP = 0100H         bx= 1AADH 

push [4]             ; SP = 00FEH        修改的内存单元的地址是 220FEH 内容为 30F0H (答案不唯一)

push [6]             ; SP = 00FCH        修改的内存单元的地址是 220FCH 内容为 2F32H (答案不唯一)

实验结果:

(2) 仔细观察图 3.19 中的实验过程,然后分析:为什么2000:0~2000:f中的内容会发生改变?

解答:

         由图分析可知,CS、IP的内容在执行mov ss,ax 指令后入栈了。这是为什么呢?为什么在执行前一条指令执行后CS、IP的内容没有入栈?

        注意,CS、IP入栈是在mov ss,ax 执行后才在栈段20000H显示出来。也就是说,CS、IP的内容在前一条指令 mov ax,2000 后 CS、IP 的内容其实也入栈了,只不过当时的栈段处于 SS = 1269H SP = FFEE 位置处,CS、IP的内容保存在了那里。在执行mov ss,ax后,栈段改为 SS = 2000H SP = 0010H 位置了。

        那么剩下的 0BEEH 和  0020H又是什么?这一部分涉及到了单步中断,笔者一开始对这一部分也不是很了解,这一部分在后面王爽老师12.11 章节王爽老师作出了解答。解答如下:

        基本上,CPU在执行完一条指令之后,如果检测到标志寄存器的TF位为1,则产生单步中断,引发中断过程。单步中断的类型码为1,则它所引发的中断过程如下:

1) 取得中断类型码1;

2)标志寄存器入栈,TF、IF设置为0

3)CS、IP入栈

4)(IP)=(1*4), (CS)=(1*4+2)。

        Debug的实现就是提供了单步中断的中断处理程序,功能为显示所有寄存器中的内容后等待输入命令。然后,在使用t命令执行指令时,Debug将TF设置为1,使得CPU工作于单步中断方式下,则在CPU执行完这些指令后就引发单步中断,执行单步中断的中断处理程序,所有寄存器中的内容被现实在屏幕上,并且等待输入命令。

        CPU在进入中断处理程序之前,设置TF=0。这样是为了避免CPU在执行中断处理程序的时候发生单步中断。这就是为什么在中断过程中有TF=0这个步骤。

 其实看不懂也没有关系,随着我们对中断的深入学习就会理解了。

  • 8
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值