汇编语言 第三章-3_第1页
汇编语言 第三章-3_第2页
汇编语言 第三章-3_第3页
汇编语言 第三章-3_第4页
汇编语言 第三章-3_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

3.2.3逻辑指令

逻辑指令包括逻辑运算指令和移位指令。由于它们都是按位进行操作的,故又称位操作指令。逻辑指令以二进制位为基本单位进行数据运算,属于常用指令,应该熟练掌握。要特别注意这些指令对标志位的影响。1、逻辑运算指令AND

OR

XOR

NOT

TEST2、移位指令SHL

SHR

SAR3、循环移位指令ROL

ROR

RCL

RCR2/5/20231逻辑非指令NOT指令格式:NOTOPR指令功能:本指令将给定的操作数按位求反,且不影响标志位。

NOTreg/mem

;reg/mem←~reg/mem2/5/20232逻辑或指令OR

指令格式:ORDST,SRC指令功能:本指令将源操作数与目标操作数按位进行逻辑“或”运算并将结果送入目标操作数。

ORreg,imm/reg/mem

;reg←reg∨imm/reg/memORmem,imm/reg

;mem←mem∨imm/regOR指令设置CF=OF=0,根据结果设置SF、ZF和PF状态,而对AF未定义。2/5/20233逻辑与指令AND指令格式:ANDDST,SRC指令功能:AND指令将源操作数和目标操作数按位进行逻辑“与”运算,然后将结果送入目标操作数。

ANDreg,imm/reg/mem

ANDmem,imm/regAND指令设置CF=OF=0,根据结果设置SF、ZF和PF状态,而对AF未定义2/5/20234逻辑异或指令XOR指令格式:XORDST,SRC指令功能:XOR指令将源操作数与目标操作数按位进行“异或”运算,其结果保留在目标操作数中。

XORmem,imm/reg

;mem←mem⊕imm/reg

XORreg,imm/reg/mem

;reg←reg⊕imm/reg/memXOR指令设置CF=OF=0,根据结果设置SF、ZF和PF状态,而对AF未定义2/5/20235TEST测试指令指令格式:TESTOPR1,OPR2指令功能:TEST指令将两个操作数按位进行逻辑“与”运算,但不保存结果,只根据特征设置状态位。TESTmem,imm/reg

;mem∧imm/regTESTreg,imm/reg/mem

;reg∧imm/reg/mem2/5/20236应用:1)AND:使一个操作数中的若干位维持不变,而另外若干位清0;2)OR:使一个操作数中的若干位维持不变,而另外若干位置1;3)XOR:使一个操作数中的若干位维持不变,而另外若干位取反;4)TEST:用来检测某些位是否为1,但又不改变原操作数值.例:MOV AL,34H ;AL=00110100B 11001111BANDAL,CFH ;AL=00000100BMOVAL,41H ;AL=01000001B 00100000BORAL,20H ;AL=01100001BMOV AL,34H ;AL=00110100B 00001111BXORAL,0FH ;AL=00111011B2/5/20237移位指令移位指令使操作数中的所有各位向左或向右移若干位,所移动的位数由记数值CNT确定。当只移1位时CNT为立即数1,若移多位,则将移位个数置于CL寄存器中。移位(含循环移位)指令对状态位的影响是:CF位根据指令规则设置;OF位只有当CNT=1时有效,在移位后最高有效位的值发生变化时OF置1,否则是0;SF、ZF和PF根据移位后的结果设置;而AF位的值不确定。循环移位指令不影响CF和OF以外的其他标志。2/5/20238移位指令(1)逻辑左右移与算术左右移SHLreg/mem,1/CL;逻辑左移,最高位进入CF,最低位补0SHRreg/mem,1/CL;逻辑右移,最低位进入CF,最高位补0SALreg/mem,1/CL;算术左移,最高位进入CF,最低位补0

SARreg/mem,1/CL;算术右移,最低位进入CF,最高位不变演示示意图2/5/20239移位指令的功能2/5/202310移位指令应用举例movcl,4moval,0f0h ;al=f0hshlal,1 ;al=e0h;CF=1,SF=1、ZF=0、PF=0,OF=0shral,1 ;al=70hsaral,1 ;al=38hsar

al,cl

;al=03h;CF=1,SF=0、ZF=0、PF=1

二进制数据右移1位相当于除2

左移1位相当于乘2

2/5/202311循环移位指令将操作数从一端移出的位返回到另一端形成循环,分成不带进位和带进位,分别具有左移或右移操作ROLreg/mem,1/CL ;不带进位循环左移RORreg/mem,1/CL ;不带进位循环右移RCLreg/mem,1/CL ;带进位循环左移RCRreg/mem,1/CL ;带进位循环右移示意图示意图2/5/202312带进位循环移位指令2/5/202313例:编写程序段实现AX中的内容乘10,结果存放在AX中.分析:将一个数左移一位,相当于乘2,则

X*10=X*8+X*2程序: XOR AH,AH SHL AX,1 ;2X MOV BX,AX ;暂存2X SHL AX,1 ;4X SHL AX,1 ;8X ADD AX,BX ;8X+2X2/5/202314例:编写程序段将DX,AX中的32位二进制数左移一位。程序一

SHL AX,1 SHL DX,1程序二

SHL AX,1 RCL DX,1思考:编写程序段把DX和AX中的双字右移四位。2/5/2023153.2.4串操作指令串:字节或字的序列,在内存中占用连续存储单元。特点:1)每条串指令有以字和字节形式来做重复处理2)成对使用ES:DI或DS:SI寄存器,DS:SI指向源串,ES:DI指向目的串3)指令自动调整SI和DI的值,但按增量还是按减量修改,取决于标志位DF4)方向标志DF控制操作方向,DF=1,减址;DF=0,增址5)任何一个串操作指令,可以在前面加上一个重复操作前缀,于是指令就重复执行,直至在寄存器CX中的操作次数满足要求为止。2/5/202316(1)MOVS(MoveString)

功能:把由SI作为指针的源串中的一个字节或字,传送至由DI作为指针的目的串,并且相应地修改指针,以指向串中的下一个元素。操作:

MOVSB;MOVAL,[SI]MOVES:[DI],ALINCDI/DECDIINCSI/DECSIMOVSW;MOVAX,[SI]MOVES:[DI],AXADDDI,2/SUBDI,2ADDSI,2/SUBSI,2

说明:此指令对标志位无影响。2/5/202317(2)CMPS(CompareString)

功能:由SI作为指针的源串与由DI作为指针的目的串(字或字节)相比较(源串-目的串),但相减的结果只反映到标志位上,而不送至任何一个操作数。同时相应地修改源和目的串指针,指向串中的下一个元素。操作CMPSB;CMP[SI],ES:[DI]INCDI/DECDI INCSI/DECSICMPSW;CMP[SI],ES:[DI]ADDDI,2/SUBDI,2ADDSI,2/SUBSI,2说明:1)标志位A、C、O、P、S和Z反映了目的串元素和源串元素之间的关系。2)这个指令可以用来检查两个串是否相同。通常在此指令之后,应有一个条件转移指令。2/5/202318(3)SCAS(ScanString)

功能:搜索串指令,关键字放在AL(字节)或AX(字)中,操作时从AL(字节操作)或AX(字操作)的内容中减去由DI作为指针的目的串元素,结果反映在标志位上,但并不改变目的串元素以及累加器中的值。操作SCASB;CMPAL,ES:[DI] INCDI/DECDISCASW;CMPAX,ES:[DI]ADDDI,2/SUBDI,2说明:标志位A、C、O、P、S和Z中反映了在AL或AX中的搜索值与串元素之间的关系。2/5/202319(4)LODS(LoadString)功能:本指令把由SI作为指针的串元素,传送至AL(字节操作)或AX(字操作),同时修改SI指向串中的下一个元素。操作LODSB;MOVAL,[SI] INCSI/DECSILODSW;MOVAX,[SI]ADDSI,2/SUBSI,2说明:1)这个指令正常情况下是不重复执行的,因为每重复一次,累加器中的内容就要改写,只保留最后一个元素。2)此指令对标志位无影响。2/5/202320(5)STOS(StoreString)

功能:从累加器AL(字节操作)或AX(字操作)传送一个字节或字,到由DI作为指针的目的串中,同时修改DI以指向串中的下一个单元。操作STOSB;MOVES:[DI],AL;INCDI/DECDISTOSW;MOVES:[DI],AX;ADDDI,2/SUBDI,2说明:1)可以在串中建立一串相同的值,初始化字符串单元。2)此指令对标志位无影响。2/5/202321(6)重复前缀

1)REP

(1)操作:判断CX是否为0,若为0,结束;否则CX减1,重复其后的串操作

(2)用在指令MOVS和STOS之前

MOV CX,100MOV CX,100

NEXT: MOVSBREP MOVSB

LOOP NEXT

2/5/202322(6)重复前缀

2)REPZ/REPE

(1)操作:判断CX=0或ZF=0,若CX为0或不等,结束;否则CX减1,重复其后的串操作

(2)用在指令CMPS和SCAS之前

3)REPNE/REPNZ

(1)操作:判断CX=0或ZF=1,若CX为0或相等,结束;否则CX减1,重复其后的串操作

(2)用在指令SCAS之前2/5/202323例:将数据段中从AREA1开始存放的100个字节数搬到附加段以AREA2为首址的区域中。方法一:采用MOV指令 例方法二:采用MOVS指令 例方法三:采用重复前缀串指令例2/5/202324方法一:

LEA SI,AREA1 LEA DI,AREA2 MOV CX,100AGAIN: MOV AL,[SI] MOV ES:[DI],AL INC SI INC DI DEC CX JNZ AGAIN

返回2/5/202325方法二: MOV SI,OFFSETAREA1 MOV DI,OFFSETAREA2 MOV CX,100 CLDAGAIN: MOVSB DEC CX JNZ AGAIN

返回2/5/202326方法三:

LEA SI,AREA1 LEA DI,AREA2 MOV CX,100 CLD REP MOVSB

返回2/5/202327例2:数据块移动,从AREA1送到AREA2情况一:源串首地址<目的串首地址,且无重叠情况二:源串首地址>目的串首地址,且无重叠情况三:源串首地址<目的串首地址,且重叠情况四:源串首地址>目的串首地址,且重叠2/5/202328只能以减址方式传送

STD LEA SI,AREA1+N-1 LEA DI,AREA2+N-1 MOV CX,N REP MOVSB2/5/202329

只能以增址方式传送

CLD LEA SI,AREA1 LEA DI,AREA2 MOV CX,N REP MOVSB 2/5/202330例:编写程序比较

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论