这要看你要转换的多字节数据是什么类型的,因为不同的类型有不同的转法(以下所列数据类型是按vb的说法的,其他语言类似):
比如是byte或者是纯字符串string,只需把每个字节分别转换即可
05
4b
4d
13
f9
=
5
75
77
19
249
如果是integer,则每两个字节一组,每组两个字节的顺序反转后再转换
054b
4d13
=
4b05
134d
=
19205
4941
如果是long,则4个字节一组,每组的四个字节顺序反转后再转换
054b4d13
=
134d4b05
=
323832581
如果是浮点数,那就很复杂了,这里不说了。
code segment
assume cs:code
start:
mov bx, 4053
call show
; exit to os
mov ah,4ch
int 21h
;
; print the integer value in bx with base 10
;
; ax -- the integer number will be shown, mov from bx
; bx -- the base, you can change it to 2, 8, less than 10
;
show proc near
mov ax, bx
mov bx, 10
xor cx, cx
Q0:
xor dx, dx
div bx
or dx, 0e30h
push dx
inc cx
cmp ax, 0
jnz Q0
Q1:
pop ax
int 10h
loop Q1
ret
show endp
code ends
end start
68^1+38^0=48+3=51
以下是a进制转10进制的pascal函数子程序:
function convert10(c:string;a:integer):longint;
{c为a进制的字符串,a表示a进制,返回结果为10进制长整型数}
var
k,i,j:integer;
cc:longint;
ch:char;
begin
k:=length(c);
cc:=0;
for i:=1 to k do begin
ch:=c[i];
case ch of
'A''F':j:=ord(ch)-ord('A')+10;
'a''f':j:=ord(ch)-ord('a')+10;
'0''9':j:=ord(ch)-ord('0');
end;
cc:=cca+j;
end;
convert10:=cc;
end;
CODE SEGMENT
ASSUME CS:CODE
BUFF DB 5,,5 DUP()
X DW 0
START: PUSH CS
POP DS
@0:
CALL LFCR
LEA DX,BUFF
MOV AH,10
INT 21H
LEA SI,BUFF
MOV CL,[SI+1]
MOV CH,0
CLD
ADD SI,2
MOV DX,0
@1:
LODSB
CMP AL,'0'
JB @0
CMP AL,'9'
JBE @2
CMP AL,'A'
JB @0
CMP AL,'F'
JBE @3
CMP AL,'a'
JB @0
CMP AL,'f'
JBE @4
JMP @0
@2:
SUB AL,'0'
JMP @5
@3:
SUB AL,'A'
ADD AL,10
JMP @5
@4:
SUB AL,'a'
ADD AL,10
@5:
SHL DX,4
MOV AH,0
ADD DX,AX
LOOP @1
MOV AX,DX
CALL LFCR
CALL DSPAX
MOV AH,4CH
INT 21H
;==============================
LFCR:
PUSH AX
PUSH DX
MOV AH,2
MOV DL,13
INT 21H
MOV DL,10
INT 21H
POP DX
POP AX
RET
;===============================
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
循环5次即可。
MOV R0, #20H ;加数1地址、和的地址
MOV R1, #25H ;加数2地址
CLR C
MOV R2, #5 ;循环5次
A_LOOP:
MOV A, @R0 ;取
ADDC A, @R1 ;加
DA A ;调整为BCD码
MOV @R0, A ;存
INC R0
INC R1
DJNZ R2, A_LOOP
RET
data segment
buf dw 1,2,3,4,5,6,7,8,9
sum dw 0 ;存放结果
data ends
code segment
assume cs:code,ds:data
main proc far
start:
mov ax,data
mov ds,ax
lea si,buf
mov cx,9
loop1:
mov ax,[si]
add sum,ax
add si,2
loop loop1
mov bx,sum
call binidec ;转换为十进制子程序
mov ah,4ch
int 21h
ret
main endp
binidec proc near
mov cx,10d
call dec_div
mov cx,1d
call dec_div
ret
binidec endp
dec_div proc near
mov ax,bx
mov dx,0
div cx
mov bx,dx
mov dl,al
add dl,30h
mov ah,02h
int 21h
ret
dec_div endp
code ends
end start
以上就是关于双字节十六进制如何转换成十进制全部的内容,包括:双字节十六进制如何转换成十进制、编写将bx单元中的二进制用十进制数显示出来的子程序,用汇编语言,谢谢啦、八进制六十三转十进制等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)