2016-06-09 27 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 

Hallo an alle,Wie verwende ich PUSH richtig?

ich zur Zeit zu lernen, wie in Assemblersprache codieren, und nach einer sehr langen Lesen von mehreren Lektionen im Internet, es war Zeit, um loszulegen. Nun, die Praxis ist nicht so einfach wie das Lesen, ohne jede Überraschung. Alles war in Ordnung, bis der Stapel ... yup. Sie können meinen (wirklich grundlegenden) Code oben sehen, ich würde gerne verstehen, warum Emu8086 die Anweisung "PUSH AH" nicht versteht, wissend, dass das Register nicht leer ist und der Stack initialisiert wird.

Dank

+2

Weil Sie 8-Bit-Register nicht drücken können. Konsultieren Sie einen Befehlssatz Referenz. – Jester

+0

Einfach und klar. Danke, Jester – Nawpe

Antwort

1
MOV AH,N1 
PUSH AH 

Die push Anweisung keinen Byte großen Registeroperand ermöglichen.
Was Sie tun müssen, ist schreiben push ax. Dies funktioniert, weil das 8-Bit-Register AH (zusammen mit dem 8-Bit-Register AL) Teil des 16-Bit-Registers AX ist. Sie müssen vorher keinen Wert in das Register AL eingeben, damit dies funktioniert.

MOV AH,N1 
PUSH AX 

Alle oben genannten gilt auch für die pop Anweisung!