汇编程序中的十进制到十六进制

时间:2012-02-20 01:12:34

标签: assembly hex decimal

我正在使用的系统有四个寄存器:al,bl,cl,dl和值只能以十六进制存储。

我正在阅读键盘2位数,例如9和1。

我想将这个数字存储在BL寄存器中,作为5B,它是91(十进制)的十六进制值。

我一直在想办法解决这个问题,但我找不到任何办法。我的主要错误是我乘以9乘以10,加1,结果为91,但我忘了实际上91是十六进制,翻译成十进制变为145(这不是我的数字)

那么,如何将两个数字(9和1,形成91)作为十六进制值(5B)存储到某个寄存器或RAM中。

请告知。

非常感谢, V

3 个答案:

答案 0 :(得分:4)

  

我的主要错误是我乘以9乘以10,加1,结果是91,但我忘了实际上91是十六进制

这不是一个错误。只要您乘以10(十进制)而不是10h(十六进制,即16位小数),那么您将得到您正在寻找的答案。

存储在CPU寄存器中的值只是二进制数,它们不是“十六进制”或“十进制”。

请注意,您可能偶尔会遇到BCD,这些不是二进制数字,但完全是另一回事。

答案 1 :(得分:3)

该数字不会以十六进制,十进制或其他形式存储,当您想要执行类似于在寄存器中创建人类可读字符串的字符时,由您来解释它。

整数值91 in decimal = 5B in hex = 1011011 in binary,它以相同的方式存储在寄存器中 - 作为二进制值。

由于您输入的输入为十进制,因此您可以将9乘以10,然后添加1以便以十进制数91结束(或解释为十六进制 - 5B)。

如果输入是字符'9'的ASCII表示(或任何其他编码),请注意,在这种情况下,您需要将代码转换为实际的十进制值。如果它实际上是ASCII值,那么你只需减去字符'0'即可获得十进制数字9。


如果要将寄存器的二进制值解释为可能打印的十六进制,则通过重复获取将寄存器中的值除以16,as outlined here的剩余部分来构建字符串。构造十进制字符串(除以10)或二进制字符串(除以2)的过程相同。

答案 2 :(得分:0)

如果我理解正确,你乘以10h(十六分之十),所以它产生了错误的结果。

   ;assuming val_1 is 9h and val_2 is 1h

   mov al, val_1
   mul al, 0Ah
   add al, val_2
   mov bl, al