2016-12-06 7 views
0

私は3 + 3を追加するとその答えは正しいですが、私が7 + 7を追加しても機能しません。そして、私は75 + 75のような2つの数字を追加したい、その回答は150または900 + 100でなければならない答えは1000であるべきです。アセンブリ言語で2つの16ビット数値を追加するにはどうすればよいですか?

その手順は何ですか?どのような私のコードが間違っている、私はちょうど新しいアセンブリ言語だ原因すみません..

.model small 
.stack 0100h 
.data 
    num1 db ? 
    num2 db ? 
    msg1 db 13,10, "Enter 1st Number : $" 
    msg2 db 13,10, "Enter 2nd Number : $" 
    msg3 db 13,10, "The answer is : $" 
.code 

    mov ax, @data 
    mov ds, ax 

    lea dx,msg1 
    mov ah,09h 
    int 21h 

start: 
    mov ah,01h 
    int 21h 
    cmp al,0dh    
    je second               
    sub al,30h                
    push ax                
    mov num1,al 
    jmp start 

second: 
    lea dx,msg2 
    mov ah,09h 
    int 21h 

number2:  
    mov ah,01h 
    int 21h 
    cmp al,0dh    
    je ans               
    sub al,30h                
    push ax                
    mov num2,al 
    jmp number2 

ans: 

    mov al,num1 
    add al,num2 

    MOV AH,9 
    LEA DX,MSG3 
    INT 21H 

    ADD AL,30H 
    MOV AH,2h 
    MOV DL,AL 
    INT 21H 

jmp start 

end 
+3

内の記事の多くは、これが同じですol '問題:複数桁の数字。文字列を数字(atoi)と逆の(itoa)に変換する方法を見てください。そこにはたくさんの質問があるはずです。 –

+0

私は逆にする方法を知っていますが、今問題を解決する方法がわかりません。私のコードを修正するのに役立つものがありますか?ありがとう –

+1

マーガレットはちょうどあなたに解決策を与えました。数字を表す複数桁の文字列を数値に変換しようとしています。これを行うための万能薬の指示はありませんが、文字列を右から左にループし、テキストから整数に変換して乗算する必要があります。 Googleに 'atoi'のためのアセンブリの例がたくさんあります。 –

答えて

0

単純な答え:< 16ビットレジスタの追加]を使用することにより>、< 16ビットの登録>

ます」バイナリ表現とASCII表現の2つのことを混乱させます。あなたのCPUは "4711"または "12345"の意味を知らない。単なる一連のバイトです。

あなたは、あなたの文字列のASCII-表現を変換する彼らのバイナリ値を追加し、ASCIIの両方のための

に戻って結果を変換する必要があり、SO

+0

または実際に2つのASCII文字列を1桁ずつ追加することができます...これらの学生の質問が表示されたときに、この方法でソリューションを投稿するように誘惑されています。 – Ped7g

関連する問題