双字节十六进制如何转换成十进制

双字节十六进制如何转换成十进制,第1张

这要看你要转换的多字节数据是什么类型的,因为不同的类型有不同的转法(以下所列数据类型是按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单元中的二进制用十进制数显示出来的子程序,用汇编语言,谢谢啦、八进制六十三转十进制等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9282476.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存