程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> 匯編16x+y程序-匯編:設X和Y均為16位無符號數,寫一個求表達式16X+Y值的程序。

匯編16x+y程序-匯編:設X和Y均為16位無符號數,寫一個求表達式16X+Y值的程序。

編輯:編程解疑
匯編:設X和Y均為16位無符號數,寫一個求表達式16X+Y值的程序。

DSEG SEGMENT
XXX DW 1234H ;設X為1234H
YYY DW 5678H ;設Y為5678H
ZZZ DD ? ;用於保存結果
DSEG ENDS

CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START:MOV AX,DSEG
MOV DS,AX
MOV AX,XXX
XOR DX,DX
ADD AX,AX
ADC DX,DX
ADD AX,AX
ADC DX,DX
ADD AX,AX
ADC DX,DX
ADD AX,AX
ADC DX,DX
ADD AX,YYY
ADC DX,0
MOV WORD PTR ZZZ,AX
MOV WPRD PTR ZZZ+2,DX
MOV AH,4CH
INT 21H
CSEG ENDS
END START
以上是全部程序,但相關DX的操作不能理解,求指教。
1.為什麼要ADC DX,DX 做了四次是什麼意思?
2.為什麼要ADC DX,0 這個操作是什麼意思?
3.MOV WPRD PTR ZZZ+2,DX 這句是什麼意思,達到什麼目的?

最佳回答:


1.其實就是AX表示低16位,DX表示高16位。
首先,前一句ADD AX,AX表示AX = AX + AX,把低16位乘2,這個運算的進位自動放在CF中;
然後,ADC DX,DX表示DX = DX + DX + CF,高16位乘2的同時加上進位。
2.首先,前一句ADD AX,YYY表示AX = AX + YYY',把低16位加上Y值,進位自動放在CF中;
然後,
ADC DX,0表示DX = DX + 0 + CF`,高16位只需要加上進位。
3.在ZZZ的後兩個字節處寫入高16位值,最終結果是ZZZ處的4個字節表示32位的運算結果。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved