Assembly 用汇编语言复制值

Assembly 用汇编语言复制值,assembly,Assembly,考虑 mov reg, 5 其中reg被认为是某个寄存器。此语句将值5复制到寄存器 我的问题是: 如果提到的寄存器分为两部分,较高和较低,寄存器的哪一部分将存储值以及原因?在x86中,mov始终加载整个寄存器。它加载指令中指定的寄存器。但是命名的寄存器可能是另一个寄存器的一部分。例如,cx是ecx的低16位 其他处理器架构有其他加载部分寄存器的方法。例如,MIPS让lui加载寄存器的上半部分。CPU中的寄存器通常用“位”实现,每个“位”从逻辑角度保持值0或1(除非您想谈论量子计算机,否则我假设

考虑

mov reg, 5
其中
reg
被认为是某个寄存器。此语句将值
5
复制到寄存器

我的问题是:

如果提到的寄存器分为两部分,较高和较低,寄存器的哪一部分将存储值以及原因?

在x86中,mov始终加载整个寄存器。它加载指令中指定的寄存器。但是命名的寄存器可能是另一个寄存器的一部分。例如,cx是ecx的低16位


其他处理器架构有其他加载部分寄存器的方法。例如,MIPS让lui加载寄存器的上半部分。

CPU中的寄存器通常用“位”实现,每个“位”从逻辑角度保持值0或1(除非您想谈论量子计算机,否则我假设您指的是普通CPU,如x86、ARM、Z80等)

汇编程序源代码中的整数值,如
mov reg,5
,然后在汇编过程中转换为二进制编码:
5=0b101
。如果target
reg
是16位寄存器,则在执行指令后,它将保留二进制值0000_0000_0000_0101(当解释为十进制整数时,该值为“5”)。现在,如果您将16位寄存器拆分为高8位和低8位值,这些值将是0000_0000(高8位),0000_0101(低8位)

在数学术语中,16位寄存器可以保存范围为0..65535(65535=216-1)的值(当位被解释为无符号整数值时)。如果它包含一些值V,那么顶部的8位包含值V_high=V div 256(256=28,“div”表示带截断结果的整数除法),而较低的8位包含值V_low=V mod 256

将两个值合成回原始16位值:V=V_高*256+V_低


或者从“位操作”函数的角度来看:V=(V_HighMate.你救了我一天:p