assembly 如何使用汇编语言将两个寄存器的值相减后的结果放入第三个寄存器?

hc8w905p  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(141)

我刚开始学习一点汇编语言,有点卡壳了。假设我把两个值放入寄存器A和B,如下所示:

MOV A, 45d
MOV B, 127d

我尝试做的是减去这些值,并将结果放入寄存器C。我尝试执行以下操作:

diff: SUB B, A

MOV C, diff

我知道SUB将获取操作的结果并将其放入目的地(B),但我不知道如何将其移入寄存器C。
编辑:我想我已经明白了。我继续做了以下工作:

MOV A, 26d
MOV B, 193d

MOV C, B

SUB C, A
envsm3lx

envsm3lx1#

3操作数伊萨(如RISC-V或AArch 64)可以非破坏性地执行sub dst, src1, src2操作。
例如sub x1, x2, x3碰巧对两个ISA都有效,因为它们都具有寄存器x0..31。
双操作数伊萨可以使用mov dst, src1/sub dst, src2模拟此操作。对于任何其它双输入操作也是如此,您希望在不修改任一输入的情况下将结果存入第三个寄存器。
一些ISA可能对哪些指令可以使用哪些寄存器有限制,例如386之前的x86只能使用multiply two registers,如果其中一个是累加器,并且目的地隐含地是DX:AX(16 x16 =〉32位)或AX(8x8 =〉16位)。但是如果你有一个简单的正交2操作数ISA,每个指令可以使用任意两个寄存器,这就不是问题。
diff: SUB B, A/MOV C, diff会将该标签的地址加载到C中,或者从该地址加载机器码字节。当然不会从B寄存器复制减法结果。

相关问题