我正在使用的系统有四个寄存器:al,bl,cl,dl和值只能以十六进制存储。
我正在阅读键盘2位数,例如9和1。
我想将这个数字存储在BL寄存器中,作为5B,它是91(十进制)的十六进制值。
我一直在想办法解决这个问题,但我找不到任何办法。我的主要错误是我乘以9乘以10,加1,结果为91,但我忘了实际上91是十六进制,翻译成十进制变为145(这不是我的数字)
那么,如何将两个数字(9和1,形成91)作为十六进制值(5B)存储到某个寄存器或RAM中。
请告知。
非常感谢, V
答案 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