将bl中的二进制数转为十六进制数的形式在屏幕上显示,要求是用汇编语言编写!急用!

2024-12-04 20:56:09
推荐回答(1个)
回答(1):

DATA SEGMENT
BUF DB 5 DUP(?) ;预留5单元空间
D0 DW 1000100110100011B
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DI,OFFSET D0 ;将DI指向BUF的下一单元
MOV CX,0
MOV AX,D0 ;取要用来变十六进制数的数到AX
MOV BX,16 ;准备除以16
CBUF10: DEC DI ;准备存放余数,往前倒存
INC CX
MOV DX,0;将除数的高16位(在DX中)清0,DX也将用来存放余数
DIV BX ;DX,AX除以BX (BX=16)
ADD DL,30H ;余数变为ASCII码值
MOV BYTE PTR[DI],DL ;存储十六进制数
CMP AX,0 ;是否为0?
JNZ CBUF10 ;不为0转CBUF10
CHANGE11: MOV DL,BYTE PTR[DI];取出存放在BUF中的十六进制数到DL供显示
CMP DL,3AH ;是否小于10?
JB CHANGE12 ;如果小于10转显示
ADD DL,7 ;否则为A到F之间数,加7
CHANGE12: MOV AH,2 ;显示1个字符
INT 21H
INC DI
LOOP CHANGE11
MOV AH,4CH ;程序结束并返回DOS
INT 21H
CODE ENDS
END START