汇编语言-实验2

使用Debug,将下面的程序段写入内存,逐条执行

mov ax,ffff
mov dx,ax

mov ax,2200
mov ss,ax

mov sp,0100

mov ax,[0]
add ax,[2]
mov bx,[4]
add bx,[6]

push ax
push bx
pop ax
pop bx

push [4]
push [6]

a命令写入:
在这里插入图片描述
t命令单步执行:
在这里插入图片描述
-t
在这里插入图片描述
在这里插入图片描述

  • 为什么图3.19的实验过程中2000:0~2000:f中的内容会发生改变?
    观察3.19图,我们在2000H内存段创建了一个栈结构,最大空间是10H,ss:sp指向了栈顶2000:10H(栈空)
    给ax赋值后压栈。
    分析:
    (以下内容为学习时查找复制,侵删)
    初始没有执行这段代码时,我们使用d命令观察2000:00内存,都是00,怎么创建栈结构指向这段内存时,我们发现有些数据了。这些数据是什么?
    我们发现这里面有cs值、ip值、ax值(这个容易看出来),还有bp值(00 00),还有flag的值(这个我用肉眼是看不出来了。呵呵,就是那个一排英文字符)。
    为什么,在讲内中断这章时,你就明白了。t命令实际是引发了单步中断,执行中断例程时,CPU会将一些中断例程使用的的寄存器变量自动压栈到栈中,此例中就包括了上述的寄存器变量的值。
    我们可以不必理会这些寄存器的变量,我们只关心sp就可以了。有它指示,我们就可以对栈进行操作了。而此时的sp是正确的,
    注意:这个栈和我们创建的栈是同一个栈结构(为什么,ss=2000H了),由于t命令必须保存寄存器变量的值(这个是中断程序定义的。)它也占用一定的空间。可能我们定义的栈空间比较小;频繁的使用push指令,为了避免栈顶超界,我们尽量使栈空间大些,就像此程序,设定栈空间是100H。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值