欢迎光临散文网 会员登陆 & 注册

关于8086的一些特殊机器码译指结果

2020-02-19 20:56 作者:黄禄轩电脑专用账号  | 我要投稿

我记得有天有人问我在8086上0x0f被译成什么,然后我做了俩个实验
实验1
60:100 b8 70 00 mov ax,70
60:103 50            push ax
60:104 0f             pop cs
60:105 eb 9         jmp 110
70:210 cc            int 3
单步结果:
60:103 push ax
60:104 pop cs
70:110 int 3
实验2
60:100 b8 60 00 mov ax,60
60:103 54            push sp
60:104 50            push ax
60:105 0f             pop cs
60:106 54            push sp
60:107 59            pop cx
60:108 58            pop ax
60:109 29 c8       sub ax,cx
60:10b cc            int 3
运行结果:
60:10b int 3
ax=2

可见pop cs这个指令的执行是先pop出来,然后执行下一条指令,然后再改变cs。这期间不允许任何形式的中断,就像操作ss一样

同时我还测试了0x60-0x6f结果发现它们译为0x70到0x7f即条件跳转;0xc0与0xc1译为0xc2与0xc3;0xd6就像nop;0xf1是前缀,可能是lock前缀


然后,关于段超越。。。

mov ax,b800

mov es,ax

xor di,di

mov ax,701

mov [ds:ss:cs:es:es:cs:ss:ds:ds:ss:cs:es:es:cs:ss:ds:ds:ss:cs:es:di],ax ; 注:本指令长度22字节

你试试就知道了😃


关于8086的一些特殊机器码译指结果的评论 (共 条)

分享到微博请遵守国家法律