每一个前缀占一个字节,在32位指令里,前缀种类的排列顺

上传人:xins****2008 文档编号:100854017 上传时间:2019-09-25 格式:DOC 页数:2 大小:16KB
返回 下载 相关 举报
每一个前缀占一个字节,在32位指令里,前缀种类的排列顺_第1页
第1页 / 共2页
每一个前缀占一个字节,在32位指令里,前缀种类的排列顺_第2页
第2页 / 共2页
亲,该文档总共2页,全部预览完了,如果喜欢就下载吧!
资源描述

《每一个前缀占一个字节,在32位指令里,前缀种类的排列顺》由会员分享,可在线阅读,更多相关《每一个前缀占一个字节,在32位指令里,前缀种类的排列顺(2页珍藏版)》请在金锄头文库上搜索。

1、指令前缀有4种,而且一条指令可以前有多种前缀,每一个前缀占一个字节,在32位指令里,前缀种类的排列顺序不作规定。它们的名称和机器码,分别是是:1 操作数长度前缀(66H)对于32位指令系统而言,默认寄存器都是32位的,但是我们不可避免的会使用其他长度地寄存器。如果要使用16位长度的寄存器,只需在指令前加66H,即用操作数长度前缀标记。然而对于8位长度的寄存器,不是通过操作数前缀标记的。后文将说明它和32位操作数长度如何区分的举例:mov eax,1 =B8 01000000mov ax,1 =66 B8 0100mov al,1 =B0 01另外还有一点要说明,就是像movzx这样,操作数与被

2、操作数长度不相等的指令。则我们以被操作数的长度为标准,选择是否添加前缀。举例: movzx eax,ax=0FB7C0 movzx eax,al=0FB6C0 movzx ax,al=660FB6C02 地址长度前缀(67H)这个前缀和上一个前缀用法差不多,只不过这个前缀是标记内存地址长度的。学过汇编的人,还应该知道操作数和被操作数中,至多一个是内存操作数。在32位指令系统下,如果内存操作数的长度为16位,则需在指令前加“地址长度前缀”,即67H举例:mov eax,bx=67 8B07;不要在flat模式下编译此句mov eax,ebx= 8b073 段超越前缀(2eH、3eH、26H、64

3、H、65H、36H)当使用内存操作数时,无论那种内存操作数寻址都有默认的段寄存器,然而至多一个的内存操作数不使用默认段寄存器时,我们就需要使用段超越前缀。各个段寄存器代码如下,cs=2eHds=3eHes=26Hfs=64Hgs=65Hss=36H举例:mov eax,eax=8b00mov eax,cs:eax=2e8b00mov eax,es:eax=268600mov eax,fs:eax=64 8600记得声明assume fs:nothingmov eax,gs:eax=65 8600记得声明assumegs:nothingmov eax,ss:eax=36 86004 锁定前缀和重复前缀和协处理器有关,在指令前加F0,表示访问独享。微机原理关于这部分,我基本没学,不知道干嘛用的,反正用的时候是这样的:举例:add eax.eax= 3100Lock add eax,eax=F0 3100进行串操作时,经常使用重复指令,该指令就是在机器码前加重复前缀.,全部重复前缀编码如下:Rep=F3Repe=F3Repz=F3Repne=F2Repnz=F2举例: stosb = AA rep stosb=F3 AA

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号