923085803 2017-01-04 16:04 采纳率: 100%
浏览 2475
已采纳

汇编:设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条回答 默认 最新

  • Tiger_Zhao 2017-01-05 01:40
    关注

    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位的运算结果。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误