微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 ONLY ADD、MOV 和 SUB

如何解决使用 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 举报,一经查实,本站将立刻删除。