题目是 从键盘输入二位非压缩的BCD数,存入AX中中,并将其转化为二进制数,且显示出来
NAME EX_05_18
STACKS SEGMENT
DB 100 DUP(0)
STACKS ENDS
CSAG SEGMENT
ASSUME CS:CSAG,SS:STACKS
MAIN PROC FAR
START:PUSH DS
MOV AX,0
PUSH AX
REV:MOV AH,1
INT 21H
MOV BL,AL
INT 21H
MOV AH,AL
MOV AL,BL
CMP AX,3030H;判AX中是否为'00'
JE ENDTRAN
CALL NEAR PTR TRAN
CALL FAR PTR CON
MOV AL,0DH;?
CALL FAR PTR DISP
MOV AL,0AH;?
CALL FAR PTR DISP
JMP REV
ENDTRAN:RET
MAIN ENDP
TRAN PROC NEAR
AND AX,0F0FH
MOV BL,AL
MOV CL,3
SHL AL,CL
MOV CL,1
SHL BL,CL
ADD AL,BL
ADD AL,AH;将两位BCD数转为二进制数
RET
TRAN ENDP
CSAG ENDS
CSBG SEGMENT PARA'CODE'
ASSUME CS:CSBG
CON PROC FAR
PUSH AX
MOV CL,4
SHR AL,CL
ADD AL,30H
CMP AL,39H
JBE CON2
ADD AL,07H
CON2:PUSH AX
MOV AL,0DH
CALL FAR PTR DISP
MOV AL,0AH
CALL FAR PTR DISP
POP AX
CALL FAR PTR DISP;显示高位十六进制数
POP AX
AND AL,0FH
ADD AL,30H
CMP AL,39H
JBE CON1
ADD AL,07H
CON1:CALL FAR PTR DISP
RET
CON ENDP
DISP PROC PAR MOV DL,AL
MOV AL,02H
INT 21H
RET
DISP ENDP
MOV AH,4CH
INT 21H
CSBG ENDS
END START
麻烦指教一下,有以下问题
(1)判断输入的是不是00,为什么是CMP AX,3030H,为什么跟3030比较?
(2)上次请教过MOV DL,0DH MOV AH,02H INT21H 是换行功能。MOV DL,0AH MOV AL,02H INT 21H 是什么功能?
(3)子程序 TRAN 是将ASSCII码转换为二进制数的功能,帮忙看一下算法有没有问题?
(4)编译后有错误:ADD AL,AH
DISP PROC FAR
谢了
[ Last edited by chrise on 2010-4-11 at 22:34 ]
NAME EX_05_18
STACKS SEGMENT
DB 100 DUP(0)
STACKS ENDS
CSAG SEGMENT
ASSUME CS:CSAG,SS:STACKS
MAIN PROC FAR
START:PUSH DS
MOV AX,0
PUSH AX
REV:MOV AH,1
INT 21H
MOV BL,AL
INT 21H
MOV AH,AL
MOV AL,BL
CMP AX,3030H;判AX中是否为'00'
JE ENDTRAN
CALL NEAR PTR TRAN
CALL FAR PTR CON
MOV AL,0DH;?
CALL FAR PTR DISP
MOV AL,0AH;?
CALL FAR PTR DISP
JMP REV
ENDTRAN:RET
MAIN ENDP
TRAN PROC NEAR
AND AX,0F0FH
MOV BL,AL
MOV CL,3
SHL AL,CL
MOV CL,1
SHL BL,CL
ADD AL,BL
ADD AL,AH;将两位BCD数转为二进制数
RET
TRAN ENDP
CSAG ENDS
CSBG SEGMENT PARA'CODE'
ASSUME CS:CSBG
CON PROC FAR
PUSH AX
MOV CL,4
SHR AL,CL
ADD AL,30H
CMP AL,39H
JBE CON2
ADD AL,07H
CON2:PUSH AX
MOV AL,0DH
CALL FAR PTR DISP
MOV AL,0AH
CALL FAR PTR DISP
POP AX
CALL FAR PTR DISP;显示高位十六进制数
POP AX
AND AL,0FH
ADD AL,30H
CMP AL,39H
JBE CON1
ADD AL,07H
CON1:CALL FAR PTR DISP
RET
CON ENDP
DISP PROC PAR MOV DL,AL
MOV AL,02H
INT 21H
RET
DISP ENDP
MOV AH,4CH
INT 21H
CSBG ENDS
END START
麻烦指教一下,有以下问题
(1)判断输入的是不是00,为什么是CMP AX,3030H,为什么跟3030比较?
(2)上次请教过MOV DL,0DH MOV AH,02H INT21H 是换行功能。MOV DL,0AH MOV AL,02H INT 21H 是什么功能?
(3)子程序 TRAN 是将ASSCII码转换为二进制数的功能,帮忙看一下算法有没有问题?
(4)编译后有错误:ADD AL,AH
DISP PROC FAR
谢了
[ Last edited by chrise on 2010-4-11 at 22:34 ]
