汇编两数和大于10为什么不对了呢?

来源:百度知道 编辑:UC知道 时间:2024/06/23 15:47:35
DATAS SEGMENT
a DB 0
DATAS ENDS

STACKS SEGMENT
DB 128 DUP (?)
STACKS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV A,8
ADD A,3
MOV dl,a
ADD dl,30H
mov al,dl
MOV AH,02H
INT 21H
MOV AH,4CH
INT 21H
CODES ENDS
END START

;显示运算结果,希望楼主能看懂:8+3=11
DATAS SEGMENT
mes0 db '8+3=$'
a DB 0
DATAS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
mov dx,offset mes0;显示算式
mov ah,9
int 21h
mov al,8
mov ah,3
add al,ah
mov a,al
aam ;二化十专用指令
or ax,3030h
xchg ah,al
mov dx,ax
MOV AH,02H
INT 21H
mov dl,dh
int 21h
mov ah,0
int 16h
MOV AH,4CH
INT 21H
CODES ENDS
END START

02H的中断输出DL是待输出字符的ASCII码
DL=待输出字符的ASCII码,你想输出的应该是ASCII的字符,
所以应该是:
mov AL,08H
ADD AL,03H
MOV DL,AL/*不能是小写a,与你定义的混淆了
ADD DL,30H
MOV AL,DL/*不知道这句话什么用。
MOV AH,02H
INT 21H
MOV AH,4CH
INT 21H
CODES ENDS
END START

显示数字的值需要算出每位(个、十、千…)的数,然后输出该数对应的Ascll码
例中的数你按十进制输出,得输出两次,或者用串输出方式只输出一次,每次用十除,余数就是最低位