2016-12-06 80 views
0

當我添加3 + 3它的答案是正確的,但是當我添加7 + 7它不起作用。我想添加兩個數字,如75 + 75其答案應該是150或900 + 100其答案應該是1000.如何在彙編語言中添加兩個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

瑪格麗特剛剛給你解決方案。您試圖將代表數字的多位字符串轉換爲數字。有* no * panacea指令來做到這一點,而是,需要循環閱讀從右到左的字符串,並從文本轉換爲整數和相乘。在谷歌的'atoi'彙編中有很多例子。 –

回答

0

簡單的答案:使用添加< 16位註冊>,< 16位註冊>

你」重新混淆兩件事:二進制表示和ASCII表示。你的CPU不知道「4711」或「12345」的含義。這只是一系列的字節。

你需要你的字符串的ASCII碼錶示轉換,增加他們的二進制值,並將結果轉換回ASCII

兩個,也有SO

+0

或者他*可以*實際添加兩個ASCII字符串逐位數字......有時當我看到這些學生問題時,我很想試着用這種方式發佈解決方案,只是爲了試驗這個講師如何反應...:D – Ped7g