将两个寄存器的值组合成一个变量

时间:2013-09-29 14:35:31

标签: assembly x86 tasm

我正在使用tasm。问题是基本的,但我不记得怎么做了。为此道歉,我的问题是假设我有两个具有不同值的寄存器,我希望将它们合并(合并)并将值保存到单个变量中。我该怎么做? 假设ah=01& al=04。我希望将它们合并为14,十六进制等效0E的单个值。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

一般的想法是将ah乘以10,然后添加到al。并不是说x86程序集中的实现有点单调乏味,因为乘法指令受限于它们可以操作的内容。作为替代方案,您可以将乘法分解为班次并添加,例如:

add ah, ah ; ah*2
add al, ah ; al + 2*ah
shl ah, 2  ; 8*ah
add al, ah ; al + 10*ah

请注意,注释引用原始值,这是一个8位版本。

答案 1 :(得分:0)

这个用汇编语言编写,使用KEIL软件为16个寄存器的ARM模型

org.joda.time.DateTimeZone#forTimeZone(java.util.TimeZone zone)

其中R1和R2中的变量内容被添加并存储在R3中,即R3 < - R1 + R2。在调试整个代码后,存储在R3中的值将可见