彙編(實現32位 加法,並呼叫int 10h 輸出結果)
阿新 • • 發佈:2018-11-08
定義雙子型別:
A DD 21111112H
B DD 11111111H
上面的A和B都是32位,而ax,dx都是16位,所以需要把高16位和低16位分開進行加法。其中先處理低16位,用add。高16位可能會有進位,所以用adc。
21 |
11 |
11 |
11 |
12 |
A+1即為 11,A+4即為21
至於輸出,使用了xlat表,先自己建立一個查詢表(用於輸出0-F),然後更據偏移來輸出。
程式碼:
DATAS SEGMENT ;此處輸入資料段程式碼 hextab db '0123456789ABCDEF' A DD 21111112H B DD 11111111H ans DD ? DATAS ENDS ;字資料指的是16位的,雙字資料指的是32位的 STACKS SEGMENT ;此處輸入堆疊段程式碼 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX ;此處輸入程式碼段程式碼 mov ax,word ptr A mov bx,word ptr B add ax,bx mov word ptr ans,ax mov ax,word ptr A+2 mov bx,word ptr B+2 adc ax,bx ; adc 將會把前一個add產生的進位標誌也加上 mov word ptr ans+2,ax lea bx,hextab mov ah,0eh;AH=0EH ;AL 暫存器存要顯示的字元,BH 為目前的顯示頁, ;如果是在圖形模式,則 BH 須設為 0,假如是在圖形模式下, ;也可以設定 BL 來表示文字的顏色,文字模式下的 BL 則無功能 mov dx,word ptr ans+2 mov cx,404h c1: rol dx,cl mov al,dl and al,0fh xlat ;查表,使得AL←((BX)+(AL) int 10h dec ch jnz c1 mov dx,word ptr ans mov cx,0404h c2: rol dx,cl mov al,dl and al,0fh xlat int 10h dec ch jnz c2 MOV AH,4CH INT 21H CODES ENDS END START