【发布时间】:2015-06-26 00:21:20
【问题描述】:
有人告诉我将有效的寄存器放入堆栈中,以便稍后在“子程序”中覆盖它们,这对我来说很清楚,每个人都知道。但是当我阅读小伙伴的代码时,我发现了以下代码:
puts: ; display character in ax
push ax
push bx
push cx
push dx
mov dx, ax
mov ah, 9h
int 21h
pop dx
pop cx
pop bx
pop ax
ret
然后我看到了pusha 和popa 命令。我想可以这样做:
puts: ; display character in ax
pusha
mov dx, ax
mov ah, 9h
int 21h
popa
ret
pusha 和pushes 的集合之间有任何区别吗?
提前谢谢你。
【问题讨论】:
-
请注意
pusha和popa是 80286+ 指令。如果你的目标是一台普通的 8086 机器,这些都行不通。事实上,一些汇编程序可能需要.286指令才能将它们识别为有效指令。 -
不使用 .286(点指令)被认为是不好的做法吗?
-
我无法想象为什么
-
@mcleod_ideafix :
pusha和popa是在 80186 中引入的,因此您也可以使用.186 -
那么这些操作码在旧 CPU 上做了什么?操作码表的这些位置是否还有其他指令?或者处理器只是做了一些随机的事情或者可能被绞死?
标签: assembly x86 stack assemblies