【程序】设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
【请回答】本程序没有考虑进位的情况。如果考虑可能产生的进位,应该如何修改程序?
汇编语言大神速速前来领分
答案:2 悬赏:30 手机版
解决时间 2021-02-14 18:41
- 提问者网友:眉目添风霜
- 2021-02-14 05:02
最佳答案
- 五星知识达人网友:夜余生
- 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
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:若有不明白的地方,可以追问
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯