版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2022/8/41IA-32指令系统宋军计算机学院信息安全系第1页,共60页。22022/8/4主要内容IA-32通用指令集数据传送类指令算术运算类指令位操作类指令串操作类指令控制转移类指令处理机控制类指令 其他类第2页,共60页。32022/8/4IA-32指令系统计算机的指令系统是指计算机能够执行的全部指令的集合 。IA-32CPU指令系统包括: 通用指令 浮点运算指令 SIMD指令 MMX指令(多媒体扩展指令集 ) SSE/SSE2/SSE3指令(单指令多数据流扩展 ) 系统指令 64位模式的指令第3页,共60页。42022/8/4通用指令集合 数据传送类指令 算术运算类指令 位操作类指
2、令 串操作类指令 控制转移类指令 处理机控制类指令 其他类第4页,共60页。52022/8/4汇编指令格式 target: mov count,ebx ;EBX送变量到count标号:指令在主存中的逻辑地址指令助记符:指令的名称操作数:表示参与指令操作的对象个数可以是0/1/2/3,多个操作数之间以逗号(,)隔开。存放操作结果的操作数叫做目的操作数,一般是指令中的第一个操作数参与操作的其他操作数叫做源操作注释:增加可读性。 标号: 指令助记符 操作数列表;注释 第5页,共60页。62022/8/4操作数操作数类型imm立即操作数reg寄存器操作数mem内存操作数操作数的寻址方式 立即数寻址寄存
3、器寻址存储器寻址第6页,共60页。72022/8/4数据传送指令数据传送是计算机中最基本、最重要的一种操作传送指令也是最常使用的一类指令传送指令把数据从一个位置传送到另一个位置除标志寄存器传送指令外,均不影响标志位重点掌握MOV XCHGPUSH POPLEA第7页,共60页。82022/8/4MOV指令MOV指令是一个数据传送指令,其格式为: MOV指令的功能是从源操作数src向目的操作数dst拷贝数据。在汇编指令中普遍的方式:左边的操作数都是目的操作数,右边的操作数都是源操作数。 MOV dst , src;dst = src 第8页,共60页。92022/8/4MOV指令规则MOV指令对
4、操作数的使用是非常灵活的两个操作数的尺寸必须一致两个操作数不能同时为内存操作数目的操作数不能是CS、EIP和IP立即数不能直接送至段寄存器不允许在两个段寄存器之间直接传送数据 MOV reg, reg MOV mem, reg MOV reg, mem MOV mem, imm MOV reg, imm第9页,共60页。102022/8/4内存间的移动单条MOV指令不能用于将数据从一个内存位置直接移动到另外一个内存位置作为一种替代方法,在送至目的操作数之前,可以先将源操作数移入一个寄存器中 .data var1 WORD ? var2 WORD ? .code MOV ax, var1 MOV
5、 var2, ax第10页,共60页。112022/8/4MOVZX / MOVSX将源操作数的内容拷贝到目的操作数中MOVZX(move with zero-extend)将该值零扩展至16位或32位MOVSX(move with sigh-extend)将该值符号扩展至16位或32位目的操作数必须是寄存器例:MOVSX EAX,CL MOVSX EDX,EDI MOVZX DX,AL MOVZX EAX,DATA第11页,共60页。122022/8/4XCHG指令交换两个操作数的内容操作数规则同MOV指令若要交换两个内存操作数,需要使用寄存器作为临时存储,将MOV与XCHG指令结合使用 x
6、chg reg, reg xchg reg, mem xchg mem, reg xchg ax, bx xchg ah, al xchg var1, bx xchg eax, ebx mov ax, var1 xchg ax, var2 mov var1, ax第12页,共60页。132022/8/4直接内存操作数变量名:数据段内偏移地址的引用方括号 .data var1 BYTE 10h .code MOV al, var1 .data var1 BYTE 10h, 20h, 30h .code MOV al, var1+2 ; mov al, var1+2第13页,共60页。142022
7、/8/4要小心段寄存器的操作不允许立即数传送给段寄存器MOV DS,100H;非法指令:立即数不能传送段寄存器不允许直接改变CS值MOV CS,SI;不允许使用的指令不允许段寄存器之间的直接数据传送MOV DS,ES;非法指令:不允许段寄存器间传送第14页,共60页。152022/8/4地址传送指令地址传送指令将存储器单元的逻辑地址送至指定的寄存器有效地址传送指令 LEA指针传送指令 LDS 和 LES(LFS/LGS/LSS)注意:不是获取存储器单元的内容第15页,共60页。162022/8/4有效地址传送指令LEA将存储器操作数的有效地址传送至指定的寄存器中。在实模式下,使用16位寄存器在
8、保护模式下使用32位寄存器该指令通常用来对指针或变址寄存器EBX、EDI或ESI等置初值之用。LEAReg, Mem 第16页,共60页。172022/8/4LEA 与 OFFSETlea CPU指令标号/变量、表达式buffer db 100 dup(0);把字节变量buffer的EA传送给EBXlea ebx, buffermov ebx, offset bufferbuffer db 100 dup(0)lea ebx, buffer+50mov ebx, offset buffer+50;Xoffset 伪指令标号、变量一般来说, mov reg, offset xxx 比 lea r
9、eg,xxx 的指令长度少一个字节,且快一个时钟, 但 lea 更灵活。 第17页,共60页。182022/8/4第18页,共60页。192022/8/4综合实例 .386.model flat, stdcall.dataval1 WORD 1000hval2 WORD 2000harrayB BYTE 10h,20h,30h,40h,50harrayW WORD 100h,200h,300harrayD DWORD 10000h,20000h第19页,共60页。202022/8/4.codestart:; 内存与内存之间的数据交换mov ax,val1; AX = 1000hxchg ax,
10、val2; AX = 2000h, val2 = 1000hmov val1,ax; val1 = 2000h第20页,共60页。212022/8/4; 字节数组访问mov al,arrayB ; AL = 10hmov al,arrayB+1; AL = 20hmov al,arrayB+2; AL = 30h; 字数组访问mov ax,arrayW ; AX = 100hmov ax,arrayW+2; AX = 200h第21页,共60页。222022/8/4; 双字数组访问mov eax,arrayD; EAX = 10000hmov eax,arrayD+4; EAX = 20000
11、hmov eax,arrayD+TYPE arrayD; EAX = 20000hlea ebx, arrayD+4mov eax, ebxEND start第22页,共60页。232022/8/4算术运算指令 算术运算是IA-32指令系统中另外一种基本的操作,可以用来执行字节,字或双字的二进制加减乘除算术运算。这类指令根据计算结果设置相应标志位。ADD、ADC、INCSUB、SBB、DECMUL、IMULDIV、IDIV 第23页,共60页。242022/8/4242022/8/4加法和减法两种最基本的操作,指令:INC,DEC,ADD,SUB,NEG(求反)INC、DECINC reg/m
12、emDEC reg/memADD/SUB格式:ADD/SUB dest, src操作数规则同MOV指令.dataW1 WORD 1000hW2 WORD 2000h.codeinc W1;1001hmov bx, W1 dec bx;1000hmov eax, w2add eax, bxsub eax, W1第24页,共60页。252022/8/4加法指令 执行双字,字或字节的加法运算。 指令将目的操作数加上源操作数,结果送到目的操作数ADD:无符号算术运算ADC:带进位算术运算INC:加ADD reg,imm/reg/mem;regregimm/reg/memADD mem,imm/reg;
13、memmemimm/reg第25页,共60页。262022/8/4.data var1 dword 10000hvar2 dword 2000h.codestart: mov al,0fbh ;al=0fbhadd al,07h;al=02hmov eax, var1;eax=10000hadd eax, var2;eax=12000hret加法指令 第26页,共60页。272022/8/4增量指令INC(increment)INC指令对操作数加1(增量)INC指令不影响进位CF标志,按定义设置其他状态标志INC reg/mem;reg/memreg/mem1inc ebxinc byte p
14、tr ebx 第27页,共60页。282022/8/4减法指令 SUB指令将目的操作数减去源操作数,结果送到目的操作数SUB指令按照定义相应设置状态标志SUB reg,imm/reg/mem;regregimm/reg/memSUB mem,imm/reg;memmemimm/reg第28页,共60页。292022/8/4减量指令DEC(decrement)DEC指令对操作数减1(减量)DEC指令不影响进位CF标志,按定义设置其他状态标志DEC reg/mem;reg/memreg/mem1dec ecxdec word ptr esi INC指令和DEC指令都是单操作数指令 主要用于对计数器
15、和地址指针的调整第29页,共60页。302022/8/4求补指令NEG(negative)NEG指令对操作数执行求补运算:用零减去操作数,然后结果返回操作数求补运算也可以表达成:将操作数按位取反后加1NEG指令对标志的影响与用零作减法的SUB指令一样NEG reg/mem;reg/mem0reg/mem第30页,共60页。312022/8/4比较指令CMP(compare)CMP指令将目的操作数减去源操作数,按照定义相应设置状态标志CMP指令执行的功能与SUB指令相似,但结果不回送目的操作数CMP reg, imm/reg/mem;regimm/reg/memCMP mem, imm/reg;
16、memimm/reg第31页,共60页。322022/8/4算术运算影响的标志零标志和符号标志目标操作数被赋以零值时,零标志ZF置算术运算结果为负时,符号标志SF置进位标志(无符号算术运算)无符号算术运算结果对目的操作数而言无法容纳时,进位标专CF置溢出标志(有符号算术运算)当算术运算产生的有符号的结果无法容纳于目的操作数时,溢出标志OF置第32页,共60页。332022/8/4进位与溢出标志加法:和的最高有效位 有 向高位的进位,CF=1;其他,CF=0;两个操作数符号相同,而结果符号与之相反,OF=1;其他,OF=0;减法:被减数的最高有效位 有 向高位的借位,CF=1;其他,CF=0;两
17、个操作数符号相反,而结果的符号与减数相同,OF=1;其他,OF=0;第33页,共60页。342022/8/4例:双精度数的加法 (DX) = 0002H (AX) = 0F365H (BX) = 0005H (CX) = 8100H 指令序列 ADD AX, CX ; (1) ADC DX, BX ; (2) (1) 执行后,(AX) = 7465H CF=1 OF=1 SF=0 ZF=0 (2) 执行后,(DX) = 0008H CF=0 OF=0 SF=0 ZF=0第34页,共60页。352022/8/4例:双精度数的减法 (DX) = 1234H (AX) =4AE0H (BX) = 9
18、090H 指令序列 SUB DX, AX ; (1) SBB BX, AX ; (2) (1) 执行后,(DX) = C754H SF=1 ZF=0 CF=1 OF=0 (2) 执行后,(BX) = 45AFH SF=0 ZF=0 CF=0 OF=1第35页,共60页。362022/8/4例:x、y、z 均为双精度数,分别存放在地址为X, X+2; Y, Y+2;Z, Z+2的存储单元中,用指令序列实现 w x + y + 24 - z ,并用W, W+2单元存放w16位寄存器: MOV AX, X MOV DX, X+2 ADD AX, Y ADC DX, Y+2 ; x+y ADD AX,
19、 24 ADC DX, 0 ; x+y+24 SUB AX, Z SBB DX, Z+2 ; x+y+24-z MOV W, AX MOV W+2, DX ; 结果存入W, W+2单元第36页,共60页。372022/8/432位寄存器: MOV EAX, X ADD EAX, Y ; x+y ADD EAX, 24 ; x+y+24 SUB EAX, Z ; x+y+24-z MOV W, EAX ; 结果存入W, W+2单元第37页,共60页。382022/8/4乘法指令计算机的乘法指令分为无符号乘法指令和有符号乘法指令,它们的唯一区别就在于:数据的最高位是作为“数值”参与运算,还是作为“
20、符号位”参与运算。无符号数乘法指令MUL有符号数乘法指令IMUL指令的功能是把显式操作数和隐含操作数相乘,并把乘积存入相应的寄存器中。第38页,共60页。392022/8/4MUL / IMUL指令的格式:MUL/IMUL Reg/Mem影响的标志位:CF和OFMUL指令若乘积的高半部分(AH或DX或EDX)为0,则OF=CF=0;否则OF=CF=1IMUL指令若乘积的高半部分是低半部分的符号扩展,则OF=CF=0;否则均为1乘数位数隐含的被乘数乘积的存放位置举例8位ALAXMUL BL16位AXDX-AXMUL BX32位EAXEDX-EAXMULECX第39页,共60页。402022/8/
21、4例:(AX) = 16A5H,(BX) = 0611H (1) IMUL BL ; (AX) (AL) * (BL) ; A5*11 5B*11=060B F9F5 ; (AX) = 0F9F5H CF=OF=1 (2) MUL BX ; (DX, AX) (AX) * (BX) ; 16A5*0611=0089 5EF5 ; (DX)=0089H (AX)=5EF5H CF=OF=100 乘积的高一半是低一半的符号扩展11 否则 IMUL指令: CF,OF =00 乘积的高一半为零11 否则MUL指令: CF,OF =00 乘积的高一半是低一半的符号扩展11 否则00 乘积的高一半为零11
22、 否则00 乘积的高一半为零11 否则00 乘积的高一半是低一半的符号扩展11 否则00 乘积的高一半为零11 否则第40页,共60页。412022/8/4例:16位无符号数乘法.386.MODEL FLAT.data x word 0FFFEhy word 001Ehresult dword ?.codestart: mov ax,x;axx,mul y;乘法:ax*ymov word ptr result , ax;存放乘积的低字部分mov word ptr result+2,dx;存放乘积的高字部分retend start第41页,共60页。422022/8/4用32位有符号乘法指令实现
23、16位有符号数的乘法.datax word 100y word 200result dword ?.codemovsx eax, x;eax xmovsx ebx, y ; ebx yimul ebx ;乘法:eax*ebxmov result , eax; 存放乘积第42页,共60页。432022/8/4IMUL的其他格式(二或三操作数)IMUL r16,r16/m16/i8/i16;有符号字乘:r16r16r16/m16/i8/i16IMUL r32,r32/m32/i8/i16/i32;有符号双字乘:r32r32r32/m32/i32/i16/i8IMUL r16,r16/m16,i8/
24、i16;有符号字乘:r16r16/m16/i8/i16IMUL r32,r32/m32,i8/i32;有符号双字乘:r32r32/m32/i8/i32 imul eax,ebx ; eax = ebx*eax imul eax,ebx,2 ;eax = ebx*2 第43页,共60页。442022/8/4除法指令除法指令的被除数是隐含操作数,除数在指令中显式地写出来。CPU会根据除数是8位、16位,还是32位,来自动选用被除数AX、DX-AX,还是EDX-EAX。除法指令功能是用隐含操作数除以显式操作数,得到商和余数。第44页,共60页。452022/8/4DIV / IDIV指令格式:DIV
25、/IDIV Reg/Imm (对标志位无定义)IDIV时,须将被除数符号扩展到高半部CBW:将AL中的符号位扩展到AH寄存器中CWD:将AX中的符号位扩展到DX寄存器中CDQ:将EAX中的符号位扩展到EDX寄存器中除数位数隐含的被除数商余数举例8位AXALAHDIV BH16位DX-AXAXDXDIV BX32位EDX-EAXEAXEDXDIV ECX注:除法指令不考虑标志位定义。第45页,共60页。462022/8/4例:(AX) = 0400H,(BL) = 0B4H (AX)为无符号数1024D,带符号数+1024D (BL)为无符号数180D,带符号数-76D(4CH) (1) DIV
26、 BL (AH) = 7CH =124D; 余数 (AL) = 05H = 5D ;商 (2) IDIV BL (AH) = 24H = 36D ;余数 (AL)= 0F3H = -13D ;商 如: (AX) = -1024D,(BL) = 76D; (AX) = -1024D,(BL) = -76D; (AH) = ? (AL) = ? 注: 乘法和除法带符号数去补运算(两次:初始 / 结束)第46页,共60页。472022/8/4mov al, -48cbw;扩展AL的符号到AHmov bl, 5idiv bl;AL= AH=mov ax, -5000cwd;扩展AX的符号到DXmov
27、bx, 256idiv bx;AX= DX=mov eax, -50000cdq;扩展EAX的符号到EDXmov ebx, 256idiv ebx;EAX= EDX=第47页,共60页。482022/8/4除法溢出当除数为0,或商太大超出目的操作数所能表示的范围时,导致除法溢出,CPU自动触发一个中断。对DIV指令,除数为0,或者在字节除时商超过8位,或者在字除时商超过16位,或者在双字除时商超过32位,则发生除法溢出。对IDIV指令,除数为0,或者在字节除时商不在-128127范围内,或者在字除时商不在-3276832767范围内,或者在双字除时商不在-2322321范围内,则发生除法溢出。
28、第48页,共60页。492022/8/4除法溢出mov ax, 20000mov bl,10div bl ;20000102000 ;商在AL中放不下,产生溢出mov dx, 0mov ax, 20000mov bx,10div bx ;20000102000 ;商在AX中可以放下,不产生溢出 解决:增大除数的位数第49页,共60页。502022/8/4除法溢出mov ax, 20000mov bl, 0div bl ;200000 mov ax, 20000mov bl, xcmp bl, 0je Zerodiv blZero:解决:测试除数是否为0第50页,共60页。512022/8/4乘
29、法溢出?MUL/IMUL是否会产生溢出?乘数位数隐含的被乘数乘积的存放位置举例8位ALAXMUL BL16位AXDX-AXMUL BX32位EAXEDX-EAXMUL ECX不会,因为存放乘积的寄存器的大小是乘数和被乘数的2倍第51页,共60页。522022/8/4例:x , y , z , v 均为16位带符号数,计算 ( v - ( x*y + z 540 ) ) / x MOV AX, X IMUL Y ; x*y (DX,AX) MOV CX, AX MOV BX, DX MOV AX, Z CWD ;Z (DX,AX) ADD CX, AX ADC BX, DX ; x*y+z (B
30、X,CX) SUB CX, 540 SBB BX, 0 ; x*y+z-540 MOV AX, V CWD ;V (DX,AX) SUB AX, CX SBB DX, BX ; v-(x*y+z-540) IDIV X ; (v-(x*y+z-540)/x(AX) 余数(DX)第52页,共60页。532022/8/4例:算术表达式32位无符号整数var4 = (var1 + var2) * var3var4 = var1 * 5 / (var2 3)32位有符号整数var4 = var1 * -5 / (-var2 % var3)第53页,共60页。542022/8/4var4 = (var1 + var2) * var3var1 dd 100var2 dd 25var3 dd 8var4 dd ?mov eax, var1add eax, var2;var1 + var2mul var3 ;(var1+var2)*var3jc tooBig; 高一半是否为零;CF=1则转移mov var4, eaxjmp NexttooBig :Next:第54页,共60页。552022/8/4var4 = var1 * 5 / (var2 3)var1 dd 100var2 dd 25var3 dd 8var4 dd ?mov eax, var1mov ebx,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 钢筋工岗位班组管理考核试卷含答案
- 耐蚀砖板衬里工岗前安全检查考核试卷含答案
- 雷达调试工风险评估与管理竞赛考核试卷含答案
- 石英晶体生长设备操作工安全宣传强化考核试卷含答案
- 接触网工岗中工艺规程考核试卷含答案
- 钢琴装配工岗位知识理论考核试卷含答案
- 2026年小学成语故事《功亏一篑》坚持启示语文课堂教案
- 2026年小学成语故事《摧坚陷阵》勇敢品格语文课堂教案
- 临床医学检验技术专业知识真题解析及易错点总结
- 初级统计师统计学和统计法基础知识模拟试卷
- 新苏教版科学六年级上册1.1 《蜡烛的变化》教学课件
- 【新教材】2026秋统编版|九年级上册历史全册教案
- 2026秋小学人教版音乐五年级上册(新教材)教学计划含教学进度表
- 抵制不良行为促进同学友善小学主题班会课件
- 第1课时 数说祖国2026-2027学年北师大版四年级数学上册
- 新版部编人教版四年级上册语文全册1-8单元教材分析
- 2026一上数学期中复习教案
- 2026年小学心理健康教研教师招聘考试笔试试题【含答案】
- 2026年新疆中考英语试卷
- GB/T 6547-2026瓦楞纸板厚度的测定
- 小区公共收益收支公示及使用审批管理办法
评论
0/150
提交评论