assembly - 执行后保存在相应寄存器中的值
问题描述
问题:在执行相应的行后,用保存在相应寄存器中的值填充空白。以十六进制和 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)
解决方案
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)
我想我明白了。
推荐阅读
- php - 为什么只有第一个 mysqli_fetch() 结果存储在数组中
- python - 打印命令写入一行
- azure - Function App 调用另一个被 IP 地址阻止的 Function App
- ios - [NSPlaceholderString initWithString:]: nil argument' 在 iOS13 上
- node.js - Node.js REST API:找不到模块'./utility/utiliy'
- c# - Postgres c# 监听超时
- c++ - 如何减少花费的时间
- javascript - Angular 选择器组件生命周期 - ngoninit/ngondestroy/等。如果嵌套在另一个之下,则会触发。这种行为可以避免吗?
- sql-server - 添加类型的类似hashmap的列
实体 - python - Pandas Dataframe - 在多列上装箱并在另一列上获取统计信息