2016-10-05 7 views
1

私は割り当てのためにいくつかのコードを変更する予定です。私の問題は、コード自体が正しく動作していないことです。私はタスクの助けを求めていません。ちょうどサンプルコードを動作させるだけです。それは、どんな助けもありがとうと言われています。インテル8086 - プッシュコマンドがエラーをスローアップ

最初の第一のものは、ここでのコードは私だ。と協力することになっては:m

;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 

私はコンパイルして実行しようとすると、それはアップ投げエラーがライン48上で、次のとおりです。

問題の
wrong parameters: PUSH ax bx cx dx 

行は次のとおりです。

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

任意およびすべてのヘルプをいただければ幸いです。

+0

私はアセンブリをしてから年を取っていますが、あなたはもう一方を押していくことはできませんか? 'push bx'、' push cx'、 'push dx'、' pop'の逆順である。 – Axel

+3

あなたはどのアセンブラを使用していますか?構文 'push 'はTASM AFAIKによってのみサポートされています –

+0

私はemu8086を使用しています。 OP –

答えて

1

Axelがすでに述べたように、これらのプッシュアンドポップ命令の複数を実行します。あるいは、PUSHAとPOPA命令を使って一度にすべてのレジスタをプッシュ/ポップすることもできますか?

+0

私はaxelsの指示に従って、今すぐ動作します。私はOPに追加した編集の追加情報 –

関連する問題