一、实验目的
1、掌握从键盘输入数据的方法,并了解数据输出时须转换为ASCII码的原理;
2、进一步巩固代码转换的知识和方法,并整理成通用子程序供以后使用;
3、学习汇编语言的综合编程。
提示:以下是本篇文章正文内容,下面案例可供参考
二、实验内容
编写一个程序,实现十进制、十六进制和二进制之间的转换。要求从键盘上输入各种进制的数据,回车后,屏幕上就按三种进制进行输出。输入数据的进制按以下规则识别:
- 十进制:直接以阿拉伯数字0~9组成的数据,最大不超过65535;
- 二进制:以B开头,后接以0、1组成的二进制数据,最大不超过16位;
- 十六进制:以H开头,后接以09、AF组成的十六进制数据,最大不超过FFFFH。
程序不要求对输入数据进行合法性判断,因此,在输入数据时,务必保证输入数据字符串合符以上规则。超过最大值的输入,只取钱买你的有效位,后面的位自动舍去。
三、实验程序
CODE SEGMENT
ASSUME CS:CODE
STRR DB 18
STRRN DB ?
STRRS DB 18 DUP(?)
START: PUSH CS
POP DS
PUSH CS
POP ES
CALL INPUT
CALL LFCR
CALL LFCR
MOV BX,10
CALL DSPAXX
CALL LFCR
MOV BX,16
CALL DSPAXX
CALL LFCR
MOV BX,2
CALL DSPAXX
MOV AH,4CH
INT 21H
INPUT PROC NEAR
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
PUSH BP
PUSHF
MOV AH,0AH
LEA DX,STRR
INT 21H
LEA SI,STRR
MOV CL,[SI+1]
XOR CH,CH
ADD SI,2
CMP BYTE PTR[SI],'B'
JE BB
CMP BYTE PTR[SI],'H'
JE H
CMP CX,5
JBE @1
MOV CX,5
@1:
MOV AX,0
@2:
SHL AX,1
MOV BX,AX
SHL AX,1
SHL AX,1
ADD AX,BX
MOV BL,[SI]
AND BL,0FH
XOR BH,BH
ADD AX,BX
INC SI
LOOP @2
JMP IEND
BB:
DEC CX
INC SI
CMP CX,16
JBE B1
MOV CX,16
B1:
MOV AX,0
B2:
SHL AX,1
MOV BL,[SI]
AND BL,1
XOR BH,BH
ADD AX,BX
INC SI
LOOP B2
JMP IEND
H:
DEC CX
INC SI
CMP CX,4
JBE H1
MOV CX,4
H1:
MOV AX,0
H2:
SHL AX,1
SHL AX,1
SHL AX,1
SHL AX,1
MOV BL,[SI]
CMP BL,'9'
JBE H3
SUB BL,7
H3:
AND BL,0FH
XOR BH,BH
ADD AX,BX
INC SI
LOOP H2
IEND:
POPF
POP BP
POP DI
POP SI
POP DX
POP CX
POP BX
RET
INPUT ENDP
; 输出ax的值,输出的进位制在bx中设定,bx=2~16
DSPAXX PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSHF
XOR CX,CX
; MOV BX,16
DSPAXX_1:
XOR DX,DX
DIV BX
INC CX
OR DX,30H
PUSH DX
CMP AX,0
JNE DSPAXX_1
MOV AH,2
DISPAXX_2:
POP DX
CMP DL,3AH
JB DISPAXX_3
ADD DL,7
DISPAXX_3:
INT 21H
LOOP DISPAXX_2
MOV DL,32
INT 21H
POPF
POP DX
POP CX
POP BX
POP AX
RET
DSPAXX ENDP
LFCR PROC NEAR
PUSH AX
PUSH DX
MOV AH,2
MOV DL,13
INT 21H
MOV DL,10
INT 21H
POP DX
POP AX
RET
LFCR ENDP
DSPAX PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSHF
XOR CX,CX
MOV BX,10
DSPAX1:
XOR DX,DX
DIV BX
INC CX
OR DX,30H
PUSH DX
CMP AX,0
JNE DSPAX1
MOV AH,2
DISPAX2:
POP DX
INT 21H
LOOP DISPAX2
MOV DL,32
INT 21H
POPF
POP DX
POP CX
POP BX
POP AX
RET
DSPAX ENDP
CODE ENDS
END START