2013-10-04 26 views
1

我不理解在這種情況下可以做什麼 使用AAM指令 可以進行單個數字的乘法運算AAM你需要壓縮BCD因此結果後兩位數乘法不會在AX寄存器中積累......乘以兩個數字的數字,將兩個數字作爲輸入,結果也打印在Tasm

,所以我需要一個想法,我怎麼能解決這個問題。謝謝

這裏是如何進行的輸入應該看起來像(取一個兩位數字)並且BCD是可取的

mov dx,offset msg 
mov ah,09h 
int 21h 

mov ah,01h 
int 21h 

mov ch,al 
sub ch,30h 
ror ch,04h 

mov ah,01h 
int 21h 

mov cl,al 
sub cl,30h 
add cl,ch 
+3

這個問題目前很不清楚。你的輸入是什麼樣的?輸出應該是什麼樣子?是否需要使用BCD?發佈代碼的相關部分。 – Michael

+0

@Denson由於您正在閱讀來自鍵盤的輸入,因此無論如何您都需要從ASCII轉換,您並沒有被綁定到輸入格式。在我看來,在BCD中進行計算沒有任何優勢。如果你真的需要的話,用標準二進制進行計算,然後將結果轉換成BCD。 – us2012

+0

如果可能,你可以詳細說明你的解決方案嗎? – Denson

回答

1
mynumber1 db ? 
mynumber2 db ? 

mov ah,01h 
int 21h 
sub al, 30h <- ASCII to value 

mov bl, 0Ah 
mul bl <- multiply al with 10 

mov mynumber1, al <- mynumber1 now stores the tens (i.e. if you entered 8 it's now 80) 

mov ah,01h 
int 21h 
sub al, 30h <- ASCII to value, al now stores the ones 

add mynumber1, al <- now your two-digit number is completely in mynumber1 

現在重複相同的mynumber2。然後:

mov al, mynumber1 
mov bl, mynumber2 

mul bl 

現在該產品是在AX。如果您真的需要,繼續將AX的內容轉換回BCD。


下面的代碼將打印數量與存儲在AX 最多4位數

xor dx,dx 
mov bx,03E8h 
div bx 
call printdig 

mov ax,dx 
xor dx,dx 
mov bx,0064h 
div bx 
call printdig 

mov ax,dx 
xor dx,dx 
mov bx,000Ah 
div bx 
call printdig 

;remainder from last div still in dx 
mov al,dl 
call printdig 

請注意,您需要以下輔助函數,它從al打印一個單一的數字:

printdig proc 
push dx 
mov dl,al 
add dl,30h 
mov ah,02h 
int 21h 
pop dx 
ret 
printdig endp 
+0

你能告訴我,我應該如何輸出斧頭的數字沒有轉換爲BCD的方式我輸出的數字在這種情況下不起作用@ us2012 – Denson

+0

@Denson請參閱我對以下問題的回答:http://stackoverflow.com/questions/19147472。它解釋了打印數字的簡單算法。 – us2012

+0

我經歷了你的算法 假設我有一個四位數的斧頭 我該如何去做呢? 該算法是否也適用於此? – Denson