Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 拆解命令8E C0_Assembly_X86_Tasm_Mov - Fatal编程技术网

Assembly 拆解命令8E C0

Assembly 拆解命令8E C0,assembly,x86,tasm,mov,Assembly,X86,Tasm,Mov,我需要拆卸命令8E C0,你能帮我吗 我已经说过: 第一个字节8E=100001110b是mov sr,reg/mem 但是我不知道如何处理第二个字节11000000,你可以自己翻阅英特尔文档,或者使用更简单的反汇编程序。答案是: mov ES, EAX 我使用yasm,并执行了以下操作: # assemble the two bytes: echo 'lbl: db 0x8e, 0xc0' | yasm -f elf - -o tmp.o # disassemble the output:

我需要拆卸命令8E C0,你能帮我吗

我已经说过:

第一个字节8E=100001110b是mov sr,reg/mem


但是我不知道如何处理第二个字节11000000,你可以自己翻阅英特尔文档,或者使用更简单的反汇编程序。答案是:

mov ES, EAX
我使用yasm,并执行了以下操作:

# assemble the two bytes:
echo 'lbl: db 0x8e, 0xc0' | yasm -f elf - -o tmp.o

# disassemble the output:
objdump -d -M intel tmp.o
如果要手动执行此操作,可以按如下方式解释字节

8E
对应于英特尔指令集参考中的此指令:

8E/r。。。机动部队,r/m16。。。将r/m16移动到段寄存器

/r
表示以下字节为“Mod r/M”字节。指令的描述表明,我们应该将Reg/Opcode部分解释为段寄存器,段寄存器将作为目标,Mod和R/M部分将指示源。将这些位分开,Mod是最上面的两位(
11b
),Reg是接下来的三位(
000b
),R/M是最下面的三位(
000b


在适当的表格中查找,Mod of
11
表示寄存器操作数,R/M表示
EAX
(或
AX
,在16位模式下)和
000
表示Reg,当引用段寄存器时,如果第二个操作数是mem,则表示
ES

,我猜这是一个地址。EAX是32位x86程序集AX寄存器的扩展版本。@user785415:
mov es,EAX
mov es,AX
对32位处理器的影响与英特尔文档中的完全相同;不需要16位操作数大小前缀,如果省略,指令执行速度会更快。汇编程序可以将
ax
而不是
eax
的使用映射到16位操作数大小前缀的加法中。