版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Pentium的指令系统概念u指令(Instruction):微处理器执行的基本操作u指令系统(Instruction set):u微处理器所能执行的全部指令的集合uPentium指令分类:u传送指令u算术运算指令u逻辑运算和位操作指令u串操作指令u转移和调用类指令u控制指令传送指令u功能:实现寄存器之间、寄存器与存储器之间及寄存器与I/O端口之间的数据传送u按功能可分为5类:u通用传送指令u标志传送指令u地址传送指令u输入输出指令u转换类指令通用传送指令u数据传送指令uMOV指令u符号扩展传送指令u零扩展传送指令u堆栈操作指令u进栈指令u出栈指令u16位通用寄存器进栈/出栈指令u32位通用寄
2、存器进栈/出栈指令u数据交换指令传送指令(Move)u格式:MOV 目的, 源u功能:把一个字节/字/双字数据从源送至目的u标志:不影响u注意:u立即数不能作目的;u立即数不能送段r;u若源为立即数,目的为m,在目的前应用PTR标明其数据类型;u段r之间不能传送;uCS和IP不能作目的;u源和目的不能同为m;u源和目的类型一致。MOV指令应用举例n例1:立即数传送nmov al,4 ;al4,字节传送nmov cx,0ffffh ;cx0ffffh,字传送nmov byte ptrsi,0ahn;byte ptr说明是字节操作nmov word ptrsi2,0bh n;word 说明在该指令
3、中操作数类型是字nmov dword ptrebxesi2,0ffffffffh n;dword 说明在该指令中操作数类型是双字MOV指令应用举例:u例2:存储器传送umov al,12bxdi ;alds:12bxdiumov edx,ebp ;edxss:ebpumov si, si ;ds:sisin例3:段寄存器传送nmov si,ds ;ds:sids nmov es,ax ;esax段偏移地址主要用途CSIP指令地址SSSP或BP堆栈地址DSBX,SI,DI,变量名,8/16位数数据地址ESDI(目的串偏移地址)目的串地址两个操作数的类型要一致u双操作数指令中,目的操作数与源操作数
4、必须类型一致n例1:MOV AL,050AHn非法指令:050Ah已经超出AL的数值范围。n指令应改为:MOV AX,050AH n注意:有寄存器作操作数的指令,寄存器的类型可确定指令操作数的类型两个操作数的类型要一致u例2:MOV AX,BLn非法指令:两个寄存器操作数类型应一致。n指令应改为:MOV AX,BX n或: MOV AL,BLn例3:mov si2,0bh n非法指令:应该为mov word ptrsi2,0bh n若指令中只有内存操作数和立即数作操作数,必须显式指明:nbyte ptr指示字节类型,word ptr指示字类型双操作数不能同为内存操作数u除串操作指令外,不允许双
5、操作数都是存储单元 mov word ptr 2bxsi,din不能直接在存储器和存储器之间传送数据n指令应改为: mov ax,din mov 2bxsi,ax要小心段寄存器的操作u非法指令,不允许直接改变CS值;u说明:中断调用、过程调用及无条件转移指令可以修改CS值 mov ds,1234H 非法指令,立即数不能直接送段寄存器 mov ax,1234hmov ds,ax mov cs,di要小心段寄存器的操作uMOV DS,ES n非法指令,不允许段寄存器之间直接传送数据n 指令应改为:MOV AX,ESn MOV DS,AX符号扩展传送指令(Move with sign-extend)
6、u格式:MOVSX 目的, 源u功能:把数据从源送至目的的同时将符号扩展到目的寄存器的高位u标志:不影响u注意:u源位数少,目的位数多u可由8位扩展到16/32位,也可由16位扩展到32位u源:r/m;目的:ru例:MOVSX EBX,DLu若DL=80H,EBX=0FFFF FF80H零扩展传送指令 (Move with zero-extend)u格式:MOVZX 目的, 源u功能:把数据从源送至目的的同时将0扩展到目的寄存器的高位u标志:不影响u注意:u源位数少,目的位数多u可由8位扩展到16/32位,也可由16位扩展到32位u源:r/m;目的:ru例:MOVZX BX,DLu若DL=80
7、H,BH=0,BL=80H堆栈操作指令u堆栈u进栈指令u出栈指令u16位通用寄存器进栈/出栈指令u32位通用寄存器进栈/出栈指令堆栈u堆栈:按照“后进先出” (Last In First Out)或按照“先进后出” (First In Last Out)原则组织的一段内存区域u软件堆栈:由程序设计人员用软件在内存划出的一块区域。该区域一端固定,另一端浮动,所有的信息存取操作都在浮动端进行u段基址:堆栈段中地址最小的单元,由SS指向;u栈底:堆栈内地址最大的单元(固定端)u栈顶:栈操作时存取最后一个数据的内存单元(浮动端)堆栈u堆栈指针寄存器SP:堆栈初始化时,指向栈底+1的内存单元;栈操作时,
8、始终指向栈顶uSP内始终存放着段基址与栈顶之间的距离(字节数)u堆栈深度:堆栈所含内存单元字节数u堆栈的用途:u暂存数据u在过程调用或处理中断前暂存断点信息SS堆栈段栈底SP初始化时的栈顶进栈指令(Push word onto stack)u格式:PUSH 源操作数( r16/32/m16/32/seg )u功能:将操作数从源存入由SP/ESP指向的栈顶u例1:push csu操作: uSPSP-2 ;先修改栈顶uSP数据 ;将源存入SP指向的字单元u例2:push dword ptr ebx+esiu操作: uESPESP-4 ;先修改栈顶uESP数据 ;将源存入ESP指向的双字单元78H5
9、6H34H12H78H56H34H12H00H04HSS段首地址段首地址10000H10010HESP(原栈顶)ESP(压入CS 后栈顶)0400HESP(压入EBX+ESI 后的栈顶)12345678H08000HDS段首地址段首地址EIPCS段首地址段首地址04000HESIpush cspush dword ptr ebx+esi设:CS=400H,DS=800H, SS=1000HESP=10H,EBX=200H,ESI=20H初始栈顶地址=SS10H+ESP =1000H10H+10H =10010H数据地址=DS10H+EBX+ESI =800H10H+200H+20H =0822
10、0H出栈指令(Pop word off stack)u格式: POP 目的操作数( r16/32/m16/32/seg )u功能:将SP/ESP指向的栈顶字操作数送指定目的u例:pop eaxu操作: ueaxESP ;将ESP指向的4个字节的内容送eaxuESPESP+4 ;栈指针加478H56H34H12H00H04HESP(弹出数据后栈顶)12345678HEAX10010HSS段首地址10000H08000HDS段首地址CS段首地址04000H设:该条指令位于上述2条PUSH指令之后16位通用寄存器进栈/出栈指令u格式:PUSHA (PUSH all registers)u功能:将8个
11、16位通用寄存器的内容全部压入堆栈u操作:uSP (SP-16)u依次将AX,CX,DX,BX,SP(减16之前的值),BP,SI,DI压入堆栈u格式:POPA (Pop all registers)u功能:将栈顶数据弹出至8个16位通用寄存器u操作:u弹出至DI,SI,BP,SP,BX,DX,CX,AX uSP (SP+16)32位通用寄存器进栈/出栈指令u格式:PUSHAD (PUSH all double)u功能:将32位通用寄存器内容压入堆栈u操作:uESP (ESP-32)u依次将EAX,ECX,EDX,EBX,ESP(减32之前的值),EBP,ESI,EDI压入堆栈u格式:POPA
12、D (Pop all double)u功能:自堆栈弹出至32位通用寄存器u操作:u弹出至EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX uESP (ESP+32)栈操作指令应用须知u栈操作指令的操作数不能是立即数uPOP指令的操作数不能是CSn例1:push 1234h mov ax,1234h push ax交换指令(Exchange)u格式:XCHG 目的, 源u功能:将源操作数与目的操作数内容互换u注意:u立即数不能作该指令u 的操作数;u段r之间不能互换;u源和目的不能同为m;u源和目的类型一致。交换指令应用举例:u例1:寄存器间交换u xchg ax,siu例2:寄存
13、器与内存间交换u xchg eax,ebxu xchg 1234bxsi,ax交换指令应用举例:u例3: xchg ax,1234hn非法指令,立即数不能作该指令的操作数;n mov bx,1234h ;bx 1234hn xchg ax,bx ;ax bxn例4: xchg bx,sin非法指令,源和目的不能同为内存操作数;n mov cx,si ;cx ds:sin xchg cx,bx ;cx ds:bxn xchg cx,si ;cx ds:si标志传送指令(Flag transfer)u无操作数指令(隐含操作数是Flags)u功能:传送标志寄存器的内容,以便用户能对各个标志位直接进行
14、操作u指令分类:u提取标志指令LAHFu设置标志指令SAHFu标志进栈指令PUSHF/PUSHFDu标志出栈指令POPF/POPFDu对标志寄存器的影响:SAHF,POPF提取标志指令(load AH with Flags)u格式: LAHFu功能:将标志寄存器低字节送AH u说明: 将SF,ZF,AF,PF,CF状态标志送AH的第7,6,4,2,0位CFPFAFZFSFTFIFDFOFAHFlags设置标志指令(store AH into Flags)格式: SAHF功能:将AH内容送标志寄存器低字节 说明:用AH的第7,6,4,2,0位设置标志寄存器中低字节的SF, ZF,AF,PF,CF
15、标志AHCFPFAFZFSFTFIFDFOFFlags标志进栈指令u格式:PUSHF (push Flags onto stack)u功能:将16位标志寄存器FR的内容压入堆栈 u操作: uSP SP-2uSS:SPFLAGSu格式:PUSHFD (push EFlags onto stack)u功能:将32位标志寄存器EFR的内容压入堆栈 u操作:uESP ESP-4uSS:ESPEFLAGS标志出栈指令u格式: POPF (pop Flags off stack)u功能:将栈顶字送标志寄存器FRu操作:uFLAGSS:SPuSP SP2u格式:POPFD (pop EFlags off s
16、tack)u功能:将栈顶双字送标志寄存器EFRu操作: uEFLAGSS:ESPuESP ESP4标志传送指令应用举例例1:置位单步标志(TF) pushf ;保存全部标志到堆栈 pop ax ;从堆栈中取出全部标志 or ax,0l00h ;设置D8的TF1,其它各位不变 push ax ;将ax压入堆栈 popf ;FlagsAX标志传送指令应用举例例2:将标志寄存器中SF置1,OF变反pushf pop axor ax,80h ;设置D7的SF1 xor ax,800h ;将D11的OF变反push axpopf地址传送指令u功能:将内存操作数的地址送指定寄存器u分类:u有效地址传送指令
17、:LEAu逻辑地址传送指令:LDS,LESu注意:操作目的不是获取内存操作数u对标志寄存器的影响:不影响有效地址传送指令(Load Effective Address)u格式:LEA 目的,源u功能:将源操作数(m)的有效地址(偏移地址)送目的操作数指定的通用寄存器。u操作:目的寄存器 源的有效地址u说明:u源是代表内存操作数地址的变量,标号或地址表达式u目的若是u实地址方式:将源的有效地址送16位通用寄存器u虚地址方式:将源的有效地址送32位通用寄存器地址传送指令应用举例mov bx,0400hmov si,3chlea bx, 0f62hbxsi ;bx=0400h+003ch+0f62h
18、=l39EH注意!:目的寄存器bx获得的是源所指向的内存单元的有效地址;不是物理地址,也不是该单元的内容LEA指令与MOV指令比较uLEA传送内存操作数的偏移地址u MOV传送内存操作数的值u用MOV指令传送内存操作数的偏移地址需要在变量名前加取值运算符offsetu例1:mov bx,offset au 等效于lea bx,aLEA指令与MOV指令比较uLEA可将数据区任一元素的偏移地址送目的u MOV指令用offset只能取数据区第一个元素的偏移地址u例2: lea si,abxdiu mov bx,offset aLEA指令与MOV指令比较u例3:ds=2000h, a偏移地址=110h
19、, (a)=1234h u lea bx,a mov bx, a34H12Ha0110H2000HDS20000H20110H34H12Ha0110H2000HDS20000H20110H0110HBXBX1234H逻辑地址传送指令u格式:LDS r , m (Load DS with pointer)u功能:将源指定的段基值和偏移量送DS和目的ru操作:u实地址方式: r16m; DSm+2u虚地址方式: r32m; DSm+4u说明:u源是m,提供存放段基值和偏移量的内存区域首字节地址u目的是16/32位通用寄存器u例:LDS SI,A逻辑地址传送指令u格式:LES r , mu功能:将源
20、指定的段基值和偏移量送ES和目的ru格式:LSS r , mu功能:将源指定的段基值和偏移量送SS和目的ru格式:LFS r , mu功能:将源指定的段基值和偏移量送FS和目的ru格式:LGS r , mu功能:将源指定的段基值和偏移量送GS和目的r逻辑地址传送指令应用举例mov word ptr 3060h,0100hmov word ptr 3062h,l450hles di,3060h ;es=1450h,di=0l00hlds si,3060h ;ds=l450h,si=0l00h说明:以DS:3060H为地址的连续4个内存单元中存放着一个32位的地址指针,根据使用的指令送入DS:rl
21、6或ES:r16输入输出指令uIntel系统的内存和I/O有独立的地址空间uIntel系统用于I/O寻址的地址线是16条:u端口最多为21665536(64K)个u地址范围0000H0FFFFHu端口:接口电路中的可编程寄存器u指令:uIN:实现从I/O到CPU的信息传送uOUT:实现从CPU到I/O的信息传送输入/输出端口寻址u直接寻址:只用于寻址地址从00H0FFH这256个端口, 端口号用8位2进制数表示u间接寻址:可用于寻址全部64K个端口,应首先将端口号送入DXu注意:当端口地址大于0FFH时,只能采用间接寻址方式输入指令(Input)u格式: IN 累加器,端口号u功能:将字节/字
22、/双字数据从输入端口送至累加器AL/AX/EAXu直接寻址:u字节输入:IN AL,nu字输入: IN AX,nu双字输入:IN EAX,nu说明:n为8位端口地址,可寻址0255共256个输入端口u间接寻址:u字节输入:IN AL,DX u字输入: IN AX,DXu双字输入:IN EAX,DXu说明:DX为16位端口地址,可寻址64K个输入端口输出指令(Output)u格式: OUT 端口号,累加器u功能:将AL/AX/EAX中的信息送输出端口u直接寻址:u字节输出:OUT n,ALu字输出: OUT n,AXu双字输出:OUT n,EAXu说明:n为8位端口,可寻址0255共256个输出
23、端口u间接寻址:u字节输出:OUT DX,ALu字输出: OUT DX,AXu双字输出:OUT DX,EAXu说明:DX为16位端口地址,可寻址00FFFFH,共64K个输出端口输入输出指令应用举例u例1:in al,3u从端口3输入1个字节的数据到alu例2:out 5,alu将al中的数据输出到端口5u例3:umov dx,120uout dx,alu将al中的数据输出到端口120转换类指令u换码指令u字节/字扩展指令u字节交换指令换码指令(Translate)u格式:XLAT / XLATB 操作数u功能:将内存指定字节单元的内容送ALu说明:uXLAT执行前:u在内存中建立字节表格;u
24、将表格起始地址装入BX/EBX;u将欲取数据在表中的位移量装入AL;uXLAT执行后:u将 ALDS:BX+ALu注意:u1.换码表长度1256个字节。u2.XLATB:指向表格起始地址的基址寄存器是EBX换码指令应用举例:u例:ds=2000h,u bx=1100h,al=7u问:执行xlat后,al的内容。umov bx,1100humov al,07huxlat u换码指令没有显式操作数,它使用隐含寻址方式采用默认操作数。DSBX+AL表起始位置2000H1100H 20000H+ 21100H07H21107H37H XLATAL 37H字节/字/双字扩展指令u说明:u1.无操作数指令
25、u2.用在带符号数除法指令前形成双倍长度的被除数u标志位:不影响字节/字/双字扩展指令u格式:CBW (Convert byte to word)u功能:将AL中的符号位扩展到AH中u操作:u若AL80H(正数), AH0u若AL80H(负数), AH0FFHu例:扩展AL中的带符号数u-5:AL=11111011(补码)u执行CBW后,AX=1111111111111011Bu+5:AL=00000101(补码)u执行CBW后,AX=0000000000000101B字节/字/双字扩展指令u格式:CWD/CWDE (Convert word to double word)u功能:uCWD将A
26、X中的符号位扩展到DX中uCWDE将AX中的符号位扩展到EAX的高位u操作:u若AX9或AF=1u将ALAL+6,AF=1u若AL中高4位9或CF=1u将ALAL+60H,CF=1u若上述2条件均满足u将ALAL+66H,CF=1,AF=1u标志位:AF,CF,PF,SF和ZF例:编程实现4678 设BX=4678H, CX=2556H 结果送DX MOV AL,BL ADD AL,CL DAA MOV DL,AL MOV AL,BH ADC AL,CH DAA MOV DH,AL压缩型BCD码减法调整指令(Decimal Adjust for Subtraction )u格式:DASu功能:
27、用在SUB/SBB后对AL中的压缩型BCD码减法结果进行调整u操作:u若AL中低4位9或AF=1u将ALAL-6,AF=1u若AL中高4位9或CF=1u将ALAL-60H,CF=1u若上述2条件均满足u将ALAL-66H,CF=1,AF=1非压缩型BCD码加法调整指令(Unpacked BCD ASCII Adjust for Addition)u格式:AAAu功能:用在ADD/ADC后对AL中的非压缩型BCD码加法结果进行调整u操作:u若AL中低4位9或AF=1uALAL+6,ALAL and 0FH;AHAH+1,AF=1,CF=1u标志:AF,CFu说明:用ASCII码直接进行加法运算后
28、用其调整u例:已知AL=36H,BL=35H,编程求:6+5=?uADD AL,BLuAAA思考:ADD BL,AL AAA 非压缩型BCD码减法调整指令(Unpacked BCD ASCII Adjust for Subtraction)u格式:AASu功能:用在SUB/SBB后对AL中的非压缩型BCD码减法结果进行调整u操作:u若AL中低4位9或AF=1u将ALAL-6, ALAL and 0FH u AHAH-1, AF=1, CF=1u说明:两ASCII码相减后可用其调整u例:已知AL=36H,BL=33H,编程求:6-3=?uSUB AL,BLuAAS思考:SBB AL,BL AAS
29、 非压缩型BCD码乘法调整指令(Unpacked BCD ASCII Adjust for Multiply)u格式:AAMu功能:用在MUL后对AX中的两个非压缩型BCD码进行乘法操作的乘积进行调整u说明:乘积最大值=81,故AH=0, AL=乘积u操作:uAH商(AL0AH)uAL余数u标志位:u影响:PF,SF,ZFu不影响:AF,CF,OF非压缩型BCD码除法调整指令(Unpacked BCD ASCII Adjust for Division )u格式:AADu功能:用在DIV前将AX中的两位非压缩型BCD码转换成2进制数u操作:uALAL+(AH0AH)uAH0u标志位:u影响:P
30、F,SF,ZFu不影响:AF,CF,OF十进制算术指令应用举例u例1:DAA或AAA必须放在( )指令之后,只对( )内容进行修正u例2:已知AL内容为压缩型BCD码,对它进行加1操作,下述错误程序段为加法加法AL(A)INC AL(B) DAA(B) ADD AL,1 DAA(C) ADC AL,1 DAA(D) STC ADC AL,0 DAA逻辑指令u格式u逻辑“与” : AND 目标操作数,源操作数u逻辑“或”: OR 目标操作数,源操作数u逻辑“异或”:XOR 目标操作数,源操作数u逻辑“非”: NOT 目标操作数u说明:u1.位操作u2.操作:目标(目标) 逻辑操作 (源)应用:与
31、0:清0;与1:保留标志位:1.根据运算结果置PF,SF,ZF 2.CF=OF=0 3.对AF无定义例:将1的ASCII码转换为数 MOV BL,31H AND BL, 0FH00110001 (BL)00001111 0FH00000001 结果AND逻辑“与”指令(AND)测试指令u格式:TEST 目标操作数,源操作数u操作:目标操作数 源操作数(不存结果)u标志位:同AND指令u应用:测试操作数1/数位的状态,控制后续程序的流向u例:测试BL最低位是否为1uTEST BL,01Hu当BL最低位是1,ZF=0;u当BL最低位是0,ZF=100001001 (BL)00110000 30H0
32、0111001 结果OR逻辑“或”指令(OR)应用:或1:置1,或0:保留标志位:同AND指令例:将数字9转换为相应的ASCII码 MOV BL,09H OR BL, 30Hxxxxxxxx (BL)00001111 0Fxxxxxxxx 结果XOR逻辑“异或”指令(XOR)应用:1.异或1:取反,异或0:“保留” 2.自身异或清0标志位:同AND指令例:XOR BL, 0FH逻辑“非”指令(NOT)功能:目标 目标应用:对目标操作数按位取反标志位:不影响例: NOT BLNOT xxxxxxxx (BL) xxxxxxxx 结果逻辑指令应用举例u例1:若要测试AL中操作数的第0、1、2和7位
33、是否为0,可使用( )指令,以产生转移条件,这条指令执行后将影响的标志位是( )u例2:已知(AX)=0A33AH,(DX)=0F0F0HTEST AL,87HZF、SF和和PF;CF=OF=0AND AH,DLXOR AL,DHNEG AHNOT AL左侧程序段执行后,(AX)= 6035H移位和循环移位指令u移位指令u循环移位指令u带进位的循环移位指令u双精度移位指令移位指令u算术左移指令u格式: SAL 目标操作数,COUNTu操作:目标操作数左移COUNT位,最高位移入CF,最低位补0u说明u1.该类指令属于单操作数指令u2.目标操作数为r,mu3.指令中的count指出移位位数u80
34、86,移1位,1可以立即数形式写入指令;不为1,移位位数由CL的值确定uPentium,移131位,移位位数由立即数或CL的值确定uCOUNT为0表示不移位CF0移位指令u算术左移指令u标志位:CF,OF,PF,SF,ZF(AF不确定)u应用:目标操作数左移一位相当于乘2u例1:BL内容左移一位u SAL BL,1u例2:BL内容左移4位uMOV CL,4uSAL BL,CL移位指令u算术右移指令u格式: SAR 目标操作数,COUNTu操作:目标操作数右移COUNT位,最高位回移,最低位移入 CFu标志位:同SALu应用:可用于带符号数除2u例:-1202=-60u(-120)原=11111
35、000, (-120)补=10001000右移一位100010001100010010111100转换成原码二化十-60CF移位指令u逻辑左移指令u格式: SHL 目标操作数,COUNTu操作:同SALu标志位:同SALCF0移位指令u逻辑右移指令u格式: SHR 目标操作数,COUNTu操作:目标操作数右移COUNT位,最高位补0,最低位移入CFu应用:无符号数除2u标志位:同SALCF0循环移位指令u循环左移指令u格式: ROL 目标操作数,COUNTu操作:将目标操作数最高位移至最低位,同时把最高位移入CFu标志位:CF,OFu应用:通过判断CF检测操作数指定位的值u优点:目标操作数循环
36、移动8(字节)/16(字)位后,可恢复原状u例:AX=12H,BX=34H,求AX=1234Humov cl,8urol ax,cl ;ax=1200huadd ax,bx ;ax=1234hCF循环移位指令u循环右移指令(Rotate right)u格式: ROR 目标操作数,COUNTu操作:将目标操作数最低位移至最高位,同时把最低位移入 CFu标志位:CF,OFCF带进位的循环移位指令u带进位的循环左移指令u(Rotate Left through carry )u格式: RCL 目标操作数,COUNTu操作:目标操作数和CF一起循环左移,CF值移入操作数的最低位,操作数的最高位移入CF
37、u标志位:CF,OFu应用:多字/字节数据移动u例:将三个字构成的内存操作数左移一位M+5 M+4 M+3 M+2 M+1 MCF0sal m,1rcl m+2,1rcl m+4,1CF带进位的循环移位指令u带进位的循环右移指令u(Rotate right through carry )u格式: RCR 目标操作数,COUNTu操作:与RCL操作类似,只是循环方向相反u标志位:CF,OFCF移位和循环移位指令应用举例u例1:已知u(AX)=0A5C6Hu(CX)=0F03HuCF=1RCL AX,CLAND AH,CHRCR AX,CL执行后,(AX)= CF=81C6H1u例2:已知u(AX
38、)=0FC77Hu(CX)=504HuCF=1ROR AX,CLXCHG CH,CLSHL AX,CL执行后,(AX)= CF=0F8E0H1双精度移位指令(用于32位机)u格式:操作码 目的操作数,源, COUNTu特点:u1.目的操作数:r/mu2.源操作数:只能是通用寄存器ru3.COUNT:立即数/CL,取值范围131u说明:操作数为16/32位(不能是8位)双精度移位指令u双精度左移指令(Shift left double)u格式:SHLD 目的操作数,源,COUNTu功能:目的左移COUNT位,源高端依次填入空位,源不变u例:SHLD EDX, EAX, 16CF目的操作数源操作数
39、双精度移位指令u双精度右移指令(Shift right double)u格式:SHRD 目的操作数,源,COUNTu功能:目的右移COUNT位,源低端依次填入空位,源不变u例:SHRD EDX, EAX, 16目的操作数源操作数CF位处理指令(用于32位机)u格式:操作码 目的操作数,源操作数u共性:由源操作数直接或间接给出目的操作数中测试位的位号,并把测试位的值送CFu区别:u1.位测试指令BTu2.测试位置1指令BTS:将测试位置1u3.测试位置0指令BTR:将测试位置0u4.测试位取反指令BTC:将测试位取反位处理指令(用于32位机)u特点:u1.目的操作数:16/32位r/mu2.源操
40、作数:8位立即数/与目的操作数等长的通用ru目的操作数中测试位号的确定:u1.若源操作数小于目的操作数的长度,源为测试位位号u2.源除以目的的长度,其余数作为测试位位号u3.若目的为内存操作数,应将源除以目的长度之商作为位移量加入有效地址,而将余数作为测试位位号u例1:BTS AX, 1u设AX=1234H;执行BTS后,CF=0,AX=1236H u例2:BTC EAX, ECXu设EAX=12345678H;ECX=64H;因为ECX/EAX的长度=64H/20H,余4,故测试位是EAX的D3位;执行BTC后, CF=1,EAX=12345668H位扫描指令(用于32位机)u正向位扫描指令
41、(Bit Scan Forward)u格式:BSF 目的操作数,源操作数u功能:从低位逐位扫描源操作数,若全为0,置ZF=1,否则ZF=0,把检索到的第1个1的位号送目的寄存器u说明:源:16/32位r/m,目的:与源等长的通用ru例:BSF CX, AXu设AX=3344H,执行BSF后,ZF=0,CX=2位扫描指令(用于32位机)u反向位扫描指令(Bit Scan Reverse)u格式:BSR 目的操作数,源操作数u功能:从高位逐位扫描源操作数,若各位全为0,置ZF=1,否则ZF=0,并把检索到的第1个1的位号送目的寄存器u特点:源:16/32位r/m,目的:与源等长的通用ru例: BS
42、R EBX, EAXu设EAX=11223344H,执行BSR后,ZF=0,EBX=28串操作指令及其重复前缀(概念)u串(String):内存中一序列字节/字/双字数据u串操作:对一组数据进行某种相同的操作u串操作数寻址方式u定义:使用隐含变址寄存器,在串指令操作过程中自动修改其内容,以使其指向下一步操作的内存单元地址u源操作数地址:DS:SI /ESIu目标操作数地址:ES:DI /EDIu指针(SI/ESI/DI/EDI)修改:uDF=0,SI/ESI/DI/EDI递增uDF=1,SI/ESI/DI/EDI递减u指针修改量:按数据类型字节/字/双字为1/2/4设置方向标志指令u清除方向标
43、志指令(Clear direction flag)u格式:CLDu功能:使DF=0u应用:执行串操作指令时使地址自动增量u置方向标志指令(Set direction flag)u格式:STDu功能:使DF=1u应用:执行串操作指令时使地址自动减量串操作类指令u串传送指令u重复前缀u串比较指令u串搜索指令u取串指令u存串指令u串输入指令u串输出指令串传送指令(Move string)u格式:MOVS 目标串,源串u MOVSB ;字节传送u MOVSW ;字传送u MOVSD ;双字传送u操作:ES:DI (EDI)DS:SI (ESI)u标志位:不影响u偏移量 方向标志方向标志 源串地址源串地
44、址 目标串地目标串地址址 字节操作字节操作 DF=0/1 SI(ESI) SI(ESI) +/-1 DI(EDI) DI(EDI) +/-1 字操作字操作 DF=0/1 SI(ESI) SI(ESI) +/-2 DI(EDI) DI(EDI) +/-2双字操作双字操作 DF=0/1 SI(ESI) SI(ESI) +/-4 DI(EDI) DI(EDI) +/-4串传送指令应用举例u在内存中传送100个字节数据DATA SEGMENT A DB 3,5,1,7, B DB 100 DUP(?) MOV AX,DATA MOV DS,AX MOV ES,AX LEA SI,A LEA DI,B
45、MOV CX,100 CLDAGAIN: MOVSB DEC CX JNZ AGAIN 重复前缀(Repeat)u格式:REP 串操作指令u功能:重复串操作,直到CX=0为止u操作:u1.若CX=0,退出REPu2.若CX0,CXCX-1u3.执行其后的串操作指令u4.重复13u适用对象:MOVS,STOSu注意:重复前缀必须放在串操作指令前REP应用举例DATA SEGMENT A DB 3,5,1,7, B DB 100 DUP(?) MOV AX,DATA MOV DS,AX MOV ES,AX LEA SI,A LEA DI,B MOV CX,100 CLD REP MOVSBu在内存
46、中传送100个字节数据串处理编程步骤u1.装入地址寄存器u源串地址:DS:SI(ESI)u目的串地址:ES:DI(EDI)u2.若使用重复前缀,装入CXu3.设置方向标志u若DF=0,串操作由地址较小的单元向地址较大的单元进行u若DF=1,串操作由地址较大单元向地址较小单元进行重复前缀(Repeat)u格式:REPE/REPZ 串操作指令u功能:两操作数比较相等时重复串操作u操作:u1.若CX=0/ZF=0时退出重复串操作u2.否则CXCX-1u3.执行其后的串操作指令u4.重复13u适用对象:CMPS,SCAS重复前缀(Repeat)u格式:REPNE/REPNZ 串操作指令u功能:两操作数
47、比较不相等时重复串操作u操作:u1.若CX=0/ZF=1时退出重复串操作u2.CXCX-1u3.执行其后的串操作指令u4.重复13u适用对象:CMPS,SCAS串比较指令(Compare string)u格式:CMPS 源串,目标串u CMPSBu CMPSWu CMPSDu操作: DS:SI(ESI) -ES:DI(EDI)u标志位:6个状态标志u偏移量:按DF修改SI(ESI)和DI(EDI)u应用:比较两串是否相等例:比较长度都为LEN的STR1和STR2是否相同PUSH ES ;保护现场保护现场PUSH DSPOP ES ;ES=DSLEA SI,STR1 ;源串偏移量源串偏移量LEA DI,STR2 ;目的串偏移量目的串偏移量MOV CX,LEN ;数据个数数据个数CLD ;DF=0 REPZ CMPSB;数据相等时重复比较两串内容数据相等时重复比较两串内容JZ L1 ;CX=0转移转移JA L2 ;数据不相等转移数据不相等转移POP ES ;恢复现场恢复现场串扫描指令(Scan string)u格式:SCAS 目标串u SCASBu SCASWu SCASDu操作:AL-ES:DI/AX-ES:DI/EAX-E
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年云南工程职业学院单招职业技能测试题库附参考答案详解(考试直接用)
- 2026年云南特殊教育职业学院单招职业适应性考试题库含答案详解(模拟题)
- 2026年上海杉达学院单招职业技能测试题库带答案详解
- 2026年上海电力大学单招职业技能测试题库含答案详解(b卷)
- 2026年临夏现代职业学院单招职业倾向性测试题库附答案详解(满分必刷)
- 2026年三亚中瑞酒店管理职业学院单招职业技能测试题库附答案详解(考试直接用)
- 2026年九州职业技术学院单招职业适应性测试题库含答案详解(轻巧夺冠)
- 2026年云南省红河哈尼族彝族自治州单招职业适应性考试题库附答案详解
- 2026年云南省文山壮族苗族自治州单招职业适应性测试题库及一套完整答案详解
- 2026年云南省曲靖市单招职业倾向性考试题库及答案详解(全优)
- 电脑安全培训资料课件
- 公立医院采购招标操作指南
- 【《高中生生涯教育研究的国内外文献综述》4300字】
- 《3D打印材料光固化树脂标准》编制说明
- RDPAC准则及医药法规相关知识试卷题目与答案
- 传播策划课件
- 做卓越的老师读书汇报
- 成品抽验检验管理办法
- 2025年广东省中考语文真题(含答案)
- 2024-2025统编版初中语文八年级上册期末考试测试卷及参考答案(共3套)
- 眼科护理不良事件案例分析
评论
0/150
提交评论