嘿我现在正在使用汇编语言而且因为理解转换例程任何Hex / bi / oct数到十进制而陷入困境
program ConvertToDecimal;
#include( "stdlib.hhf" )
static
value: int32;
begin ConvertToDecimal;
stdout.put( "Input a hexadecimal value: " );
stdin.get( ebx );
mov( ebx, value );
stdout.put( "The value $", ebx, " converted to decimal is ", value, nl );
end ConvertToDecimal;
这是教科书中提供的代码,我很困惑哪个部分以及十六进制数如何转换为十进制数
另外
program ConvertToDecimal2;
#include( "stdlib.hhf" )
begin ConvertToDecimal2;
stdout.put( "Input a hexadecimal value: " );
stdin.get( ebx );
stdout.put( "The value $", ebx, " converted to decimal is " );
stdout.puti32( ebx );
stdout.newln();
end ConvertToDecimal2;
我想知道这个人是如何转变的。我认为是输入一个十六进制数字,但它被转换为十进制数字?
答案 0 :(得分:0)
所以...你会通常期望ConvertToHex函数看起来像这个伪代码:
PrintAsHex(val) {
do {
digit = val mod 16; // get the rightmost digit (in Hex)
if digit < 10 print digit; // print 0-9
else print val('A' + (digit-10)) // print A-F
val = val / 16; // shift down next digit
} while (val > 0)
}
实际的装配会使用轮班和东西,但无论如何他们都没有向你展示这个例程!相反,它们会告诉您有关执行IO(输入/输出)“转换”的更高级别例程,这些例程调用那些(未示出的)低级函数。
他们在本书中提到了两点:
默认情况下,当您使用stdout.put例程时,HLA使用十六进制编号系统显示所有字节,字和双字变量。同样,HLA的 stdout.put 例程将以十六进制显示所有寄存器值
这就是为什么 stdout.put(“值”,值,“转换为十六进制是$”,eax,nl); 打印 eax 寄存器中的值作为Hex格式。 'nl'只是换行符。
如果您需要将寄存器或字节,单词或双字变量的值打印为十进制值,只需调用其中一个 putiX
这就是 stdout.puti32(ebx)在十进制中打印为 ebx 的原因。
最后一点 - 尽管根据您想要显示数字的格式提供了不同的输出功能,但输入功能是相同的: stdin.get 全部读取它们,但您必须包括输入中的说明符,如果它不是十进制的。
如书中所述: