首页 > 解决方案 > 执行后保存在相应寄存器中的值

问题描述

问题:在执行相应的行后,用保存在相应寄存器中的值填充空白。以十六进制和 32 位输入所有值。

我的想法:我是Assembly 的新手。我知道 EAX、EBX、ECX、EDX、ESI、EDI、ESP 或 EBP 等值适用于任何 32 位寄存器。或者像 AX、BX、CX 或 DX 这样的值适用于任何 16 位寄存器。我读过 xor eax, eax — 将 EAX 的内容设置为零。这意味着第一个间隙是 0x00000000,对吗?第二个间隙将 0x12345678 复制到 eax 中。这意味着 eax = 0x12345678。第三个间隙也应该是 0x00000000,因为 0 将值复制到 ebx?对于其他差距,我找不到任何东西。

xor eax, eax           ; eax = 0x00000000 (Gap 1)
mov eax, 0x12345678    ; eax = 0x12345678 (Gap 2)
mov ebx, 0
mov bx, ax             ; ebx = 0x00005678 (Gap 3)
mov bl, ah             ; ebx = 0x00005656 (Gap 4)
mov eax, 0xFFFFFFFF   
sar eax, 8             ; eax = 0xFFFFFFFF (Gap 5)
shr eax, 8             ; eax = 0x00000000 (Gap 6)
sar eax, 8             ; eax = 0x00000000 (Gap 7)
ror eax, 8             ; eax = 0x00000000 (Gap 8)

标签: assemblyx86cpu-registers

解决方案


mov eax, 0x12345678    ; eax = 0x12345678 (Gap 2)
mov ebx, 0
mov bx, ax             ; ebx = 0x00005678 (Gap 3)
mov bl, ah             ; ebx = 0x00005656 (Gap 4)
mov eax, 0xFFFFFFFF   
sar eax, 8             ; eax = 0xFFFFFFFF (Gap 5)
shr eax, 8             ; eax = 0x00FFFFFF (Gap 6)
sar eax, 8             ; eax = 0x0000FFFF(Gap 7)
ror eax, 8             ; eax = 0xFF0000FF(Gap 8)

我想我明白了。


推荐阅读