配色: 字号:
第3章_4 逻辑移位及串操作
2012-05-16 | 阅:  转:  |  分享 
  
课后作业3.21~3.32,3.34,3.35,3.37,3.39(3)不相等则重复REPNE/REPNZ(REPeatwhen
NotEqual/Zero)格式:REPNE/REPNZ串操作指令功能:若串操作指令执行结果不相等,且CX指定
次数未到,则重复执行串操作指令,直到结果相等,或CX指定次数已到则停止说明:若ZF=0且CX-1→CX≠0则重复执行串指令,
直到ZF=1或CX-1→CX=0为止。REPNE指令主要用于串比较和串搜索指令前例如:REPNECMPSW
REPNZSCASB串操作指令(5条)14、串传送指令MOVSB/MOVSW(MOVeStringof
Byte/Word)格式:MOVSB/MOVSW功能:将源串指针SI所指单元的一个数据(字节或字)传送到目的串指针DI
所指单元中,指针作相应变化(1)[ES:DI]←[DS:SI](2)MOVSB(字节操作):(SI)←(SI)±1,(
DI)←(DI)±1MOVSW(字操作):(SI)←(SI)±2,(DI)←(DI)±2(3)方向
标志:DF=0时地址“+”,DF=1时地址“-”(4)使用重复前缀REP相配合,一次完成数据串的传送操作数据段DS附
加段ES(SI)??(DI)DF=0(SI)??(DI)DF=1程序段如下:LDS
SI,源串首地址LESDI,目的串首地址MOVCX,串长度
CLDREPMOVSB;将数据段中的整串数据传送到附加段中执行REPMOVS之前,应先做好如下准
备:(1)源串首地址(末地址)→SI,置好DS的值(2)目的串首地址(末地址)→DI,置好ES的值(3)串长度→CX
(4)设置方向标志(CLD使DF=0,STD使DF=1)(SI)?数据段DS附加段ES(SI)??(DI
)?(DI)DF=0地址增量15、串比较指令CMPSB/CMPSW(CoMPareStringofByte/Wo
rd)格式:CMPSB/CMPSW功能:将源串指针SI所指单元的一个数据(字节或字)与目的串指针DI所指单元的一个数据
(字节或字)相减,但结果不回送,只影响标志位,指针作相应变化(1)[DS:SI]-[ES:DI],不保存结果,影响标志位同C
MP指令(2)CMPSB(字节操作):(SI)←(SI)±1,(DI)←(DI)±1CMPSW(字操作
):(SI)←(SI)±2,(DI)←(DI)±2(3)方向标志:DF=0时地址“+”,DF=1时地址“-”(
4)使用重复前缀REPZ/REPE、REPNZ/REPNE相配合(SI)??(DI)DF=1数据段DS附加段ES
(SI)??(DI)DF=016、串搜索指令SCASB/SCASW(SCAnStringofByt
e/Word)格式:SCASB/SCASW功能:将累加器(AL或AX)内容与目的串指针DI所指单元的一个数据(字节或字
)相减,但结果不回送,只影响标志位,指针作相应变化(1)AL(AX)-[ES:DI],不保存结果,影响标志位(2)SCASB
(字节操作):(SI)←(SI)±1,(DI)←(DI)±1SCASW(字操作):(SI)←(SI)
±2,(DI)←(DI)±2(3)方向标志:DF=0时地址“+”,DF=1时地址“-”(4)使用重复前缀REPZ
/REPE、REPNZ/REPNE相配合?(DI)DF=1附加段ES?(DI)DF=0AL(AX)搜索数据串中
与AL/AX相同/(不相同)的数据17、串写入指令STOSB/STOSW(STOredatatoStringof
Byte/Word)格式:STOSB/STOSW功能:累加器(AL或AX)内容传送到目的串指针DI所指单元中,指针作
相应变化(1)[ES:DI]←AL(AX),不影响标志位(2)STOSB(字节操作):(SI)←(SI)±1,(DI)←
(DI)±1STOSW(字操作):(SI)←(SI)±2,(DI)←(DI)±2(3)方向标志:
DF=0时地址“+”,DF=1时地址“-”(4)使用重复前缀REP相配合?(DI)DF=1用AL/AX填充(初始化)
数据串中所有数据附加段ES?(DI)DF=0AL(AX)18、串读出指令LODSB/LODSW(LOaDdata
fromStringofByte/Word)格式:LODSB/LODSW功能:将源串指针SI所指单元的一个数据
(字节或字)传送到累加器(AL或AX)中,指针作相应变化(1)AL(AX)←[DS:SI],不影响标志位(2)LODSB(
字节操作):(SI)←(SI)±1,(DI)←(DI)±1LODSW(字操作):(SI)←(SI)±
2,(DI)←(DI)±2(3)方向标志:DF=0时地址“+”,DF=1时地址“-”(4)使用重复前缀REP相配合
,但一般不与REP联用?(SI)DF=1从数据串取数到AL/AX中数据段DS?(SI)DF=0AL(AX)
第三章指令系统三峡大学陈慈发0717-6394358,13972597617chcf0415@126.com12
8086CPU的指令格式8086CPU的指令系统38086CPU的寻址方式指令系统指令分类数据传送指令算术运算指
令逻辑运算与移位指令串操作指令控制转移指令处理机控制指令逻辑运算指令(5条)实现与、或、非、异或、测试等逻辑
运算操作数的搭配关系同算术运算除逻辑“非”指令不影响标志外,其他逻辑运算指令均影响标志SF、ZF和PF,而OF和CF一定被
置0,AF不确定1、逻辑“与”指令AND格式:ANDd,s功能:(d)?(d)∧(s)说明:将
目的操作数d与源操作数s按位相“与”结果送回d中,常用于使某些位清0内存立即数AH,ALBH,BLCH,CLD
H,DLAX,BXCX,DXSI,DIBP,SP例如: AND AX,BX AND CL,[SI] AND [BX
][DI-10H],WORDPTR80H AND CH,AL AND BX,1 AND BYTEPTR[20H],2
0H AND AL,30H AND BYTEPTR[DI],12HOF=CF=0,其它标志位受影响d、s必须具有相同的
字长?ANDAX,BLd、s不能为段寄存器?ANDDS,2000Hd不能是立即
数?AND10H,AX【例】屏蔽AL的0,1两位。 ANDAL,0FCH
∧1111110000【例】将AH的高4位清0。 ANDAH,0FH∧00
0011110000【例】将BX的低4位清0。 ANDBX,0FFF0H
∧111111111111000000002、逻辑“或”指令OR格式
:ORd,s功能:(d)?(d)∨(s)说明:将目的操作数d与源操作数s按位相“或”结果送回d中,常用于
使某些位置位(置1)内存立即数AH,ALBH,BLCH,CLDH,DLAX,BXCX,DXSI,DIB
P,SP例如: OR AX,BX OR CL,[SI] OR [BX][DI-10H],WORDPTR80H OR
CH,AL OR BX,1 OR BYTEPTR[20H],20H OR AL,30H OR BYTEPTR[DI
],12HOF=CF=0,其它标志位受影响d、s必须具有相同的字长?ORAX,BLd、s不能为段寄存
器?ORDS,2000Hd不能是立即数?OR10H,AX【例】将AL的0,1两
位置1。 ORAL,03H∨0000001111【例】将AH的高4位置1。
ORAH,0F0H∨111100001111【例】将BX的低4位置1。 OR
BX,000FH∨0000000000001111
11113、逻辑“异或”指令XOR格式:XORd,s功能:(d)?(d)⊕(s)说明
:将目的操作数d与源操作数s按位相“异或”结果送回d中,常用于使某些位取反内存立即数AH,ALBH,BLCH,C
LDH,DLAX,BXCX,DXSI,DIBP,SP例如: XOR AX,BX XOR CL,[SI] XOR
[BX][DI-10H],WORDPTR80H XOR CH,AL XOR BX,1 XOR BYTEPTR[20H
],20H XOR AL,30H XOR BYTEPTR[DI],12HOF=CF=0,其它标志位受影响d、s必须具有
相同的字长?XORAX,BLd、s不能为段寄存器?XORDS,2000Hd不能
是立即数?XOR10H,AX【例】对AL的0,1两位取反。 XORAL,03H
⊕00000011--【例】对CL的1,2,3,4,5位取反,其它位不变。 XORCL,3
EH⊕00111110-----【例】置DX为0。 XORDX,DX例如
: NOT AX NOT DH NOT SI NOT BYTEPTR[SI]不影响标志位d不能是段寄存器、立即数
?NOTDS?NOT10H4、逻辑“非”指令NOT格式:NOTd功能
:(d)?(d)说明:将目的操作数d取反后结果送回d中5、测试指令TEST格式:TESTd,s功
能:(d)∧(s)说明:将目的操作数d与源操作数s按位相“与”,只影响标志位不回送结果,常用于测试某些位是0或1内
存立即数AH,ALBH,BLCH,CLDH,DLAX,BXCX,DXSI,DIBP,SP例如: TEST
AX,BX TEST CL,[SI] TEST [BX][DI-10H],WORDPTR80H TEST CH,AL
TEST BX,1 TEST BYTEPTR[20H],20H TEST AL,30H TEST BYTEPTR[
DI],12HOF=CF=0,其它标志位受影响d、s必须具有相同的字长?TESTAX,BLd、s不能
为段寄存器?TESTDS,2000Hd不能是立即数?TEST10H,AX【例】
测试AL的最高位是0/1? TESTAL,80H JZ XXX ;是0则跳转 (JNZ XXX ;是1则跳转
)【例】测试DX的低4位是0/1? TESTDX,000FH JZ XXX ;是0则跳转 (JNZ XXX
;是1则跳转)【例】测试BH的奇(偶)数位是0/1? TESTBH,0AAH(55H) JZ XXX ;是0则
跳转 (JNZ XXX ;是1则跳转)移位运算指令(8条)对8位或16位的通用寄存器或存储器内容进行移位,移位次数可以为
1~255若移位次数为1则可直接写在指令中,若次数为2~255则不能直接写在指令中,必须先将次数放在寄存器CL中,指令中只能写C
L,移位结束后CL的值不变影响标志OF、SF、ZF、PF、CF,但AF不确定。当移位次数为1时,若移位结果使最高位符号位发生变
化,则溢出标志OF=1,否则OF=0;当移位次数超过1时,OF无效6、逻辑左移指令SHL(SHiftLeft)格式:S
HLd,count功能:逻辑左移说明:将目的操作数d左移count位,右边补0,左边入CF例如: SHL AX
,1 MOV CL,4 SHL DH,CL1CLCFD7D15D00SF、ZF、PF根据移位结果设置CF
=移入的数值AF无定义OF=d不能是段寄存器和立即数1count=1时,最高位的值改变0count=1时,
最高位的值不变逻辑左移1位相当于无符号数乘以2!BX乘以2: SHL BX,1BX乘以3: MOV AX,BX SHL
BX,1 ADD BX,AXBX乘以4: MOV CL,2 SHL BX,CLBX乘以5: MOV AX,BX M
OV CL,2 SHL BX,CL ADD BX,AXBX乘以6: SHL BX,1 MOV AX,BX SHL BX
,1 ADD BX,AXBX乘以7: MOV AX,BX MOV CL,3 SHL BX,CL SUB BX,AXB
X乘以8: MOV CL,3 SHL BX,CLBX乘以9: MOV AX,BX MOV CL,3 SHL BX,CL
ADD BX,AXBX乘以10: MOV AX,BX MOV CL,3 SHL BX,CL SHL AX,1 AD
D BX,AX7、逻辑右移指令SHR(SHiftRight)格式:SHRd,count功能:逻辑右移说
明:将目的操作数d右移count位,左边补0,右边入CF例如:SHR SI,1MOVCL,3
SHRBYTEPTR[BX],CL1CLCFD7D15D00SF、ZF、PF根据移位结果设置
CF=移入的数值AF无定义OF=d不能是段寄存器和立即数1count=1时,最高位的值改变0count
=1时,最高位的值不变逻辑右移1位相当于无符号数除以2!8、算术左移指令SAL(Arithmetic)格式:SAL
d,count功能:同逻辑左移完全相同1CL例如: SAL AX,1 MOV CL,4 SAL DH,CLCF
D7D15D009、算术右移指令SAR(Arithmetic)格式:SARd,count功能:算术右移
说明:将操作数d的内容右移,左边不变,右边移入CF中例如: SAR DI,1 MOV CL,3 SAR BP,CL
1CLSF不变,ZF、PF根据移位结果设置CF=移入的数值AF无定义OF=d不能是段寄存器和立即数1c
ount=1时,最高位的值改变0count=1时,最高位的值不变算术右移1位相当于有符号数除以2!CFD7D15D
0符号位不变10、循环左移指令ROL(ROtate/ROundLeft)格式:ROLd,count功能:循
环左移说明:将操作数d的内容左移,最高位循环移入最低位,同时移入CF例如:ROLDI,1MOV
CL,3ROLBYTEPTR[SI],CL1CLSF、ZF、PF、AF不受影响CF=移入的数值
OF=d不能是段寄存器和立即数1count=1时,最高位的值改变0count=1时,最高位的值不变CFD7
D15D011、循环右移指令ROR(ROtate/ROundRight)格式:RORd,count功能:
循环右移说明:将操作数d的内容右移,最低位循环移入最高位,同时移入CF例如:RORSI,1MOV
CL,4RORBYTEPTR[DI],CL1CLSF、ZF、PF、AF不受影响CF=移入的数
值OF=d不能是段寄存器和立即数1count=1时,最高位的值改变0count=1时,最高位的值不变CFD
7D15D012、带进位循环左移指令RCL(ROtate/ROundCarryLeft)格式:RCLd,co
unt功能:带进位循环左移说明:将操作数d的内容左移,最高位循环移入CF,而CF循环移入最低位例如:RCL
BH,1MOVCL,2RCLDX,CL1CLSF、ZF、PF、AF不受影响CF=
移入的数值OF=d不能是段寄存器和立即数1count=1时,最高位的值改变0count=1时,最高位的值不变
CFD7D15D013、带进位循环右移指令RCR(ROtate/ROundCarryRight)格式:RCR
d,count功能:带进位循环右移说明:将操作数d的内容左移,最低位循环移入CF,而CF循环移入最高位例如:
RCRBX,1MOVCL,4RCRWORDPTR[DI],CL1CLSF、ZF、P
F、AF不受影响CF=移入的数值OF=d不能是段寄存器和立即数1count=1时,最高位的值改变0co
unt=1时,最高位的值不变CFD7D15D0串操作指令(5条)数据串是存储器中一块字节或字的存储区域,其长度可以是
1字节~64K字节串操作就是对数据串中每个元素所进行的操作,这种操作通常是组合操作,能完成几条指令的功能用作源操作数的串称
为源串,源串默认放在数据段中(段地址在DS中),但可以段超越到其他段,源串的偏移地址指针必须放在SI中用作目的操作数的串称为目
的串,目的串必须放在附加段中(段地址在ES中),目的串的偏移地址指针必须放在DI中串的长度(字节数或字数)必须放在CX中串
操作可以按字节操作(助记符末尾字母加B),也可以按字操作(助记符末尾字母加W)。按字节操作时,地址指针加或减1,按字操作时,地址指
针加或减2若方向标志DF=0,则按增址操作,地址指针加1或加2;若方向标志DF=1,则按减址操作,地址指针减1或减28086
共有5种基本的串操作指令,有的指令涉及到2个串,而有的只涉及到1个串有些串操作是在数据串与寄存器之间进行,则规定寄存器只能用累加器,字节操作时用AL,字操作时用AX串操作指令每次只处理一个元素的数据,为了能重复执行最多达64KB的串操作,8086还提供了3种重复前缀指令,使用这些指令可以使串操作指令重复执行由寄存器CX指定的次数除串比较和串搜索指令影响全部6个状态标志外,其它指令均不影响标志位重复前缀(3个)(1)重复REP(REPeat)格式:REP串操作指令功能:使串操作指令重复执行CX指定的次数说明:若CX≠0则重复执行串指令,并置CX←CX-1,直到CX=0为止。REP指令主要用于串传送和串写入指令前例如:REP MOVSBREP MOVSWREPSTOSW(2)相等则重复REPE/REPZ(REPeatwhenEqual/Zero)格式:REPE/REPZ串操作指令功能:若串操作指令执行结果相等,且CX指定次数未到,则重复执行串操作指令,直到结果不相等,或CX指定次数已到则停止说明:若ZF=1且CX-1→CX≠0则重复执行串指令,直到ZF=0或CX-1→CX=0为止。REPE指令主要用于串比较和串搜索指令前例如:REPECMPSBREPZSCASW
献花(0)
+1
(本文系依米荷阳首藏)