使用 ONLY ADD、MOV 和 SUB

问题描述

我需要存储 var1、var2、var3 和 寄存器 ebx 中的 var4。 var1 的二进制补码在 ebx 的最高字节, var2 的二进制补码是下一个字节,var3 的二进制补码是 在下一个字节中,并且 var4 的二进制补码在最低字节中。 请记住,对于一个十六进制数,有两个步骤可以得到两个 补充:

  1. 从 15 中减去这个数
  2. 加1

比如‘D’(44h)存放在eax的最高字节,所以 44h 的二进制补码将存储在 ebx 的最高字节中。这 44h 的二进制补码是:

  1. 15 – 4 = B (11) 和 15 – 4 = 乙 (11) 所以我们在第 1 步之后得到 BBh

  2. BB + 1 = BC 所以 44h 的二进制补码是 BCh,这就是最终结果 ebx 的最高字节

提示:考虑如何使用 sub 指令来获得两个 数的补。 注意:您应该使用与相位相同的移位算法 2 这里。首先将 var1 和 var2 的二进制补码放入 降低 ebx 的 16 位,然后将它们移入 ebx 的高 16 位。一旦那是 完成后,直接将 var3 和 var4 的二进制补码移到 ebx 的低 16 位。 阶段 3 完成后,注册 ebx 应如下所示: BCBFBEBD

这是我到目前为止的代码,它在变量的值周围转移并将值故事到 EAX 中

.386
.model flat,stdcall
.stack 4096
ExitProcess proto,dwExitCode:dword

; defining variables 
.data
    var1 BYTE 'A'
    var2 BYTE 'B'
    var3 BYTE 'C'
    var4 BYTE 'D'
    
.code
main proc
    
    mov ah,var1
    mov al,var4
    mov bh,var2
    mov bl,var3
    mov var1,al
    mov var2,ah
    mov var3,bh
    mov var4,bl
    
    ;move var1 into ah
    ;move var2 into al
    ;add eax to eax 16 times to rotate var1 and var2 into the highest bytes
    mov ah,var2
    add eax,eax
    add eax,eax

    ;move var3 and var4 into the lowest byte postions 
    mov ah,var3
    mov al,var4

    invoke ExitProcess,0
main endp
end main

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)