Assembly 如果不使用写十六进制,如何将十进制数转换为十六进制

Assembly 如果不使用写十六进制,如何将十进制数转换为十六进制,assembly,x86,hex,Assembly,X86,Hex,编写将十进制数转换为十六进制数的程序。 要将十进制数转换为十六进制数,我们发现16的最大幂小于等于。 我们从1开始,比较N和1 If 1 < N we try 16 if 16 < N we try 256 然后我们通过逐次除法进行转换 Ex convert 834 to hex 834/256 = 3 + r 78 78/16 = 4 + r 14 14/1 = E + r0 十六进制数是34Eh 如果第一个数字是一个字母,你可以不带前导零,

编写将十进制数转换为十六进制数的程序。 要将十进制数转换为十六进制数,我们发现16的最大幂小于等于。 我们从1开始,比较N和1

If 1 < N we try 16
if 16 < N we try 256
然后我们通过逐次除法进行转换

Ex    convert 834 to hex
834/256  = 3 + r 78
78/16       = 4 + r 14
14/1         = E + r0
十六进制数是34Eh

如果第一个数字是一个字母,你可以不带前导零,但是0AB3h比AB3h好。但是,您必须将h作为答案的最后一部分

mov edx,offset msg
call writestring
call readint
mov tempt1,eax
div eax
.if(tempt<1)
    mov eax,16
.elseif()
.else
.endif
ret
mov edx,偏移量msg
通话记录
调用readint
mov1,eax
略过除错指令

.if(尝试如果您从转换为二进制开始,这很容易

我假设您的输入字符串是ascii(对于bcd,您可以使用ommit第一个减法。)

  • 将保留寄存器设置为0

  • 从最低有效位减去“0”(要转换为bcd的字符)开始

  • 将数字乘以10^n,其中n是它的位置

  • 将数字添加到临时寄存器中

  • 重复,直到完成

  • 现在,每个字节包含8位或两个半字节,每个半字节相当于一个十六进制数字。复制该字节并使用0xf将其转换为低半字节

  • 如果大于9,则添加“@”(在A之前)

  • 否则添加“0”

  • 将保留寄存器位移4以获取下一个数字

  • 循环直到您的保留寄存器为空


  • 有人能建议怎么做吗?我只知道如何除数,但如何得到余数?欢迎来到StackOverflow。这不是一个为我做家庭作业的网站。请给我们一些证据,证明你至少尝试过。我已经添加了起始代码,但我迷路了。不知道下一步该怎么做。无需使用
    div
    x SHR 4
    x/16
    x和15
    x%16
    mov edx,offset msg
    call writestring
    call readint
    mov tempt1,eax
    div eax
    .if(tempt<1)
        mov eax,16
    .elseif()
    .else
    .endif
    ret