码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-10-28 11:19:34      阅读:102      评论:0      收藏:0      [点我收藏+]

标签:根据   span   img   lib   color   现象   过程   空间   技术分享   

 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无法自动识别栈的大小,存在栈溢出的危险问题。

 

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

标签:根据   span   img   lib   color   现象   过程   空间   技术分享   

原文地址:https://www.cnblogs.com/qiqi-14/p/9864631.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!