1
PILE SEGMENT STACK
DW 256 DUP(?)
base:
PILE ENDS

DATA SEGMENT

N1 DB 1
N2 DB 2
N3 DB 3


DATA ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DATA, SS:PILE

main:

MOV AX,DATA
MOV DS,AX
MOV AX,PILE
MOV SS,AX
MOV SP,Base

MOV AH,N1
PUSH AH

fin:

MOV AH,4CH
INT 21H
CODE ENDS
END main

大家好,

我目前正在学习如何使用汇编语言进行编码,并且在互联网上阅读了很长时间的几节课之后,是时候开始了。现在,练习并不像阅读那么容易,毫无意外。一切都很好,直到堆栈......是的。您可以在上面看到我的(非常基本的)代码,我想了解为什么 Emu8086 在知道寄存器不为空并且堆栈已初始化的情况下不理解指令“PUSH AH”。

谢谢

4

1 回答 1

1
MOV AH,N1
PUSH AH

push指令不允许字节大小的寄存器操作数。
你需要做的是写push ax。这是因为 8 位AH寄存器(与 8 位AL寄存器一起)是 16 位AX寄存器的一部分。您无需AL事先在寄存器中输入任何值即可使其正常工作。

MOV AH,N1
PUSH AX

以上所有内容也适用于pop指令!

于 2016-06-12T15:15:10.863 回答