2016-10-05 1 views
1

Je suis supposé modifier du code pour une affectation. Mon problème est que le code lui-même ne fonctionne pas correctement. Je ne demande pas d'aide pour la tâche, juste pour que l'exemple de code fonctionne. Cela étant dit, toute aide est appréciée.Intel 8086 - Pousser la commande en lançant des erreurs

Pour commencer, voici le code I; suis censé travailler avec:

;Program to add two single digit numbers - answer must also be a single digit number. 

.model small 
.stack 100h 
.data 

prompt1 db 13, 10, 'Enter the first number to add:', 13, 10, '$' 
prompt2 db 13, 10, 'Enter the second number:', 13, 10, '$' 
answer  db 13, 10, 'The answer is:', '$' 
num1  db ? 
num2  db ? 

.code 

start: 
     mov ax, @data 
     mov ds, ax 
     mov ax, offset prompt1 ;prompt to enter first number 
     call puts 
     call getc   ;collect first number 
     mov num1, al   ;and save 

     mov ax, offset prompt2 ;prompt to enter 2nd number 
     call puts 
     call getc   ;collect second number 
     mov num2, al   ;and save 





mov ax, offset answer  ;display answer message 
     call puts 

     mov al, num1 
     add al, num2   ;calculate answer 
     sub al, '0'   ;convert to a character for display 

     mov dl, al 
     call putc   ;and display it 

     mov ax, 4c00h 
     int 21h 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 

puts:     ; display a string terminating in $ 
    push ax bx cx dx ; save ax, bx, cx, dx 
    mov dx, ax  ; address of string must be stored in dx 
    mov ah, 9h 
    int 21h  ; MSDOS called to display string 
    pop dx cx bx ax ; restore dx cx bx ax 
ret 

getc: 
    push bx cx dx ; save bx cx dx 
    mov dx, ax  ; address of string must be stored in dx 
    mov ah, 1h  ; char read into al, and output on screen 
    int 21h  ; MSDOS called to read char 
    pop dx cx bx  ; restore dx cx bx 
    ret 

putc: 
    push ax bx cx dx ; save ax bx cx dx 
    mov ah, 02h 
    int 21h    ; MSDOS called to display char 
    pop dx cx bx ax ; restore dx cx bx ax 
    ret 

end start 

L'erreur, il est de vomir quand je tente de compiler et exécuter est sur la ligne 48, et est:

wrong parameters: PUSH ax bx cx dx 

La ligne en question est:

push ax bx cx dx ; save ax, bx, cx, dx 

toute aide serait grandement appréciée.

+0

Cela fait des années que je n'ai pas assemblé, mais est-ce que vous ne pouvez pas pousser l'un après l'autre? 'push bx',' push cx', 'push dx' et la même chose pour' pop' dans l'ordre inverse. – Axel

+3

Quel assembleur utilisez-vous? La syntaxe 'push ' est prise en charge uniquement par TASM AFAIK –

+0

J'utilise emu8086, et je l'ai fonctionné. Info dans les modifications à l'OP –

Répondre

1

Comme cela a déjà été dit par Axel, vous devez exécuter plusieurs de ces instructions push et pop. Ou peut-être est-il également possible de pousser/pop tous les registres à la fois en utilisant les instructions PUSHA et POPA?

+0

J'ai suivi les instructions des axels et cela fonctionne maintenant. Informations supplémentaires dans l'édition que j'ai ajoutée à l'OP –