當前位置:編程學習大全網 - 源碼下載 - 求 十六位十進制求和 8086匯編 代碼

求 十六位十進制求和 8086匯編 代碼

.MODEL SMALL

.DATA

X1 DB '1234567890123456' ; 16位的十進制被加數

X2 DB '9233445566778899' ; 16位的十進制加數

Y1 DB '00000000000000000' ; 17位的十進制加法的和(考慮最高位可能有進位產生)

.CODE

.STARTUP

LEA SI, X1

LEA DI, X2

LEA BX, Y1

ADD SI, 15 ; SI 指向被加數的最右端的個位數

ADD DI, 15 ; DI 指向加數的個位數

ADD BX, 16 ; BX 指向加法的和的個位數

MOV CX, 16 ; 循環16次

CLC ; 運算前將CF清0

PUSHF ;PSW標誌寄存器入棧保存

AGAIN:

POPF ; PSW標誌寄存器出棧,恢復CF

MOV AL, [SI] ;取被加數到AL

ADC AL, [DI] ;將加數加到AL中

AAA ;非壓縮的BCD碼(即ASCII碼)加法調整

MOV [BX], AL ; 保存加得的和

PUSHF ; PSW標誌寄存器入棧,主要是為了保存好CF標誌

AND BYTE PTR [BX], 0FH ;將這壹位加法的和的高4位清零

ADD BYTE PTR [BX], 30H ; 將這壹位加法的和調整成數字的ASCII碼

DEC SI ; 調整指針,處理下壹位

DEC DI

DEC BX

LOOP AGAIN

POPF ; 這壹小段指令處理最後的進位形成的第17位

MOV AL, 0

ADC AL, 0

ADD AL, 30H

MOV [BX], AL

.EXIT

END

程序說明:

1. 很長的整數,直接按每壹位用壹個字節的數字字符的ASCII碼存儲,16位的十進制數就是壹個由16個數字字符構成的字符串

2. 加法運算,是將每個ASCII字符看成是非壓縮的BCD碼,在AL中進行過加法運算後,用非壓縮的BCD碼調整指令將結果調整成非壓縮的BCD碼格式,加法的進位保存在CF中。運算規則完全按照手工計算的方法進行,依個位、十位、百位……的次序從右向左逐位相加,在相加時帶上上壹位的進位。程序***循環16次。

3. 為了避免指針調整和循環控制時CF被這些運算結果所修改,造成運算結果錯誤,需要用堆棧保存PSW的方法保護CF,運算結果調整好以後立即保存CF,下次運算前恢復CF。

4. 程序只考慮了運算,沒有考慮顯示。可以在調試程序中查看運算結果是否正確。若需要加上顯示功能,對數據段的定義稍加修改,用09H號DOS系統功能調用即可。

  • 上一篇:陶江湖註冊過商標嗎?還有哪些分類可以註冊?
  • 下一篇:文章論壇源代碼
  • copyright 2024編程學習大全網