《x指令系统》PPT课件.ppt

上传人:cl****1 文档编号:576969778 上传时间:2024-08-20 格式:PPT 页数:31 大小:618KB
返回 下载 相关 举报
《x指令系统》PPT课件.ppt_第1页
第1页 / 共31页
《x指令系统》PPT课件.ppt_第2页
第2页 / 共31页
《x指令系统》PPT课件.ppt_第3页
第3页 / 共31页
《x指令系统》PPT课件.ppt_第4页
第4页 / 共31页
《x指令系统》PPT课件.ppt_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《《x指令系统》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《x指令系统》PPT课件.ppt(31页珍藏版)》请在金锄头文库上搜索。

1、第4章 80x86指令系统 三、逻辑类指令 1. 逻辑运算指令逻辑运算指令 运算规则:按位操作,无进运算规则:按位操作,无进/ /借位借位 对标志位的影响对标志位的影响( (除除NOTNOT指令外指令外) ): CF OF SF ZF PF AF 0 0 * * * 无定义无定义 根据运算结果设置根据运算结果设置第4章 80x86指令系统 “与与”运算指令运算指令格式格式:AND dst, src“或或”运算指令运算指令格式:格式: OR dst, src“非非”运算指令运算指令格式:格式:NOT opr“异或异或”运算指令运算指令格式:格式:XOR dst, src测试指令测试指令格式:格式

2、:TEST dst, src说明:说明:TEST相当于相当于AND运算,但是运算,但是不保存结果,仅影响标志。不保存结果,仅影响标志。第4章 80x86指令系统 (1) 逻辑逻辑”与与” AND对两个操作数进行按位逻辑对两个操作数进行按位逻辑“与与”操作。操作。格式:格式:AND dest, src用途:保留操作数的某几位,清零其他位。用途:保留操作数的某几位,清零其他位。例例1:保留:保留AL中低中低4位,高位,高4位清位清0。 AND AL, 0FH例例2:AL中有字符中有字符az, 将其转换成大写。将其转换成大写。(a=61h, A=41h) AND AL, 01001111B第4章 8

3、0x86指令系统 例:测试例:测试AL的的bit7,bit5,bit2是否都是是否都是1。AND AL, 10100100BCMP AL, 10100100B JZ YES ; if match, go to YES ; if not match YES: ; goes here if all 1 第4章 80x86指令系统 对两个操作数进行按位逻辑对两个操作数进行按位逻辑”或或”操作。操作。格式:格式:OR dest, src用途:对操作数的某几位置用途:对操作数的某几位置1;对两操作数;对两操作数 进行组合。进行组合。例例:把AL中的非压缩BCD码变成相应十进制 数的ASCII码。 OR

4、AL, 30H(2) 逻辑逻辑”或或” OR第4章 80x86指令系统 例:例:把AH和AL中的非压缩BCD码组合成压 缩的BCD码, 放到AL中。 MOV CL, 4 SHL AH, CL OR AL, AH例:把例:把AL的第5位置为1 OR AL, 00100000B第4章 80x86指令系统 对操作数进行按位逻辑对操作数进行按位逻辑”非非”操作。操作。格式格式:NOT mem/reg例:NOT CX NOT BYTE PTR DI(3) 逻辑逻辑“非非”(取反取反) NOT第4章 80x86指令系统 对两个操作数按位进行”异或”操作。格式:XOR dest, src用途:对reg清零(

5、自身异或) 把reg/mem的某几位变反(与1异或) 例:把AX寄存器清零。 例2:把DH的bit4,3变反 MOV AX,0 XOR DH,18H XOR AX,AX AND AX,0 SUB AX,AX (4) 逻辑逻辑”异或异或” XOR 第4章 80x86指令系统 操作与AND指令类似,但不将”与”的结果送回,只影响标志位。TEST指令常用于位测试,与条件转移指令一起用。例:测试AL的内容是否为负数。 TEST AL,80H ;检查AL中D7=1? JNZ MINUS ;是1(负数),转MINUS ;否则(正数)不转移MINUS: (5) 测试指令测试指令TEST第4章 80x86指令

6、系统 逻辑运算指令常见的用法总结逻辑运算指令常见的用法总结 清进位标志位:清进位标志位: AND AX,AX 或或 OR AL,AL等等 清零操作数:清零操作数:XOR AX,AX 不仅把不仅把AX清清零,而且也影响了状态标志零,而且也影响了状态标志 把某几位取反:用把某几位取反:用XOR指令,把要取反指令,把要取反的位和的位和1异或,不变的位和异或,不变的位和0异或异或 清零或置位某几位:用清零或置位某几位:用AND指令清零,指令清零,用用OR指令置位指令置位第4章 80x86指令系统 四、串操作指令 8086808680888088指令系统中有一组十分有用的串操作指令,这些指令的操指令系统

7、中有一组十分有用的串操作指令,这些指令的操作对象不只是单个的字节或字,而是内存中地址连续的字节串或字串。在每作对象不只是单个的字节或字,而是内存中地址连续的字节串或字串。在每次基本操作后,能够自动修改地址,为下一次操作做好准备。串操作指令还次基本操作后,能够自动修改地址,为下一次操作做好准备。串操作指令还可以加上重复前缀,此时指令规定的操作将一直重复下去,直到完成预定的可以加上重复前缀,此时指令规定的操作将一直重复下去,直到完成预定的重复次数。串操作指令共有以下五条:重复次数。串操作指令共有以下五条: MOVSMOVS (Move string) (Move string) 串传送串传送CMP

8、SCMPS (Compare string) (Compare string) 串比较串比较SCASSCAS (Scan string) (Scan string) 串扫描串扫描LODSLODS (Load from string) (Load from string) 从串中取数据从串中取数据STOSSTOS (Store in to string) (Store in to string) 存数据到串中存数据到串中第4章 80x86指令系统 串操作指令功能说明串操作指令功能说明 MOVS指令指令MOVSB 或或 MOVSW 以字节或字为单位在存储以字节或字为单位在存储单元之间传送数据单元之

9、间传送数据可以使用可以使用REP前缀前缀 LODS指令指令LODSB 或或 LODSW 从内存中取出字节或字到累从内存中取出字节或字到累加器加器AL或或AX可以使用可以使用REP前缀,但意义不大前缀,但意义不大。第4章 80x86指令系统 STOS指令指令STOSB 或或 STOSW 从累加器中存字节或字从累加器中存字节或字到存储器到存储器可以使用可以使用REP前缀前缀 CMPS指令指令CMPSB 或或 CMPSW 以字节或字为单位进以字节或字为单位进行两个存储器操作数的比较行两个存储器操作数的比较可以使用可以使用REPE/REPZ前缀前缀用源操作数用源操作数-目的操作数目的操作数第4章 80

10、x86指令系统 SCAS指令指令SCASB 或或 SCASW 在数据串中查找在数据串中查找AL或或AX中的内容。中的内容。可以使用可以使用REPNE/REPNZ前缀前缀 第4章 80x86指令系统 表4.9 串操作指令指令类型指令格式操作功能对标志的影响O OS SZ ZA AP PC C串传送指令MOVS Dstring, SstringMOVSBMOVSW(ES):(DI)(DS):(SI)(SI) (SI)1 或 (SI) (SI)2(DI) (DI)1 或 (DI) (DI)2串装入指令LODS SstringLODSBLODSW(AL)/(AX) (DS):(SI)(SI) (SI)

11、1 或 (SI) (SI)2串保存指令STOS DstringSTOSBSTOSW(ES):(DI) (AL)/(AX) (DI) (DI)1 或 (DI) (DI)2串比较指令CMPS Sstring, DstringCMPSBCMPSW(DS):(SI)(ES):(DI)(SI) (SI)1 或 (SI) (SI)2(DI) (DI)1 或 (DI) (DI)2串扫描指令SCAS DstringSCASBSCASW(AL)(ES):(DI)(DI) (DI)1 或 (DI) (DI)2指令重复前缀REPREPE/REPZREPNE/REPNZ(CX)0 时重复=不为零时重复(CX)0 且

12、(ZF)1 时重复=不为零且相等时重复(CX)0 且 (ZF)0 时重复=不为零且不相等事重复第4章 80x86指令系统 字符串操作指令的基本操作各不相同,但都具有以下几个共同特点:字符串操作指令的基本操作各不相同,但都具有以下几个共同特点: 总是用SI寄存器寻址源操作数,用DI寄存器寻址目的操作数。源操作数常存放在现行的数据段,隐含段寄存器DS,但也允许段超越。目的操作数总是在现行的附加数据段,隐含段寄存器ES,不允许段超越。 每一次操作以后修改地址指针,是增量还是减量取决于方向标志DF。当(DF)=0时,地址指针增量,即字节操作时地址指针加1,字操作时地址指针加2。当(DF)=1时,地址指

13、针减量,即字节操作时地址指针减1,字操作是地址指针减2。 有的串操作指令可加重复前缀,指令按规定的操作重复进行,重复操作的次数由CX寄存器决定。 若串操作指令的基本操作影响零标志ZF(如CMPS、SCAS),则可加重复前缀REPEREPZ或REPNEREPNZ,此时操作重复进行的条件不仅要求(CX)0,而且同时要求ZF的值满足重复前缀中的规定(REPE/REPZ要求(ZF)=1,REPNE/REPNZ要求(ZF)=0)。 串操作汇编指令的格式可以写上操作数,也可以只在指令助记符后加上字母“B”(字节操作)或“W”(字操作)。加上字母“B”或“W”后,指令助记符后面不允许再写操作数。第4章 80

14、x86指令系统 串指令使用的一般方法串指令使用的一般方法设置源串地址设置源串地址设置目标串地址设置目标串地址设置串长度设置串长度设置操作方向设置操作方向DF串指令串指令MOV SI, 源串首地址源串首地址(或(或LEA SI, 源串)源串)MOV DI, 目的串首地址目的串首地址(或(或LEA DI, 目的串)目的串)MOV CX, 串长度串长度CLD(或(或STD)具体串指操作指令,如具体串指操作指令,如MOVSB/W第4章 80x86指令系统 data1 segment string1 db 1,2,3,4,5,6,7,8,9,10data1 endsdata2 segment strin

15、g2 db 10 dup (1)data2 endscode segment assume cs:code,ds:data1,es:data2 start: mov ax,data1 mov ds,ax mov ax,data2 mov es,axLEASI,BUFFER1;(SI)源串首地址指针源串首地址指针LEADI,BUFFER2 ;(DI)目的串首地址指针目的串首地址指针MOVCX,200 ;(CX)字节串长度字节串长度CLD ;清方向标志;清方向标志DFREPMOVSB ;传送;传送200个字节个字节 mov ah,4ch int 21hcode ends end start串传送指

16、令MOVSB / MOVSW例例4.10 将数据段中首地址为BUFFER1的200个字节传送到附加数据段首地址为BUFFER2的内存区中。Li410.asm第4章 80x86指令系统 执行的操作为: LODS指令是将一个字符串(源串,缺省在数据段中)指令是将一个字符串(源串,缺省在数据段中)中的字节或字逐个装入累加器中的字节或字逐个装入累加器AL或或AX。 对字节:(AL)(DS):(SI) SI1 对字:(AX)(DS):(SI+1)(SI) SI2 串装入指令通常不加重复前缀。LODSB等价于: LODSW等价于: MOV AL,SIMOV AL,SI MOV AX,SI MOV AX,S

17、I INC SI INC SIINC SI INC SI INC SI INC SI 2.串装入指令LODSB / LODSW第4章 80x86指令系统 例例4.11 内存中以BUFFER为首址的缓冲区内有10个非压缩型BCD码形式存放的十进制数,它们的值可能是09中的任意一个,将这些十进制数顺序显示在屏幕上。 在屏幕上显示一个字符的方法(详见本书第五章第5.4节的DOS系统功能调用部分)是: MOVAH,02H;(AH)DOS系统功能号(在屏幕上显示一个字符) MOVDL,Y ;(DL)待显示字符Y的ASCII码值 INT21H ;调用DOS的21H中断 根据题意可编程如下: LEASI,B

18、UFFER;(SI)缓冲区首址 MOV CX,10 ;(CX)字符串长度 CLD ;清状态标志位DF MOV AH,02H ;(AH)功能号 GET: LODSB ;取一个BCD码到AL ORAL,30H ;BCD码转换为ASCII码 MOVDL,AL ;(DL)字符的ASCII码 INT 21H ;显示 DECCX ;(CX)(CX)-1 JNZ GET ;未完成10个字符则重复 Li411.asm第4章 80x86指令系统 指令的操作为:将累加器AL或AX的值送存到内存缓冲区(目的串,缺省在附加数据段中)的某个位置上 对字节:(ES):(DI)(AL) DI1 对字:(ES):(DI+1)

19、(DI)(AX) DI2本指令用于把一块存储区域填充成某一初始值(即对存储区进行初始化)。存储区域的首地址要预先设置到ES:DI中。要存储到串中的数据要预先存到AL(AX)中。3.串存储指令STOSB / STOSW第4章 80x86指令系统 例例4.12 将字符装入以AREA为首址的100个字节中。 LEADI,AREA MOVAX,# MOV CX,100 CLD REP STOSW HLTLi412.asm第4章 80x86指令系统 例例4.13 一个数据块由大写或小写的英文字母、数字和各种其它符号组成,其结束符是回车符CR(ASCII码为0DH),数据块的首地址为BLOCK1。将数据块

20、传送到以BLOCK2为首地址的内存区,并将其中所用的英文小写字母()转换成相应的大写字母(),其余不变。 前面已经讨论过英文小写字母与相应的大写字母的ASCII码之间有一定的关系,即只需将小写字母的ASCII码减20H,即可得到相应大写字母的ASCII码。程序见下: 第4章 80x86指令系统 data segment block1 db 123+-*/wW4AaBbCc!$ db $Dd#HhJjkKlL,0dh data ends edata segment block2 db 100 dup (*) edata ends code segment assume cs:code,ds:da

21、ta,es:edata start: mov ax,data mov ds,ax mov ax,edata mov es,ax Li413.asm lea si,block1 lea di,block2 cld next: lodsb cmp al,0dh jz done cmp al,61h ;cmp al,a jc ok cmp al,7bh ;cmp al,z jnc ok sub al,20h ok: stosb jmp next done: mov ah,4ch int 21h code ends end start第4章 80x86指令系统 4.串比较指令CMPSB / CMPSW

22、指令执行的操作为:将两个字符串中相应的元素逐个进行比较(即相减),但不将比较结果送回目的操作数,而反映在状态标志位上。 CMPSB: (DS):(SI)-(ES):(DI) SISI1, DI1, DI1 1 CMPSW: (DS):(SI+1)(SI)-(ES):(DI+1)(DI) SISI2, DI2, DI2 2 指令也可写成:指令也可写成:CMPS CMPS destdest, , srcsrc比较的结果只反映在标志位上,串本身无变化。本指令可用来检查两个串是否相等。第4章 80x86指令系统 data segment string1 db THIS IS TO COMPARE TH

23、E db TWO STRINGS! letternum dw $-string1 data ends edata segment string2 db THIS IS tO COMPARE THE db TWO STRINGS!edata endscode segment assume cs:code,ds:data,es:edata start: mov ax,data mov ds,ax mov ax,edata mov es,ax Li414.asm lea si,string1 lea di,string2 mov cx,letternum cld repe cmpsb jcxz al

24、lmatch dec si dec di allmatch: mov ah,4ch int 21h code ends end start 第4章 80x86指令系统 5.串扫描SCASB / SCASW执行的操作:在一个字符串中搜索特定的关键字。字符串的起始地址只能放在(ES:DI)中,不允许段超越 对字节:(AL)(ES):(DI) DI1 对字: (AX)(ES):(DI1)(DI) DI2搜索指令执行的仍是比较(减法)操作,结果只影响标志位。要搜索的关键字放在AL(字节)或AX(字)中。本指令用于在串中查找指定的信息。第4章 80x86指令系统 SCASSCAS指令加上重复前缀后指令加

25、上重复前缀后, ,可对串可对串进行连续扫描比较:若前缀为REPZ,则表示比较结果相等且(ZF=1)且串未结束(CX0),则继续比较。若前缀为REPNZ,则表示比较结果不相等(ZF=0)且串未结束(CX0)就继续比较。第4章 80x86指令系统 例:在ES段的偏移1000H开始处存有10个ASCII码。搜索E,若找到则记下搜索次数及存放地址,并在屏幕上显示Y;若未找到则显示N。(见右图)在屏幕上显示一个字符的在屏幕上显示一个字符的指令段如下:指令段如下:(参见附录参见附录C.3) MOV DL, MOV AH,2 INT 21H 实现题目要求的程序段见下页:1000H414243444546AB

26、CDF. .ES段E第4章 80x86指令系统 edata segment string db 123pppeewqL db 0dh,owe123 letternum equ $-string edata ends code segment assume cs:code,es:edata start: mov ax,edata mov es,ax Li415.asm lea di,string mov al,0dh mov cx,letternum cld repne scasb jz match mov dl,N jmp dspy match: dec di mov dl,Y dspy: mov ah,02h int 21h mov ah,4ch int 21hcode ends end start第4章 80x86指令系统 关于串操作指令的重复前缀、操作数以及地址指针所用的寄存器等情况归纳如表4.10所示。表4.10 串操作指令的重复前缀、操作数和地址指针指令重复前缀操作数地址指针寄存器MOVSREP目的,源ES:DI,DS:SILODS无源DS:SISTOSREP目的ES:DICMPSREPE/REPNE源,目的DS:SI,ES:DISCASREPE/REPNE目的ES:DI

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号