我把注释写在代码里,方便理解
两个10进制相加
.MODEL SMALL
.STACK 64
.DATA
D1 DB 56H,78H
D2 DB '56+78=$'
D3 DB ?
.CODE
MOV AX,@DATA
MOV DS,AX
LEA SI,D1
LEA DI,D3
;显示字符串 DS:DX
LEA DX,D2
MOV AH,9
INT 21H
MOV AL,[SI]
ADD AL,[SI+1]
DAA
MOV BYTE PTR[DI],AL
;进位显示
MOV AL,0
ADC AL,0
OR AL,30H
MOV DL,AL
MOV AH,2
INT 21H
;显示十位数
MOV AL,[DI]
MOV CL,4
ROL AL,CL
AND AL,0FH
OR AL,30H
MOV DL,AL
MOV AH,2
INT 21H
;显示个位数
MOV AL,[DI]
AND AL,0FH
OR AL,30H
MOV DL,AL
MOV AH,2
INT 21H
;停止
MOV AH,4CH
INT 21H
END
两个16进制相加
.MODEL SMALL
.STACK 64
.DATA
D1 DB 9AH,0ABH
D2 DB ?
D3 DB '9AH+0ABH=$'
D4 DB '0123456789ABCDEF'
.CODE
MOV AX, @DATA
MOV DS, AX
;显示初始字符串
MOV AH, 9
LEA DX, D3
INT 21H
LEA BX, D4
;显示进位数
MOV AL,D1
ADD AL,D1+1
MOV D2,AL
MOV AL,0
ADC AL,0
;OR AL,30H
;查表
XLAT
MOV DL,AL
MOV AH,2
INT 21H
;显示十位数
MOV AL,BYTE PTR D2
MOV CL,4
ROR AL,CL
AND AL,0FH
;OR AL,30H
XLAT
MOV DL,AL
MOV AH,2
INT 21H
;显示个位数
MOV AL,BYTE PTR D2
AND AL,0FH
XLAT
MOV DL,AL
MOV AH,2
INT 21H
;补上16进制的H
MOV DL,'H'
MOV AH,2
INT 21H
MOV AH,4CH
INT 21H
END