1个回答
展开全部
只显示结果,加数、被加数的显示你自己琢磨吧 !
CODE SEGMENT
ASSUME CS:CODE
X DB 12H,34H,56H
Y DB 65H,98H,98H
N EQU $-Y
Z DB N+1 DUP(0)
START: PUSH CS
POP DS
PUSH CS
POP ES ; 使数据段、附加段与代码在同一段中
MOV CX,N ; 字节数置入cx
MOV BX,0 ; 基址寄存器置0
CLC ; 清进位借位标志
@0:
MOV AL,X[BX] ; 将被加数的低字节移入al
ADC AL,Y[BX] ; 带进未的加,加加数的低字节
DAA
MOV Z[BX],AL ; 将结果移入和的低字节
INC BX ; 基址寄存器加1
LOOP @0 ; 循环
MOV BYTE PTR Z[BX],0 ; 处理最高位
JNC @01
MOV BYTE PTR Z[BX], 1
@01:
LEA SI,Z ; 将和的首地址置入 si
MOV CX,N+1 ; 字节数置入 cx
CLD
@1:
LODSB ; 装入和的低字节到 al
CALL DSPAL ; 调用子程序以16进制形式显示(其实是显示bcd数)
LOOP @1 ; 循环
MOV AH,4CH
INT 21H
;=============================
DSPAL PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSHF
MOV CX,2 ; 一个字节只有2位的16进制数
MOV BX,AX ; 将al 保存到 bl 中
@DSPAL1:
ROR BL,1 ; 循环将bl 右移4次 ,即将高位移到右侧
ROR BL,1
ROR BL,1
ROR BL,1
MOV DL,BL ; 放到 dl 中
AND DL,0FH ; 清掉 高位
CMP DL,9 ; 和9比较
JA @DSPAL2 ; 大于 即在 A~F 之间
ADD DL,30H ; 否则就是 0~9,加30H变为 ASCii码
JMP @DSPAL3
@DSPAL2:
ADD DL,37H ; 加 37H 变为 A~F 的ASCii码
@DSPAL3:
MOV AH,2
INT 21H
LOOP @DSPAL1 ; 循环输出 低位
MOV AH,2
MOV DL,'H' ; 显示 H
INT 21H
MOV DL,32 ; 显示空格
INT 21H
POPF
POP DX
POP CX
POP BX
POP AX
RET
DSPAL ENDP
CODE ENDS
END START
追问
大哥,你这个程序执行后并不能按照要求啊。。。它直接输出结果77H 32H 55H 01H了。。。
追答
因为程序中给出了x、y,你可以修改x、y
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询