『楼 主』:
汇编语言编译器使用6
编写一个主程序,从键盘输入两位非压缩BCD数,存入AX,未来将其转化为二进制数,应编写一个远类型的子程序。若将字符显示出来,可用近类型子程序实现,也可用源类型子程序实现。主程序执行时,数据可循环输入,遇到‘00’结束
NAME EX_05_19
STACKS SEGMENT
DB 100 DUP(0)
STACKS ENDS
EXTRN CON:FAR,DISP:FAR
CODES SEGMENT
ASSUME CS:CODES,SS:STACKS
MAIN PROC FAR
START:PUSH DS
MOV AX,0
PUSH AX
REV:MOV AX,1
INT 21H
MOV BL,AL
INT 21H
MOV AH,AL
MOV AL,BL
CMP AX,3030H
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 BL,CL
MOV CL,1
SHL AL,CL
ADD AL,BL
ADD AL,AH
RET
TRAN ENDP
CODES ENDS
END START
NAME EX_05_09_2
PUBLIC CON,DISP
CSBG SEGMENT PARA 'CODE'
ASSUME CS:CSBG
CON PROC FAR
PUSH AX
MOV CL,4
SHR AL,CL
ADD AL,30H
ADD AL,30H
CMP AL,39H
JBE CON2
ADD AL,7
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 DISP
RET
CON ENDP
DISP PROC FAR
MOV DL,AL
MOV AH,2
INT 21H
RET
DISP ENDP
CSBG ENDS
END
程序可以正常编译,但运行有问题,结果不合适。有以下疑惑:
1)能不能给我说一下代码问题。键盘输入的数字是十六进制码表示,前面请教过,通过子程序TRAN转换后成了什么码?是不是通过MOV DL,02H,int21H
显示时必须是十六进制码。说实话,这个题目我就看不明白,能不能给我详细说一下,他们怎么转换的?
2)
我标出一句,觉得应该吧FAR改为NEAR,是段内
谢了
|