汇编十进制数制转换二进制和十六进制
发布网友
发布时间:2022-05-02 13:36
我来回答
共2个回答
热心网友
时间:2022-06-20 07:17
assume cs:code, ds:data
data segment
num dw 0
ten dw 10
tmp dw 0
buffer db 256 p(?)
data ends
code segment
start:mov ax, data
mov ds, ax
call input; 输入
call crlf; 输出一个换行
lea bx, buffer; bx为存储地址
mov ax, num
call d2b; 10进制到2进制转换
mov ah, 9; 输出
mov dx, bx
int 21h
call crlf; 输出一个换行
mov ax, num
call d2h; 10进制到16进制转换
mov ah, 9
mov dx, bx
int 21h
mov ax, 4c00h
int 21h
input:finit; 输入过程,结果保存在num里
fldz
_1L1:mov ah, 1
int 21h
cmp al, 13
jz done1
xor ah, ah
sub al, '0'
mov tmp, ax
fimul ten
fiadd tmp
jmp _1L1
done1:fistp num
ret
d2b:xor si, si; 10进制到2进制转换
xor di, di
mov dx, 8000h
jmp _2L2
_upd1:inc si
_2L1:shr dx, 1
jz done2
_2L2:test dx, ax
jnz _2ones
cmp di, 0
jz _2L1
mov byte ptr [bx+si], '0'
jmp _upd1
_2ones:mov byte ptr [bx+si], '1'
mov di, 1
jmp _upd1
done2:cmp si, 0
jg _2L4
mov byte ptr [bx+si], '0'
inc si
_2L4:mov byte ptr [bx+si], 'B'
mov byte ptr [bx+si+1], '$'
ret
d2h:mov cl, 4; 10进制到16进制转换
xor si, si
xor di, di
jmp _3L3
_3L1:inc si
_3L2:shl ax, cl
jz done3
_3L3:mov dx, ax
and dx, 0f000h
rol dx, cl
cmp di, 0
jnz _3L4
cmp dx, 0
jz _3L2
mov di, 1
_3L4:
cmp dx, 10
jge _3acs
add dl, '0'
mov [bx+si], dl
jmp _3L1
_3acs:sub dx, 10
add dx, 'A'
mov [bx+si], dl
jmp _3L1
done3:cmp si, 0
jg _3L5
mov byte ptr [bx+si], '0'
inc si
_3L5:
mov byte ptr [bx+si], 'H'
mov byte ptr [bx+si+1], '$'
ret
crlf:mov ah, 2; 输出一个回车
mov dl, 13
int 21h
mov dl, 10
int 21h
ret
code ends
end start
热心网友
时间:2022-06-20 07:18
汇编语言源程序实例
假设要将BX寄存器中的数分别按无符号二进制、十进制和十六进制显示在屏幕上,下面给出实现的汇编源程序,均为子程序方式,为了简明,略去现场的保护与恢复操作。
3.1 按二进制形式
DISPBXB PROC NEAR
MOV CX,16
LP:ROL BX,1
JC D1
MOV DL,30H
JMP OUTP
D1:MOV DL,31H
OUTP:MOV AH,2
INT 21H
LOOP LP
MOV DL,’B’ ;显示字母“B”
MOV AH,2
INT 21H
RET
DISPBXB ENDP
设(BX)=7FFFH,则输出格式为0111111111111111B,后面的大字字母B表示二进制形式,显示结果固定为十六位。
3.2 按十进制形式
DISPBXD PROC NEAR
MOV SI,10
XOR CX,CX
MOV AX,BX
NEXT:MOV DX,10
DIV SI
PUSH DX
INC CX
CMP AX,0 ;商为0则完成转换
JNZ NEXT
OUTP:POP DX
ADD DL,30H
MOV AH,2
INT 21H
LOOP OUTP
RET
DISPBXD ENDP
此程序在转换和显示时的循环控制方式和二进制形式的例子不一样,即显示结果的位数是不固定的。若(BX)=7FFFH=32767,则显示结果为5位:32767;若(BX)=00FFH=255,则显示结果为3位:255,与十进制的有效位数相同。
3.3 按十六进制形式
DISPBXH PROC NEAR
MOV CL,
MOV CH,4
NEXT:ROL BX,CL
MOV AL,BL
AND AL,0FH
ADD AL,30H
CMP AL,3AH
JL OUTP
ADD AL,07H ;是A~F,要多加7
OUTP:MOV DL,AL
MOV AH,02H
INT 21H
DEC CH
CMP CH,0
JA NEXT
MOV DL,’H’ ;显示字母“H”
MOV AH,2
INT 21H
RET
DISPBXH ENDP
此程序的显示格式固定为四位,最后加上字母“H”表示为十六进制形式。设(BX)=7FFFH,则显示结果为:7FFFH;若(BX)=00FFH,则显示结果为:00FFH。
4 对有符号数显示的扩展应用
CMP BX,0
JGE ZS
MOV DL,’-’
MOV AH,2
INT 21H
ZS:CALL DISPBXD
希望对你有所帮助。