只为记录汇编作业
题目:已知在字变量NUMBER中,存放着一个整数,编写程序,在屏幕上分别用二进制,八进制,十进制,十六进制输出。
代码:
DATA SEGMENT
NUMBER DW 1234H
ANS DB 20 DUP(0) ;N进制转10进制的数组
LEN DB 0 ;记录 N进制转10进制输出的 循环次数
MSG1 DW "Binary number is:$"
MSG2 DW "Octonary number is:$"
MSG3 DW "Signed Decimal number is:$"
MSG4 DW "Hexadecimal number is:$"
CRLF DW 10,13,'$' ;回车换行
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
;输出二进制
XOR BX,BX
MOV BX,2
;输出提示信息
MOV DX,OFFSET MSG1
MOV AH,9
INT 21H
MOV AX,NUMBER
CALL PRINTF
;输出八进制
XOR BX,BX
MOV BX,8
MOV DX,OFFSET MSG2
MOV AH,9
INT 21H
MOV AX,NUMBER
CALL PRINTF
;输出十进制
XOR BX,BX
MOV BX,10
MOV DX,OFFSET MSG3
MOV AH,9
INT 21H
MOV AX,NUMBER
CALL PRINTF
;输出十六进制
XOR BX,BX
MOV BX,16
MOV DX,OFFSET MSG4
MOV AH,9
INT 21H
MOV AX,NUMBER
CALL PRINTF
JMP OVER
;定义输出子程序
PRINTF PROC
MOV LEN,0
MOV DI,OFFSET ANS
F:
XOR DX,DX ;dx置零
DIV BX ;ax/bx AX存的是商 DX存的是余数
CMP DL,10 ;判断是否转换为A-F
JAE AF ;如果DL>=10 跳转到下面的AF函数
ADD DL,30H ;DL+30H 变成0-9 A-F 的ascll码,方便输出
CONTINUE:
MOV [DI],DL ;把DL 放入ANS数组中
INC DI ;DI+1
INC LEN ;len+1
CMP AX,0 ;ax于0比较,判断是否被除尽
JNE F
DEC DI
JMP P
AF:
SUB DL,10
ADD DL,'A'
JMP CONTINUE
P:
XOR CX,CX
MOV CL,LEN ;倒序输出ans数组里存的数据
L:
MOV DL,[DI]
MOV AH,2
INT 21H
DEC DI
LOOP L
XOR CX,CX ;ans数组初始化,加上更严谨,但是没必要
MOV CL,LEN
MOV DI,OFFSET ANS
E:
MOV [DI],0
INC DI
LOOP E
MOV DX,OFFSET CRLF ;回车换行
MOV AH,9
INT 21H
RET
PRINTF ENDP
OVER:
MOV AH,4CH ;结束程序
INT 21H
CODE ENDS
END START