汇编语言8086这段代码是什么意思? [英] Assembly 8086 language what does this code mean?

查看:0
本文介绍了汇编语言8086这段代码是什么意思?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这个代码,我想问一下如何读取它,以了解程序到达第24行后AX内部的值是什么 在循环内,当 MOV AX,[SP+4d] 它会改变AX的值吗?到SP+4 我知道在节目结束时,斧头是15的六角形,只是想知道为什么? 非常感谢

推荐答案

可能您的老师喜欢欺骗您?

mov ax, [sp + 4d]mov [sp + 4d], ax指令不可编码(*)。它们的语法是错误的,因为SP寄存器不能用作寻址组件。那么,如果您甚至不能汇编程序,您如何找到AX寄存器的值呢?

可能老师希望您修复错误,然后报告AX

代码中,您可以通过BP寄存器来处理堆栈上的参数。接下来是do_thing过程的重写,这是很好的。我另外保留BP的值。

  AX     BP     RET    ARG            Stack ARG is the argument pushed at line 17
----/ ----/ ----/ ----/                 RET is the return address
^      ^             ^
|      |             |
| SP   | BP          | BP+4
push bp
mov  bp, sp
push ax
mov  ax, [bp+4]
inc  ax
mov  [bp+4], ax
pop  ax
pop  bp
ret

程序到达第24行后AX内部的值是多少

在第23行,AX寄存器仍将保持零,因为do_thing过程保留了AX的值。
在第24行,AX寄存器将变为21,因为在修改后的程序中,call执行21次do_thing过程将使其堆叠参数增加21次,从0增加到21。


(*)mov ax, [esp + 4]mov [esp + 4], ax指令在代码中适用于后来的中央处理器,如80386,因为ESP寄存器可以用作寻址组件。

这篇关于汇编语言8086这段代码是什么意思?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆