webpack 静态资源路径:十六进制如何转换成十进制(汇编程序)

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/05 20:00:24
从键盘上输入0-0FFFFH的十六进制的正数转换成十进制的数,并在屏幕上显示出来
要求写出程序。
用8086(8088)汇编程序编写

用位加权乘,积相加法比较简单。如8FFC035B转换为十进制(最低位是16^0,依次向左):
8FFC035B(16)=8x16^7+Fx16^6+Fx16^5+Cx16^4+0x16^3+3x16^2+5x16^1+Bx16^0
=2147483648+15x16^6+15x16^5+12x16^4+0+768+80+11
=2147483648+251658240+15728640+786432+768+80+11
=2415657819(10)。
也可以用“用10除,反向取余数”法,注意被除数是16进制就是了,如16进制数ABC化为10进制……
ABC(16)÷10 = 112 余 8
112(16)÷10 = 1B 余 4
1B(16)÷10 = 2 余 7
2(16)÷10 = 0 余 2
反向取余数是2748(10)

1·打开电脑自带的计算器

(图片以win10为例)

2·在菜单里选择程序员

其中

HEX为十六进制

DEC为十进制

OCT为八进制

BIN为二进制

ABCD÷16=X·······Y(余数)

X÷16=W·······M(余数)

······

直到

E÷16=0·······I(余数)

则ABCD的十六进制数为I·····MY

余数对应关系:

0~9对应0~9

10~15分别对应ABCDEF

把十六进制转换成十进制

Odimar Tomazeli

摘 要:在delphi中把十六进制转换成十进制
关键字:十六进制
类 别:Object Pascal
--------------------------------------------------------------------------------

function HexaToDecimal(Hexa:string):longint;
const
ValoresHexa : array[\'A\'..\'F\'] of integer = (10,11,12,13,14,15);
var
nDecimal : longint;
nIndex : byte;
begin
nDecimal := 0;
Hexa := Uppercase(Hexa);
for nIndex := Length(Hexa) downto 1 do
if Hexa[nIndex] in [\'0\'..\'9\']
then nDecimal := nDecimal + StrToInt(Hexa[nIndex]) *
Trunc(Exp((Length(Hexa)-nIndex)*ln(16)))
else nDecimal := nDecimal + ValoresHexa[Hexa[nIndex]] *
Trunc(Exp((Length(Hexa)-nIndex)*ln(16)));
HexaToDecimal := nDecimal;
end;

采用除 10 求余压栈,最后在逐一出栈进行显示,至于实现的原理,拿个实际数据单步走一边就能看明白了。
  参考如下:
  ;display the unsigned integer value in AX
  dec2asc proc
  push ax
  push dx
  push cx
  mov dx, -1 ; flag of ending
  push dx ; flag to stack
  mov cx, 10
  l_div10:
  xor dx, dx
  div cx ; DX:AX / CX
  push dx
  test ax, ax
  jne l_div10
  mov cx, -1
  mov ah, 2 ; display character in DL
  l_disp:
  pop dx
  cmp dx, cx
  je l_ret
  add dl, '0' ; one-digit value turns to character
  int 21h ; display the digit
  jmp l_disp
  l_ret:
  pop cx
  pop dx
  pop ax
  ret
  dec2asc endp

将十六进制转化成十进制数,需要用除法来实现。
以将16位的十六进制无符号数转成十进制数为例,因为最大值65535是有万位数,所以,做4次除法,第一次除以10000,商就是万位数。然后,余数除以1000,商是千位数。再除以100,商是百位数。第四次除以10,商是十位数,余数是个位数。
这个问题,不能用每次除以10的办法。因为受除法指令功能的限制,会发生除法溢出。
这是一类典型问题,具体的程序实现的例子,所有汇编语言的教材上都有例子。可参阅。