永发信息网

汇编语言大神速速前来领分

答案:2  悬赏:30  手机版
解决时间 2021-02-14 18:41
  • 提问者网友:眉目添风霜
  • 2021-02-14 05:02
【程序】设X和Y均为16位无符号数,写一个求表达式X+Y值的程序。
DSEG SEGMENT ;数据段
X DW 1234H
Y DW 5678H
Z DW ?
DSEG ENDS
CSEG SEGMENT ;代码段
ASSUME CS:CSEG,DS:DSEG
START: MOV AX,DSEG ;段寄存器初值
MOV DS,AX
MOV AX,X
ADD AX,Y ;求x+y和
MOV Z,AX ;保存
MOV AH,4CH
INT 21H ;程序结束退出
CSEG ENDS
END START

【请回答】本程序没有考虑进位的情况。如果考虑可能产生的进位,应该如何修改程序?
最佳答案
  • 五星知识达人网友:夜余生
  • 2021-02-14 06:19
DSEG SEGMENT ;数据段
X DW 1234H
Y DW 5678H
Z DW ?, ? ;多留一个字空间
DSEG ENDS
CSEG SEGMENT ;代码段
ASSUME CS:CSEG, DS:DSEG
START:
MOV AX, DSEG ;段寄存器初值
MOV DS, AX
;--------------------------------
MOV AX, X
ADD AX, Y ;求x+y和
MOV Z, AX ;保存
MOV AX, 0
ADC AX, 0 ;0 + 0 + CF
MOV Z + 2, AX ;保存进位
;--------------------------------
MOV AH, 4CH
INT 21H ;程序结束退出
CSEG ENDS
END START
全部回答
  • 1楼网友:梦中风几里
  • 2021-02-14 07:46
如果要考虑进位的情况,那么我们就要用ADC指令   ADC是带进位的加法指令,他利用了CF位上记录的进位制   例如   ADC AX,CX 那么实现的功能是AX = AX + CX + CF   所以楼主你的程序应该改成这样   DSEG SEGMENT ;数据段   X DW 1234H   Y DW 0F678H Z DW 0 ;*改了这里   DSEG ENDS   CSEG SEGMENT ;代码段   ASSUME CS:CSEG,DS:DSEG   START: MOV AX,DSEG ;段寄存器初值   MOV DS,AX   MOV AX,X   ADD AX,Y ;求x+y和 ADC BYTE PTR Z[2],0 ;*改了这里,将进位存到Z:2的内存处   ADD Z,AX ;保存   MOV AH,4CH   INT 21H ;程序结束退出   CSEG ENDS END START PS:若有不明白的地方,可以追问
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯