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

 1. 预备知识:

    T命令执行修改栈寄存器SS的指令,如mov ss,ax,mov ss,[0],pop ss等时,它的下一条关于修改偏移地址SP的指令也紧接着执行,一般情况下,用T命令执行一条指令后,会停止继续执行,显示出当前CPU各个寄存器的状态和下一步要执行的指令,但如上情况却没有做到这点。这种现象属于后期学习内容:中断机制。

2. 实验任务

1)使用DEBUG,将上面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。  

mov ax, 0021

mov ds, ax

mov ax, 2200

mov ss, ax

mov sp, 0100

 

mov ax, [0] ;ax= 3130H

add  ax, [2] ;ax= 6462H

mov bx, [4] ;bx=3534H

add  bx, [6] ;bx=6C6AH

 

push ax ;sp= 00FEH ,修改的内存单元地址是 2200:00FE 内容为 6462H

push bx ;sp= 00FCH ,修改的内存单元地址是 2200:00FC 内容为 6C6AH

pop ax ;sp= 00FEH ,ax= 6C6AH

pop bx ;sp= 0100H ,bx= 6462H

 

push [4] ;sp= 00FEH ,修改的内存单元地址是 2200:00FE 内容为 3534H 

push [6] ;sp=00FCH ,修改的内存单元地址是 2200:00FC 内容 3736H 

 

E命令改写,A命令写入:

 

单步运行结果:

 

 

 查询得栈地址中数据内容:

 

 

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

 

3.19 用Debug进行实验的示例

 

 

 答:在debug使用T等指令引发了中断造成的,中断过程使用当前栈空间存放cpu关键数据,所以,栈中就有些不是我们操作的数据了。  

如果是在中断过程中压栈是栈越界的话,在windows下的命令窗口会强制关闭。

 

实验总结:

 

     Debug使用时,不同形式的命令指令,可能对应不同的寄存器地址分配,指令地址为CS,数据段地址为ds,栈段地址为SS;对于段寄存器不可直接赋值,可间接通过其他寄存器赋值。初始化栈顶由SS:SP地址指向所决定,在使用栈的时候,由于CPU无法自动识别栈的大小,存在栈溢出的危险问题。

 

转载于:https://www.cnblogs.com/qiqi-14/p/9864631.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值