2016-06-09 58 views
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 

大家好,如何正确使用PUSH?

目前,我正在学习如何在汇编语言代码,并在互联网上的一些经验教训很长的读数后,有人开始时间。现在,练习并不像阅读一样简单,毫无意外。一切都很好,直到堆栈...哟。你可以在上面看到我的(真正基本的)代码,我想了解为什么Emu8086不知道指令“PUSH AH”知道寄存器不是空的,堆栈被初始化。

感谢

+2

因为无法推送8位寄存器。查阅指令集参考。 – Jester

+0

简单明了。谢谢小丑 – Nawpe

回答

1
MOV AH,N1 
PUSH AH 

push指令不允许字节大小的寄存器操作数。
你需要做的是写push ax。这是有效的,因为8位AH寄存器(连同8位AL寄存器)是16位AX寄存器的一部分。您无需事先在AL寄存器中添加任何值以使其正常工作。

MOV AH,N1 
PUSH AX 

上述所有适用于pop指令也!