汇编语言(王爽第三版)实验二 您所在的位置:网站首页 汇编语言基础实验 汇编语言(王爽第三版)实验二

汇编语言(王爽第三版)实验二

2024-07-08 22:19| 来源: 网络整理| 查看: 265

实验二 题目预览 使用Debug,将下面的程序段写入程序,逐条进行,根据指令执行后的实际运行情况填空。仔细观察图3.19中的实验过程,然后分析:为什么2000:0~2000:F中的内容会发生改变? 1

使用Debug,将下面的程序段写入程序,逐条进行,根据指令执行后的实际运行情况填空。

mov ax,ffff mov ds,ax mov ax,2200 mov ss,ax mov sp,0100 mov ax,[0] ;ax=____ add ax,[2] ;ax=____ mov bx,[4] ;bx=____ add bx,[6] ;bx=____ push ax ;sp=__ ; 修改的内存单元的地址是____内容为____ push bx ;sp=____ ; 修改的内存单元的地址是____内容为____ pop ax ;sp=____ ; ax=____ pop bx ;sp=____ ; bx=____ push [4] ;sp=____ ; 修改的内存单元的地址是____内容为____ push [6] ;sp=____ ; 修改的内存单元的地址是____内容为____

在debug模式下用A命令写入程序 在这里插入图片描述 运行 在这里插入图片描述 下面运行了要填空的阶段了 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

2

仔细观察图3.19中的实验过程,然后分析:为什么2000:0~2000:f中的内容会发生改变? 在这里插入图片描述 可以发现初始没有执行这段代码时,我们使用d命令观察2000:00内存,都是00,怎么创建栈结构指向这段内存时,我们发现有些数据了。这些数据是什么? 可以看出这里面有cs值、ip值、ax值(这个容易看出来),"9D 05"是标志寄存器flag的值。 后面在将内中断的时候,就明白了。t命令实际是引发了单步中断,执行中断例程时,CPU会将一些中断例程使用的的寄存器变量自动压栈到栈中,此例中就包括了上述的寄存器变量的值。

单步中断P249 我们在使用Debug的t命令的时候,没有用想过这样的问题,Debug如何能让CPU在执行一条指令后,就显示各个寄存器的状态?我们知道,CPU在执行程序的时候是从CS:IP指向的某个地址的开始,自动向下读取指令执行。也就是说,如果CPU不提供其他功能的话, 就按这种方式工作,只要CPU一加电,它就从预设的地址开始一直执行下去,不可能有任何程序能控制它在执行完一条指令后停止,去做别的事情。可是,我们在Debug中看到的情况却是,Debug可以控制CPU执行被加载程序中的一条指令,然后让它停下来,显示寄存器的状态。 Debug有特殊的能力吗?我们只能说Debug利用了CPU提供的一种功能。只有CPU提供了在执行一条指令后就转去做其他事情的功能,Debug或是其他的程序才能利用CPU提供的这种功能做出我们使用T命令时的效果。

主要看(2)(4)(5)

中断过程P238 8086CPU在收到中断信息后,所引发的中断过程。 (1)(从中断信息中)取得中断类型码; (2)标志寄存器的值入栈(因为在中断过程中要改变标志寄存器的值,所以先将其保存在栈中); (3)设置标志寄存器的第8位TF和第9位IF的值为0(这一步的目的后面将介绍); (4)CS的内容入栈; (5)IP的内容入栈; (6)从内存地址为中断类型码4和中断类型码4+2的两个字单元中读取中断处理程序的入口地址设置IP和CS。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有