1、第3章 寻址方式和指令系统,指令格式: 操作符(或称操作码) 目的操作数,源操作数或 操作符 操作数 或 操作符,3.1 寻址方式,寻址方式就是指令中用于说明操作数所在地址的方法。,一、 立即寻址,立即寻址方式中,指令操作码和操作数都在存储器代码段中。 汇编格式:n(n为立即操作数,是用8位或16位二进制补码表示的有符号数)。 功能:操作数包含在指令中,指令下一单元的内容为立即操作数n。图形表示:,【例1】MOV AX, 10 执行后(AX)=? 该例中源操作数为立即寻址方式,立即数为10,存放在指令的下一单元。 图形表示:,执行:10AX 执行后:(AX)=000AH,二、 寄存器寻址,寄存
2、器寻址方式的操作数在指令指明的寄存器中。 汇编格式:R 其中R表示寄存器名。 功能:操作数直接存放在寄存器R中。,R 指令操作数,【例3】下列程序执行后,(AX)=?,(BX)=?MOV AX,1234HMOV BX,5678HMOV AX,BX,执行:1234HAX5678HBX(BX)AX 执行后:(AX)=5678H,(BX)=5678H,三、 直接寻址,汇编格式: 含有变量的地址表达式。 段寄存器名:EA 。 功能:指令下一字单元的内容是操作数的偏移地址EA。 图形表示:,【例4】寄存器和存储器内容为:(AX)=1212H,(DS)=3000H,(32000H)=4545H。 执行指令
3、:MOV AX ,2000H 执行后:(AX)=? 图形表示:,执行:(32000H)AX 执行后:(AX)=4545H,四、 寄存器间接(相对)寻址,寄存器间接寻址方式中,寄存器的内容为操作数的偏移地址EA,操作数在存储器中。 汇编格式:R 功能:操作数存放在存储器,寄存器R存放操作数的偏移地址EA。,偏移地址EA=,SI SI作间址寄存器。 DI DI作间址寄存器。 BX BX作间址寄存器。 BP BP作间址寄存器。,执行指令:MOV AX ,BP 执行后:(AX)=?,(BP)=?,(SS)=?,(20030H)=? 图形表示如下:,【例5】寄存器和存储器内容分别为:(AX)=0,(BP
4、)=0030H,(SS)=2000H,(20030H)=1234H,五、寄存器相对寻址,寄存器相对寻址方式操作数的偏移地址EA为寄存器的内容加位移量,操作数在存储器中。汇编格式:XR(X表示位移量,是8位或16位二进制补码表示的有符号数)功能:操作数存放在存储器,寄存器R的内容加位移量X为操作数的偏移地址EA。,图形表示:,偏移地址EA计算方法如下:,【例5】设执行前: (AX)=0040H,(BX)=0030H,(DS)=2000H,(20036H)=0050H 执行指令:ADD 6BX,AX 执行后:(AX)=?,(BX)=?,(DS)=?,(20036H)=?图形表示如下:,执行:(20
5、036H)+(AX) 20036H 执行后:(AX)=0040H,(BX)=0030H,(DS)=2000H,(20036H)=0090H。,六、 基址变址寻址,基址变址寻址方式中,操作数的偏移地址EA是指令中基址寄存器内容、变址寄存器内容两项之和,操作数在存储器中。格式: BR+IR功能:操作数存放在存储器,BR的内容加IR的内容加位移量X是操作数的偏移地址EA。,操作数偏移地址EA计算方法如下,七、 相对基址变址寻址,相对基址变址寻址方式中,操作数的偏移地址EA是指令中基址寄存器内容、变址寄存器内容、位移量三项之和,操作数在存储器中。格式:X BR+IR功能:操作数存放在存储器,BR的内容
6、加IR的内容加位移量X是操作数的偏移地址EA。,图形表示:,操作数偏移地址EA计算方法如下,3.1.7 跨段问题,若选用BP作间址或基址寄存器,则操作数在堆栈段,操作数的物理地址由堆栈段寄存器SS的内容左移4位与BP相加后形成; 否则,操作数在数据段,操作数的物理地址由数据段寄存器DS的内容左移4位与偏移地址相加后形成。该规定为系统默认状态。 当要否定默认状态,到非约定段寻找操作数时,必须用跨段前缀指明操作数的段寄存器名。汇编格式:段寄存器名:操作数地址。功能:段寄存器名指明操作数属哪个段。,【例7】跨段前缀示例。,MOV AX,DS:BP MOV CX,SS:SI 该例中,DS:,SS:均为
7、跨段前缀,此时默认状态无效,操作数的物理地址PA由段寄存器内容左移4位加偏移EA形成。 上述2条指令的源操作数物理地址分别为: PA1 =(DS)左移4位+BP PA2 =(SS)左移4位+SI,习题: 假定DS=2000H, ES=2100H, SS=1500H, SI=00A0H, BX=0100H, BP=0010H,请指出下列指令的源操作数字段是什么寻址方式 ? 它的物理地址是多少?MOV AX, 0ABH MOV AX, BX MOV AX, 100H ES: MOV AX, BX MOV AX, BP MOV AX, BX+10 MOV AX, 50BX MOV AX, BX SI
8、 MOV AX, 60BPSI,3.2 8086指令系统,典型指令使用频率,3.2.1 数据传送类指令, 通用数据传送指令 堆栈操作指令 输入输出指令 地址传送指令 标志寄存器传送指令,最基本的传送指令MOV格式:MOV OPD,OPS功能:将源操作数传送入目的地址,源地址内容不变。即(OPS)OPD。, 通用数据传送指令,MOV指令所允许的数据传送路径及类型,【例】数据间传送,MOV AX,1234H ;源操作数为直接寻址 MOV BH,DI ;源操作数为寄存器间接寻址 MOV DI,ES:3SI ;源操作数为变址寻址,使用跨段前缀 MOV BP,3BX+SI ;源操作数为基址加变址寻址 M
9、OV AX,2345H MOV DS:BP,DL ;使用跨段前缀 MOV ES ,AX,注:IP不能用作源操作数和目的操作数;立即数和CS不能用作目的操作数;两个存储器之间不能直接传送数据;两个段寄存器之间不能直接传送数据;立即数不能传入段寄存器。,数据交换指令XCHG,格式:XCHG OPD,OPS功能:将源地址与目的地址中的内容互换。即(OPD)OPS,(OPS)OPD。 【例】寄存器与存储器之间数据交换。MOV AX,5678H ;(AX)=5678HMOV BX,0FFFFH ;(BX)=0FFFFHXCHG AX,BX;(AX)=0FFFFH,( BX)=5678H,查表转换指令 X
10、LAT,格式:XLAT 转换表 或 XLAT 功能:将(BX)为首址(AL)为位移量的字节存储单元中的数据送AL寄存器。即(BX+AL)AL。,十进制数的七段显示码表,进栈指令PUSH,格式: PUSH OPS(PUSH REG/MEM) 功能:将寄存器、段寄存器或存储器中的一个字数据压入堆栈,堆栈指针减2。 即:(SP)SP(OPS)158SP (SP)SP (OPS)70SP, 堆栈操作指令,【例】设SS=2000H, SP=0040H, AX=25FEH 执行:PUSH AX,执行后: SS=2000H, SP=003EH, AX=25FEH , (2003EH)=25FEH,出栈指令P
11、OP,格式: POP OPD(POP REG/MEM) 功能: 将栈顶元素弹出送至某一寄存器、段寄存器(除CS外)或存储器,堆栈指针加2。 从POP指令功能可看出,该指令为PUSH指令的逆过程。 即:(SP)(OPD)70 (SP)+SP (SP)(OPD)158 (SP)+SP,【例】设SS=2000H, SP=0040H, BX=25FEH, (20040H)=2031H执行:POP BX,执行后: SS=2000H, SP=0042H, BX=2031H , (20040H)=2031H,输入指令IN,输入指令用来从指定的外设端口取信息送入累加器。它有四种形式: (1)格式:IN AL,
12、PORT 功能:(PORT) AL (2)格式:IN AX,PORT功能:(PORT) AX (3)格式:IN AL,DX功能:(DX) AL (4)格式:IN AX,DX功能:(DX) AL, 输入输出指令,输出指令OUT,输出指令用来把累加器的内容送往指定的外设端口,它有四种形式: (1)格式:OUT PORT,AL 功能:(AL) PORT (2)格式:OUT PORT,AX 功能:(AX) PORT (3)格式:OUT DX,AL 功能:(AL) DX (4)格式:OUT DX,AX 功能:(AX) DX,传送偏移地址指令 LEA,格式: LEA OPD,OPS(LEA REG,MEM
13、) 功能:主存按源地址的寻址方式计算偏移地址,将偏移地址送入指定寄存器。 【例】主存偏移地址的获取。 MOV BX,0100H ;(BX)=0100H MOV SI, 0210H ;(SI) =0210H LEA BX,1234BX+SI ; (BX)=1544H, 地址传送指令,传送偏移地址及数据段首址指令LDS,格式:LDS OPD,OPS(LDS REG,MEM) 功能:将主存中指定字单元数据送入指定寄存器,下一字单元数据送DS寄存器。,传送偏移地址及附加数据段指令LES,格式:LES OPD,OPS (LES REG,MEM) 功能:将主存某字单元内容送指定寄存器。即(OPS)OPD,
14、(OPS+2)ES。,标志送AH指令LAHF,格式:LAHF 功能:将标志寄存器的低8位送入AH寄存器。 即(FLAGS)7-0AH。该指令的执行对标志位无影响。 【例】标志寄存器传送。 执行前:(FLAGS)=0485H,(AX)=0FFFFH 执行指令:LAHF, 标志寄存器传送指令,AH送标志指令SAHF,格式:SAHF 功能:将AH的内容送入标志寄存器的低8位,高8位不变。即(AH) FLAGS7-0. 从该指令功能可看出,SAHF为LAHF的逆过程。,标志寄存器进栈指令PUSHF,格式:PUSHF 功能:将标志寄存器的内容压入堆栈。即(FLAGS)(SP)。,标志寄存器出栈指令POP
15、F,功能: 将栈顶内容弹出送入标志寄存器中。即(SP)FLAGS。 POPF指令与PUSHF指令互为逆过程。 【例】将标志寄存器的单步标志TF置位。 PUSHF ;(FLSGS)(SP) POP AX ;(SP)AX OR AX, 0100H ;设置D8=TF=1 PUSH AX ;(AX)(SP) POPF;(SP)FLAGS,即(AX)FLAGS,3.2.2 算术运算类指令, 加法指令 减运算指令 乘运算指令 除运算指令 符号扩展指令 十进制调整指令,加1指令 INC 格式:INC OPD 功能:将目的操作数加1,结果送目的地址。即(OPD)+1OPD。 INC指令是一个单操作数指令,操作
16、数可以是寄存器或存储器操作数。 如:INC BX,即(BX)+1BX。 加1指令可用于对计数器和地址指针进行调整。 如果要使内存单元的内容加1,则程序中必须有说明该存储单元是字还是字节的符号或说明语句。 如: INC BYTE PTRBX;内存字节单元内容增1INC WORD PTRBX ;内存字单元内容增1, 加法指令,加指令ADD,格式:ADD OPD, OPS 功能:将目的操作数与源操作数相加,结果存入目的地址中,源地址的内容不改变。 即(OPD)+(OPS)OPD。 例如:ADD AL,40 ADD BYTE PTRSI,34HADD AX,SI ADD 20HBX,AXADD AL,
17、23HBX ADD 2000H,DXADD DX,40ADD DI,CXADD DX,23HBX+SI,带进位加指令ADC,格式:ADC OPD,OPS 功能:将目的操作数加源操作数再加低位进位,结果送目的地址。 即(OPD)+(OPS)+CF OPD。 【例】无符号双字加法运算。 MOV AX,4652H ;(AX)=4652H ADD AX,0F0F0H ;(AX)=3742H,CF=1 MOV DX,0234H ;(DX)=0234H ADC DX,0F0F0H ;(DX)=0F325H,CF=0,格式:DEC OPD 功能:将目的操作数减1,结果送目的地址。即(OPD)1OPD。 DE
18、C指令是一个单操作数指令,操作数可以是寄存器或存储器操作数。 如:DEC CX。即(CX)1CX。DEC BYTE PTRSI 减1指令DEC也一般用于对计数器和地址指针的调整。, 减运算指令,减1指令DEC,格式:SUB OPD,OPS 功能:目的操作数减源操作数,结果存于目的地址,源地址内容不变。 即(OPD)(OPS)OPD 【例】减法运算。 MOV AX ,5678H ;(AX)=5678H SUB AX ,1234H ;(AX)=4444H MOV BX ,3354H ;(BX)=3354H SUB BX ,3340H ;(BX)=0014H,减指令SUB,格式:NEG OPD 功能
19、:将目的操作数的每一位求反(包括符号位)后加1,结果送目的地址。 即(OPD)+1OPD。 【例】求补运算。 MOV AX,0FF64H NEG AL ;(AX)=0FF9CH SUB AL,9DH ;(AX)=0FFFFH NEG AX ;(AX)=0001H DEC AL ;(AX)=0000H NEG AX ;(AX)=0000H,求补指令NEG,格式:SBB OPD ,OPS 功能:目的操作数减源操作数再减低位借位CF,结果送目的地址。 即(OPD)(OPS)CF OPD,带借位减指令 SBB,比较指令 CMP,格式:CMP OPD,OPS 功能:目的操作数减源操作数,结果只影响标志位
20、,不送入目的地址。 即(OPD)(OPS)。 【例】比较AL的内容数值大小。CMP AL,50 ;(AL)50JB BELOW ;(AL)=50,( AL)50ALINC AH ;(AH)+1AH BELOW: ,无符号数乘法指令MUL,格式: MUL OPS 功能: 若是字节数据相乘,(AL)与OPS相乘得到字数据存入AX中;若是字数据相乘,则(AX)与OPS相乘得到双字数据,高字存入DX、低字存入AX中。 即字节乘法:(AL)* (OPS) AX,字乘法:(AX) * (OPS) DX,AX 【例】无符号数0A3H与11H相乘。 MOV AL,0A3H ;(AL)=0A3H MOV BL,
21、 11H ;(BL)=11H MUL BL ;(AX)=0AD3H, 乘运算指令,有符号乘指令IMUL,格式:IMUL OPS 功能:字节乘法:(AL)*(OPS)AX,字乘法:(AX)*(OPS)DX、AX。 IMUL指令除计算对象是带符号二进制数外,其他都与MUL一样,但计算结果不同。 【例】有符号数0B4H与11H相乘。 MOV AL,0B4H ;(AL)=B4H MOV BL,11H ;(BL)=11H IMUL BL ;(AX)=0FAF4H,格式:DIV OPS 功能:字节除法:(AX)/(OPS) AL(商)、AH(余数) 字除法:(DX、AX)/(OPS) AX(商)、DX(余
22、数) 【例】写出实现无符号数0400H / 0B4H运算的程序段。 MOV AX,0400H ;(AX)=0400H MOV BL,0B4H ;(BL)=0B4H DIV BL ;商(AL)=05H,余数(AH)=7CH, 除运算指令,无符号除指令DIV,格式:IDIV OPS 功能:字节除法:(AX)/(OPS) AL(商)、AH(余数) 字除法:(DX,AX)/(OPS) AX (商)、DX(余数) 除法指令DIV和IDIV虽然对标志的影响未定义,但可产生溢出。 【例】写出实现有符号数0400H /0B4H运算的程序段。 MOV AX,0400H ;(AX)=0400H MOV BX,0B
23、4H ;(BX)=0B4H IDIV BX ;(AL)=0F3H,(AH)=24H,有符号除指令IDIV,格式:CBW 功能:将AL中的符号位数据扩展至AH。 【例】将字节数据扩展成字数据。 MOV AL,0A5H ;(AL)=0A5H CBW ;(AX)=0FFA5H ADD AL,70H ;(AL)=15H CBW ;(AX)=0015H, 符号扩展指令,字节转换成字指令CBW,格式:CWD 功能:将AX中的符号位数据扩展至DX 。 【例】将字数据扩展成双字数据。 MOV DX, 0 ;(DX)=0 MOV AX, 0FFABH ;(AX)=0FFABH CWD ;(DX)=0FFFFH
24、(AX)=0FFABH,将字转换成双字指令CWD,格式:AAA 功能:如果AL的低4位大于9或(AF)=1,则: (AL)=(AL)+6 (AH)=(AH)+1 (AF)=(CF)=1且AL高4位清零。 否则:(CF)=(AF)=0 AL高4位清零。,非压缩的BCD码加法调整指令AAA, 十进制调整指令,压缩的BCD码加法调整指令DAA,格式:DAA 功能:如果AL寄存器中低4位大于9或辅助进位(AF)=1,则(AL)=(AL)+6且(AF)=1;如果(AL)=0A0H或(CF)=1,则(AL)=(AL)+60H且(CF)=1。同时,SF、ZF、PF均有影响。 【例】压缩BCD码的加法运算。
25、MOV AL,68H ;(AL)=68H,表示压缩BCD码68 MOV BL,28H ;(BL)=28H,表示压缩BCD码28 ADD AL,BL ;二进制加法:(AL)=68H+28H=90H DAA ;十进制调整:(AL)=96H;实现压缩BCD码加法:68+28=96,格式:AAS 功能:如果AL的低4位大于9或(AF)=1,则: (AL)=(AL)6 (AH)=(AH)1 (AF)=(CF)=1 AL高4位清零。 否则:(CF)=(AF)=0AL高4位清零。 其他标志位OF、PF、SF、ZF不确定。,非压缩的BCD码减法调整指令AAS,压缩的BCD码减法调整指令DAS,格式:DAS 功
26、能:如果(AF)=1或AL寄存器中低4位大于9,则(AL)=(AL)6且(AF)=1;如果(AL)=0A0H或(CF)=1,则(AL)=(AL)60H且(CF)=1。同时SF、ZF、PF均受影响。 【例】压缩BCD码的减法运算。 MOV AL,68H ;(AL)=68H,表示压缩BCD码68 MOV BL,28H ;(BL)=28H,表示压缩BCD码28 SUB AL,BL ;二进制减法:(AL)=68H28H=40H DAS ;十进制调整:(AL)=40H;实现压缩BCD码减法:6828=40,乘法的非压缩BCD码调整指令AAM,格式:AAM 功能:被调整的乘积在AX中,对AL按10取模,则
27、:(AL)0AHAH(商):AL(余数) 其中AH为商,AL为余数,标志位AF、CF、OF、PF、SF、ZF受影响。,除法的非压缩BCD码调整指令AAD,格式:AAD 功能:除法运算前,先调整被除数AX内容,使:(AL)=(AL)+(AH)*0AH(AH)=0 即把非压缩型十进制数变成二进制数。,3.2.3 逻辑运算和移位指令, 逻辑运算指令 移位指令,格式:NOT OPD 功能:将目的地址中的内容逐位取反后送入目的地址。即(OPD)OPD 【例】逻辑非运算。MOV AX,878AH ;(AX)=878AHNOT AX ;(AX)=7875H, 逻辑运算指令,逻辑非指令NOT,格式:AND O
28、PD, OPS 功能:将目的操作数和源操作数进行逻辑乘运算,结果存目的地址。 即(OPD)(OPS)OPD。 该指令用于清除目的操作数中与源操作数置0的对应位。说明:逻辑乘的运算法则为:11=1,10=0,01=0,00=0 【例】将AL中第3位和第7位清零。MOV AL,0FFH AND AL,77H,逻辑乘(“与”)指令AND,格式:TEST OPD,OPS 功能:源地址和目的地址的内容执行按位的逻辑乘运算,结果不送入目的地址。 即(OPD)(OPS)。 【例】测试AX中的第12位是否为0,不为0则转L。TEST AX,1000HJNE L,测试指令TEST,格式:OR OPD,OPS 功
29、能:将目的操作数和源操作数进行逻辑加运算,结果存目的地址。 即(OPD)(OPS)OPD。 说明:逻辑加的运算法则为:11=1,10=1,01=1,00=0。 【例】将AL寄存器中第3位和第7位置1。MOV AL,0 OR AL,88H,逻辑加(“或”)指令OR,格式: XOR OPD,OPS 功能:目的操作数与源操作数做按位加运算,结果送入目的地址。 即(OPD)(OPS) OPD。 说明:逻辑“异或”的运算法则为;11=0,10=1,01=1,00=0。 【例】逻辑“异或”运算。MOV AL,45H ;(AL)=45HXOR AL,31H ;(AL)=74H,逻辑“异或”指令XOR, 移位
30、指令,移位指令包括算术移位指令、逻辑移位指令和循环移位指令,分别进行左移和右移操作。这些指令均有统一的语句格式: 标号:操作符 OPD,1 或 标号:操作符 OPD,CL 其功能为将目的操作数的所有位按操作符规定的方式移动1位或按寄存器CL规定的次数(0255)移动,结果送入目的地址。目的操作数是8位(或16位)的寄存器数据或存储器数据。,算术左移和逻辑左移指令SAL(SHL) 格式:SAL OPD,1 或SHL OPD,1SAL OPD,CL 或SHL OPD,CL 功能:将(OPD)向左移动CL指定的次数,最低位补入相应的,的内容为最后移入位的值。,算术右移指令SAR 格式:SAR OPD
31、,1或SAR OPD,CL 功能:将(OPD)向右移动CL指定的次数且最高位保持不变;CF的内容为最后移入位的值。,【例】算术右移运算。MOV BH,0F4H ;(BH)=0F4HMOV CL, 2 ;(CL)=2SAR BH, CL ;(BH)=0FDH,(CF)=0 该例语句“SAR BH,CL”实际上完成了 (BH)BH的运算,所以,用SAR指令可以实现对有符号数除2n的运算(n为移位次数)。,逻辑右移指令SHR 格式:SHR OPD,1或SHR OPD,CL 功能:将(OPD)向右移动CL规定的次数,最高位补入相应个数的,CF的内容为最后移入位的值。,循环左移指令ROL 格式:ROL
32、OPD,1或ROL LPD,CL 功能:将目的操作数的最高位与最低位连成一个环,将环中的所有位一起向左移动CL规定的次数。CF的内容为最后移入位的值。,循环右移指令ROR 格式: ROR OPD,1或ROR OPD,CL 功能:将目的操作数的最高位与最低位连成一个环,将环中的所有位一起向右移动CL规定的次数,CF的内容为最后移入位的值。,带进位的循环左移指令RCL 格式: RCL OPD, 1或RCL OPD,CL 功能:将目的操作数连同CF标志一起向左循环移动CL规定的次数。,带进位的循环右移指令RCR 格式:RCR OPD,1或RCR OPD,CL 功能:将目的操作数连同CF标志一起向右循
33、环移动所规定的次数。,3.2. 控制转移类指令, 条件转移指令 无条件转移指令 循环指令 子程序调用指令 中断指令, 条件转移指令,简单条件转移指令 无符号数条件转移指令 . 有符号数条件转移指令 它们都有通用的语句格式和功能。 语句格式: 标号: 操作符 短标号 功能:如果条件满足,则(IP)位移量IP。,简单条件转移指令,无符号数条件转移指令,表 无符号数条件转移指令,【例】比较无符号数大小,将较大的数存放AX寄存器。CMP AX, BX ;(AX)(BX)JNB NEXT ;若AX=BX,转移到NEXTXCHG AX,BX ;若AXBX,交换 NEXT:,. 有符号数条件转移指令,表 有
34、符号数条件转移指令,【例】比较有符号数大小,将较大的数存放在AX寄存器。CMP AX,BX ;(AX)(BX)JNL NEXT ;若AX=BX,转移到NEXTXCHG AX,BX ;若AXBX,交换 NEXT:, 无条件转移指令,表 无条件转移指令的语句格式及功能, 循环指令,循环指令LOOP 相等/为零循环指令LOOPE 不相等/不为零循环指令LOOPNE CX为零转移指令JCXZ,循环指令LOOP 语句格式: LOOP 短标号 功能:(CX)1 0,则程序转移(循环);否则,顺序执行。 说明:使用LOOP指令可代替两条指令:DEC CXJNE 短标号,相等/为零循环指令LOOPE 语句格式
35、: LOOPE 短标号 LOOPZ 短标号 功能:(CX)1 0且ZF=1,则程序转移(循环);否则,顺序执行。,不相等/不为零循环指令LOOPNE 语句格式: LOOPNE 短标号 LOOPNZ 短标号 功能:(CX)10,则程序转移(循环);否则,顺序执行。,CX为零转移指令JCXZ 语句格式: JCXZ 短标号 功能:(CX)10,则程序转移(循环);否则,顺序执行。, 子程序调用指令,子程序调用指令CALL 段内直接调用 段间直接调用 段内间接调用 段间间接调用 返回指令RET 语句格式:RET 语句格式:RET n(n为偶数), 中断指令,中断调用指令INT 语句格式:INT n 功
36、能:(FLAGS)(SP),0 IF、TF。(CS) (SP),(4*n+2) CS。(IP) (SP),(4*n) IP。 中断返回指令IRET 语句格式:IRET 功能: (SP)IP (SP) CS(SP) FLAGS,3.2. 串操作类指令,串操作指令 : 数据传送类指令每次只能传送一个数据,若要传送大批数据就需要重复编程,这样就浪费了大量的时间和空间。为此8086提供了一组处理主存中连续存放数据串的指令,这就是串操作指令。,字符串处理指令包含以下隐含约定:1)源串位于当前数据段,由DS寻址,源串的元素由SI作指针,即源串字符的起始地址(或末地址)为DS:SI。源串允许使用段地址前缀来
37、修改段地址。2)目的串必须位于当前附加段中,由ES寻址,目的串元素由DI作指针,但不允许使用段超越前缀修改ES。3)每执行一次字符串指令,指针SI和DI会自动进行修改。,4)DF标志控制字符串处理的方向。DF=0为递增方向,DF=1为递减方向。可用标志操作指令STD和CLD来改变DF值,STD使DF置1,CLD将DF置1。5)要处理的字符串长度(字节或字数)放在CX寄存器中。,图 流程图总结了串操作的过程。,图 串操作流程图,传送指令MOVS 格式: MOVSB字节串传送 MOVSW字串传送 功能:将以SI为指针的源串中的一个字节(或字)存储单元中的数据传送至以DI为指针的目的地址中去,并自动
38、修改指针,使之指向下一个字节(或字)存储单元。 即:(DS:SI)(ES:DI)。 当DF=0时,(SI)和(DI)增量。当DF=1时,(SI)和(DI)减量。,串比较指令CMPS 格式: CMPSB字节串比较 CMPSW字串比较 功能:将SI所指的源串中的一个字节(或字)存储单元中的数据与DI所指的目的串中的一个字节(或字)存储单元中的数据相减,并根据相减的结果设置标志,但结果并不保存。 即:(SI)(DI)。 修改串指针,使之指向串中的下一个元素。 当DF=0时,(SI)和(DI)增量。当DF=1时,(SI)和(DI)减量。,串搜索指令SCAS 格式: SCASB字节串搜索 SCASW字串
39、搜索 功能:AL(字节)或AX(字)中的内容与DI所指的目的串中的一个字节(或字)存储单元中的数据相减,根据相减结果设置标志位,结果不保存, 即: 字节操作:(AL)(DI),字操作:(AX)(DI)。 修改指针使之指向串中的下一个元素。 当DF=0时,(DI)增量。当DF=1时,(DI)减量。,从源串中取数指令LODS 格式: LODSB从字节串中取数 LODSW从字串中取数 功能:将SI所指的源串中的一个字节(或字)存储单元中的数据取出来送入AL(或AX)中。 即: 字节操作:(SI)AL,字操作:(SI)AX。 修改指针SI,使它指向串中的下一个元素。 当DF=0时,(SI)增量。当DF
40、=1时,(SI)减量。,往目的串中存数指令STOS 格式: STOSB往字节串中存数(2)STOSW往字串中存数 功能:将AL或AX中的数据送入DI所指的目的串中的字节(或字)存储单元中。 即: 字节操作:(AL)DI,字操作:(AX)DI。 修改指针DI,使之指向串中的下一个元素。 当DF=0时,(DI)增量)。当DF=1时,(DI)减量。,重复前缀指令REP REPZ REPNZ REP REP前缀用在MOVS、STOS 、LODS指令前。 功能:每执行一次串指令(CX)1,直到(CX)=0,重复执行结束。 REPZ 该指令一般用在CMPS、SCAS指令前。 功能:每执行一次串指令(CX)1,并判断ZF标志是否为0,只要(CX)=0或ZF=0,则重复执行结束。 REPNZ 该指令一般用在CMPS、SCAS 指令前。 功能:每执行一次串指令(CX)1,并判断ZF标志是否为0,只要(CX)=0或ZF=1,则重复执行结束。,THANK YOU VERY MUCH,本章到此结束, 谢谢您的光临!,