MOV A, 40H
ADD A,41H
MOV 50H,A 和的低字节
MOV A ,#0
ADDC A,#0 取低位字节相加的进位
MOV 51H,A 和的高位字节,其实就是进位,最大是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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)