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位的運算結果。