【问题标题】:how can i confer a decimal number into hex without using write hex [closed]如何在不使用 write hex 的情况下将十进制数赋予十六进制 [关闭]
【发布时间】:2014-01-04 02:54:50
【问题描述】:

编写程序将十进制数转换为十六进制。 要将十进制数转换为十六进制,我们找到 16 的最高幂,该数字小于等于。 我们这样做是从 1 开始并将数字 N 与 1 进行比较

If 1 < N we try 16
if 16 < N we try 256

直到我们找到最高的力量。

I would keep the powers in an array like 1,10h, 100h, 1000h, up to 100000000h

然后我们通过连续除法转换

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

【问题讨论】:

  • 任何人都可以建议如何做到这一点。我只知道如何除数,但我怎样才能得到余数?
  • 欢迎来到 StackOverflow。这不是一个为我做家庭作业的网站。请给我们一些你至少尝试过的证据。
  • 我已经添加了我的起始代码,但我迷路了。不知道下一步该做什么。
  • 无需使用divx SHR 4x / 16x AND 15x % 16

标签: assembly x86 hex


【解决方案1】:

如果您从转换为二进制开始,这很容易。

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

  1. 将您的持有寄存器设置为 0。

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

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

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

  5. 重复直到完成。

  6. 现在每个字节包含 8 位或两个半字节,每个半字节相当于一个十六进制数字。复制字节和它与 0xf 以获得低半字节。

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

  8. 否则添加“0”

  9. 将您的保持寄存器位移 4 以获得下一位数字

  10. 循环直到你的保持寄存器为空。

【讨论】:

    猜你喜欢
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    • 2014-09-04
    • 2019-11-07
    • 2021-01-29
    • 1970-01-01
    • 2011-12-09
    相关资源
    最近更新 更多