彙編 多位數相加

2021-06-16 20:38:35 字數 1224 閱讀 5662

上一次彙編寫到,只是個位數的簡單相加,只需要判斷兩者相加有無進製,進製即進一,在輸出視窗輸出一先。遇到多位數後,會變複雜很多,事實上彙編裡面可以實現相加,難題在於需要把和轉成ascii碼顯示在dos視窗。所以需要把和乙個乙個數提取,轉成ascii。程式如下:

datas segment	

op1 dw 255

op2 dw 366

result dw 10 dup(?) 定義乙個result陣列,長度為10個位元組

datas ends

stacks segment

stacks ends

codes segment

assume cs:codes,ds:datas,ss:stacks

start:

mov ax,datas

mov ds,ax

mov ax,op1

add ax,op2 op1和op2相加後附加到ax

mov bx,0

mov cl,10 將10附加到cl

ss1:

div cl ax除以10

add ah,30h 餘數轉為ascii碼,

mov si, offset result 儲存到result陣列。

mov [si+bx],ah 商取代結果

inc bx bx遞增

cmp al,0 比較餘數是否零,是則跳出迴圈

jnz ss1

ss2:dec bx bx遞減

mov dx,[si+bx] 將result陣列從最高位開始附加到dx

mov ah,2 字串輸出

int 21h

cmp bx,0 判斷bx是否為零,是則跳出

jnz ss2

mov ah,4ch

int 21h

codes ends

end start 正常結束程式

程式的思想有點像進製轉換,要把數字乙個乙個從和中提取,由於是十進位制,可以將和除以10,所得的餘數依次為個位開始的數字,最後,只需要把數字存入陣列,用棧式的讀取,最後存的先讀,為最高位,轉成ascii碼,輸出。

個位數相加當然也可以用這種方法,但是沒必要這麼複雜。所以第乙個程式很簡單的判斷一下進製即可。

原來乙個多位數的相加之後的顯示是如此的精妙!

多位數乘法計算

option base 1 private sub command1 click dim m as string dim n as string m trim text1.text n trim text2.text dim number1 as byte dim number2 as byte r...

004 美化多位數字

將給定的數字以逗號分隔的形式顯示出來 bin bash filename nicenum.sh 可接受兩個選項 dd decimal pointa,小數分隔符 和td thousands delimiter,千位分隔符 nicenumber decimal fi thousands int whil...

組合語言輸出乙個多位數

研究了一下怎麼用組合語言 求 1 20 的和 並且列印到螢幕上,難點就在於列印。大概的思路就是 每次 除10,把餘數儲存到陣列中,最後把陣列倒序輸出。輸出乙個 小於 2560 的多位數 model small data num db 0,0 0,0 0,0 0 定義乙個陣列num stack db ...