《汇编语言》实验二——用机器指令和汇编指令编程

任务一

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

   mov  ax , ffff

   mov  ds , ax

   mov  ax , 2200

   mov  ss , ax

   mov  sp , 0100

   mov  ax , [0]                       ;ax=3130

   add  ax , [2]                        ;ax=6462

   mov  bx , [4]                       ;bx=3534

   add  bx , [6]                      ;bx=6C6A

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

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

   pop  ax                           ;sp=00FEH  ;ax=6C6A

在使用a命令输入指令调试前,使用e命令将内存单元0021:0~0021:7连续8个字节数据修改为30H,31H,32H,33H,34H,35H,36H,37H。

   pop  bx                           ;sp=0100H  ;bx=6462

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

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

将程序段的第一行 mov ax,ffff修改为 mov ax,0021

用t命令单步执行

用a命令输入程序段后,在2000H内存段创建了一个栈结构,最大空间是10H,ss:sp指向了栈顶2000:10H(栈空),给ax赋值后压栈。在还未执行这段代码时,使用d命令观察2000:00内存,创建栈结构指向这段内存时,这里面就有了ax值等。

当t命令执行程序时,CPU会将一些寄存器变量自动压到栈中,就包括了寄存器变量的值。那些除入栈操作对空间的修改并不是随意的,而是把某些寄存器如cs,ip,ax的值存入了栈空间。这其中的原因与内中断有关,t命令实际是引发了单步中断,执行中断例程时,CPU会将一些中断例程使用的的寄存器变量自动压栈到栈中。

 

转载于:https://www.cnblogs.com/onioneer/p/9890181.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值