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

Bonjour à tous,Comment utiliser PUSH correctement?

Je suis en train d'apprendre comment le code en langage d'assemblage, et après une lecture très longue de plusieurs leçons sur l'Internet, il était temps de commencer. Maintenant, la pratique n'est pas aussi facile que la lecture, sans surprise. Tout allait bien jusqu'à la pile ... yup. Vous pouvez voir mon code (vraiment basique) ci-dessus, je voudrais comprendre pourquoi Emu8086 ne comprend pas l'instruction "PUSH AH" en sachant que le registre n'est pas vide et que la pile est initialisée.

Merci

+2

Parce que vous ne pouvez pas pousser 8 registres de bits. Consulter une référence de jeu d'instructions. – Jester

+0

Simple et clair. Merci Jester – Nawpe

Répondre

1
MOV AH,N1 
PUSH AH 

L'instruction push ne permet pas un octet de taille opérande de registre.
Ce que vous devez faire est d'écrire push ax. Cela fonctionne car le registre 812 bits AH est (avec le registre 8 bits AL) partie du registre AX 16 bits. Vous n'êtes pas obligé de mettre une valeur dans le registre AL à l'avance pour que cela fonctionne.

MOV AH,N1 
PUSH AX 

Tous les cas ci-dessus l'instruction aussi pop!