汇编语言系列课件第一章(考试重点在里面)第7讲56512_第1页
汇编语言系列课件第一章(考试重点在里面)第7讲56512_第2页
汇编语言系列课件第一章(考试重点在里面)第7讲56512_第3页
汇编语言系列课件第一章(考试重点在里面)第7讲56512_第4页
汇编语言系列课件第一章(考试重点在里面)第7讲56512_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

1、15.6 逻辑操作指令1. NOT (not,or form 1s complement) 取反2. AND (and,logical conjunction) 逻辑与3. OR (or,inclusive)逻辑或4. XOR (exclusive or) 异或5. TEST (test,or logical compare) 测试21. NOT 取反取反指令汇编格式: NOT dest操作: 将操作数的每一位求反,然后将结果回送到对应位中。可以是8位、16位寄存器或存储器操作数。 destdest 受影响的状态标志位: 没有说明: NOT指令常用来将某个数据取成反码,再加上1得到补码。例:

2、NOT AX NOT WORD PTR BX+SI+1000HNOT BYTE PTR BX+SI+1000H32. AND 逻辑与逻辑与指令汇编格式: AND dest,src操作: 两个操作数进行逻辑 “与”,即如果两个操作数的对应位都为1时,结果的对应位才为1, 否则结果的对应位为0。 dest(dest)(src), CF0,OF0受影响的状态标志位: OF,SF,ZF,AF,PF,CF说明: AND指令可借助某个给定的操作数将另一个操作数中的某些位清零(这种操作也称设置屏蔽),使某些位保持不变,这个数通常称为掩码。例如,将一个源操作数与00001111B 相“与”,可将这个源操作数的

3、高尼伯变为0,而低尼伯保持不变。例:AND AL,0FH AND AX,BX43. OR 逻辑或逻辑或指令汇编格式: OR dest,src操作: 两个操作数进行逻辑“或”操作,即当两个操作数的对应位都为0时结果的对应位为0,否则结果的对应位为1,结果存入目标操作数中,CF和OF位置0。dest(dest)(src), CF0,OF0受影响的状态标志位: OF,SF,ZF,AF,PF,CF说明: OR指令可用来使操作数中的某些位置位,某些位保持不变。例如,用10000000B与一个 字节操作数相“或”,可使这个字节操作数的最高有效位为1。例: OR AL,0FH OR AX,BX+DI+105

4、4. XOR 异或异或指令汇编格式: XOR dest,src操作: 两个操作数执行逻辑“异或”操作,即当两个操作数的对应位相同时,结果的对应位为0; 否则结果的对应位为1。结果存入目标操作数中,CF和OF位置0。 dest(dest) (src), CF0,OF0受影响的状态标志位: OF,SF,ZF,AF,PF,CF说明:XOR指令可用来使操作数中的某些位取反,某些位不变。例: XOR AL,0FH XOR AX,AX65. TEST 测试测试指令汇编格式: TEST dest,src操作: 将两个操作数进行逻辑“与”,根据结果设置状态标志位,但不改变两个操作数的原始值,并将CF和OF清除

5、。 (dest)(src), CF0,OF0受影响的状态标志位: OF,SF,ZF,AF,PF,CF说明: TEST指令通过 “与” 的方式对两个源操作数进行比较,但不保留 “与” 的结果。75.7 移位操作指令 移位指令共有7条,可以对字节或字操作数移位。分别为:n 逻辑移位(SHL,SHR)n 算术移位(SAL, SAR) n 不带进位循环移位 (ROL,ROR) 带进位循环移位(RCL,RCR)非循环移位指令非循环移位指令循环移位指令循环移位指令8指令汇编格式: 逻辑移位指令 dest,cnt说明: ndest可以是8位或者16位的寄存器或者存储器操作数,cnt为移位次数。移位操作是将目

6、标操作数移动cnt次。cnt可以为1,超过1位必须用CL存放移位次数。nSHL/SAL,SHR,SAR 影响CF,OF,PF,SF,ZF; nROL, ROR,RCL,RCR 仅影响CF和OF位。执行移位指令时,一位一位移,如果过程中源操作数的最高位 (符号位) 曾经发生改变,那么OF就被置1,否则,OF就被置0。左移时,最高位送入CF,右移时,最低位送入CF。CF的值总是最后一次被移入的值。9移位循环逻辑算术不带进位带进位左右CFdest0CFdest0CFdestCFdest0CFdestCFdestCFdestCFdestSHLSALRCLROLSHRSARRCRRORRotate Sh

7、ift Left RightSHR AX,1 ROR BYTE PTR BX,CL10例题例题1MOV AL , 0ABH MOV CL , 4 ROL AL , CL ;移出位补充移空位4次将寄存器AL中高、低4位交换11例题例题2将AX中的内容按相反顺序存入BX中。 MOV AX , 1234H MOV CX , 16AA1: SHL AX , 1 ;移出的位进到CF RCR BX , 1 ;AX中移出的位进入BX LOOP AA112例题例题3 设内存DATA单元存放一个无符号字节数据,编制程序将其拆成两位十六进制数, 并存入HEX和HEX+1单元,HEX的低4位存放高位十六进制数,高4

8、位用0填充,HEX+1的低4位存放低位十六进制数,高4位用0填充。DATA 0B5H HEX 0BH 05H 13CSEG SEGMENTASSUME CS:CSEG,DS:DSEGSTART: MOV AX,DSEG MOV DS,AX MOV AX,4C00H INT 21HCSEG ENDS END STARTDSEG SEGMENTDATA DB0B5HHEXDB0,0DSEG ENDSMOV AL,DATA ;取数据MOV AH,AL ;保存副本 AND AL,0F0H ;截取高4位MOV CL,04 SHRAL,CL ;移至低4位MOV HEX,ALANDAH,0FH ;截取低4位

9、MOV HEX+1,AH145.8 状态标志位操作指令 8086/8088有7条状态标志位控制指令,它们可以直接和独立地对8086CPU中的某一状态标志位进行控制,用来设置或改变状态标志位的状态。 CFDFIF清0置1取反CLCSTCCMCCLDSTDCLISTI155.11 简单的I/O功能调用n 设置断点n DOS功能调用16调用方法: INT 3功能: 停止程序运行,返回DEBUG入口条件: 无出口条件: 无说明:欲使程序结束运行从而检查运行结果时,则不应退出DEBUG,这时使用本功能。在以后上机实验时,多数是使用本功能来结束程序运行。设置断点设置断点17DOS功能调用功能调用 DOS不

10、仅为用户提供了许多使用的命令,还提供了上百个常用的子程序。对这些子程序的调用,称为系统功能调用(实际是中断指令INT 21H)。主要包括磁盘读写、控制管理、内存管理、基本的I/O管理等。 所有子程序从1号开始顺序编号,称为DOS功能调用号。18DOS功能调用的过程功能调用的过程调用过程为: DOS功能调用号送AH寄存器; 如果需要,按要求给定入口条件(有的不需要入口条件); 写入中断指令INT 21H。调用结束,按功能使用其出口条件。19DOS功能调用功能调用1、单字符键盘输入-1号功 能:从键盘上接收一个字符,并在屏幕上显示出来入口条件:无出口条件:AL=ASCII码调用方法:MOV AH,

11、1INT 21H20DOS功能调用功能调用2、单字符显示器输出-2号功 能:在屏幕上光标处显示1个字符入口条件:要显示的字符的ASCII码在DL中出口条件:无调用方法:MOV AH,2MOV DL,AINT 21H21DOS功能调用功能调用3、程序结束退出-4CH号功能: 结束程序运行,将控制权交给调用它的程序入口条件: AL=返回码出口条件: 无调用方法: MOV AH,4CHMOV AL,0INT 21H欲使程序结束运行时,使用本功能。22DOS功能调用功能调用4、多字符输入0AH号 功 能:多个字符输入到缓冲区,以回车结束 入口条件:DS:DX输入缓冲区首地址 出口条件:DS:DX输入字

12、符串所在缓冲区首地址注意:n缓冲区第1字节存放预定字符个数,最多255个n缓冲区第2字节保留,用于调用返回时存放实际输入的字符个数n缓冲区第3字节开始,存放输入的字符n缓冲区要考虑留1个字节作为回车符DSEG SEGMENTBUF DB 50 DUP (0)DSEG ENDSCSEG SEGMENT ASSUME CS:CSEG,DS:DSEGSTART:MOV AX,DSEG MOV DS,AX LEA DX,BUF MOV BUF,20 MOV AH,0AH INT 21HCSEG ENDS END START23DOS功能调用功能调用5、多字符输出9号功 能:多个字符输出到屏幕显示入口条

13、件:DS:DX输出字符缓冲区首地址出口条件:无注意:该功能对输出字符的个数没有要求,但输出字符串要以$结束245.12 顺序结构程序举例例例5.15.1 计算y=-x。设x为三个字节长的数据,存于DATA1开始的单元。结果存入DATA2开始的单元。计算-x,就是对x取补。25 一个数据取补,就是将这个数据包括符号位在内取反加1,或者用0 减去这个数据。带符号数据在机内用补码形式表示时,若原数据为负数,经取补操作后变为其绝对值,若原数据为正数,经取补操作后变为绝对值与其相等的负数。 取补与补码是两个不同的概念,一个数据的补码,是用补码形式表示这个数据,当数据为正时,它的补码就是数据本身; 当数据

14、为负时,把其原码表示形式除符号位外取反加1,或者将其绝对值进行取补所得结果为其补码。例如,用一个字节(8位二进制位) 表示数据已知: N1=00000101,取补后N1=11111011 N2=11111011,取补后N2=00000101取补的概念取补的概念:26将数据分为三种情况将数据分为三种情况:(1) 最低字节不为最低字节不为0时时,将最低字节取补,高、中字节取反; NOT,NOT,NEG例如: 01001100 00111100 00010000按位取反后:10110011 11000011 11101111再+1: 10110011 11000011 11110000(2) 最低字

15、节为最低字节为0,中间字节非中间字节非0,则中间节和低字节取补,高字节取反; NOT,NEG,NEG(3) 中间字节与低字节均为中间字节与低字节均为0 时,3个字节均取补。 NEG,NEG,NEG分析分析27(1) 最低字节取补;(2) 进位取反;(3) 中间字节取反,取反的结果加进位;(4) 高字节取反,取反结果加进位。算法算法(1) 最低字节取补;(2) 进位取反;(3) 中间字节取反,取反的结果加进位;(4) 高字节取反,取反结果加进位。低字节不为0低字节为0,中字节不为0中低字节为0,高字节不为0NEG ,CF=1CF=0NOT+0CF=0NOT+0NEG ,CF=0CF=1NOT+1

16、=NEGCF=0NOT+0NEG ,CF=0CF=1NOT+1=NEGCF=1NOT+1=NEG1: ;*EXAM 5.1.1* 2: SSEGSEGMENT STACK ;堆栈段堆栈段3: STK DB 20 DUP(0)4: SSEG ENDS5: DSEG SEGMENT ;数据段数据段6: DATA1 DB 35H,26H,03H ;(032635H)7: DATA2 DB 3 DUP(0)8: DSEG ENDS9: CSEG SEGMENT ;代码段代码段 10: ASSUME CS:CSEG,DS:DSEG11: ASSUME SS:SSEG12: MBNEG: MOV AX,D

17、SEG ;段寄存器初值段寄存器初值13: MOV DS,AX14: MOV AX,SSEG15: MOV SS,AX16: MOV SP,SIZE STK ;设置堆栈指针设置堆栈指针17: MOVAL,DATA1 ;读入数据低字节读入数据低字节 18: MOVAH,DATA1+1 ;读入数据中字节读入数据中字节19: MOVBL,DATA1+2 ;读入数据高字节读入数据高字节 20: NEGAL ;取补低字节取补低字节21: CMC;进位取反进位取反22: NOTAH ;中字节取反中字节取反23: ADCAH,0 ;加进位加进位24: NOTBL ;高字节取反高字节取反25: ADCBL,0

18、;加进位加进位 26: MOVDATA2,AL ;保存结果保存结果 27: MOVDATA2+1,AH28: MOVDATA2+2,BL29: MOVAX,4C00H30: INT21H31: CSEGENDS32: ENDMBNEG17: MOVAL,DATA1 ;读入数据低字节读入数据低字节 18: MOVAH,DATA1+1 ;读入数据中字节读入数据中字节19: MOVBL,DATA1+2 ;读入数据高字节读入数据高字节 20: NEGAL ;取补低字节取补低字节21: CMC;进位取反进位取反22: NOTAH ;中字节取反中字节取反23: ADCAH,0 ;加进位加进位24: NOT

19、BL ;高字节取反高字节取反25: ADCBL,0 ;加进位加进位 26: MOVDATA2,AL ;保存结果保存结果 27: MOVDATA2+1,AH28: MOVDATA2+2,BL29: MOVAX,4C00H30: INT21H31: CSEGENDS32: ENDMBNEGMOVAX,WORD PTR DATA1MOVWORD PTR DATA2,AX17: LEASI,DATA1;取原数据首址取原数据首址18: LEADI,DATA2;取存放结果首址取存放结果首址19: MOVAX,SI ;读入数据中低字节读入数据中低字节20: NEGAX21: CMC22: INCSI;地址指

20、针增量地址指针增量23: INCSI24: MOVBL,SI;读入数据高字节读入数据高字节25: NOTBL26: ADCBL,027: MOVDI,AX ;存放结果中低字节存放结果中低字节28: INCDI 29: INCDI 30: MOVDI,BL ;存放结果高字节存放结果高字节 31: MOVAX,4C00H33: INT21H33: CSEGENDS34: ENDMBNEG 使用寄存器间接寻址方式使用寄存器间接寻址方式SIDI17: LEASI,DATA1;取原数据首址取原数据首址18: LEADI,DATA2;取存放结果首址取存放结果首址19: MOVAX,SI ;读入数据中低字节

21、读入数据中低字节20: NEGAX21: CMC22: INCSI;地址指针增量地址指针增量23: INCSI24: MOVBL,SI;读入数据高字节读入数据高字节25: NOTBL26: ADCBL,027: MOVDI,AX ;存放结果中低字节存放结果中低字节28: INCDI 29: INCDI 30: MOVDI,BL ;存放结果高字节存放结果高字节 31: MOVAX,4C00H33: INT21H33: CSEGENDS34: ENDMBNEG 使用寄存器间接寻址方式使用寄存器间接寻址方式ADD SI,2?ADD DI,2SIDI?17: LEASI,DATA1;取原数据首址取原数

22、据首址18: LEADI,DATA2;取存放结果首址取存放结果首址19: MOVAX,SI ;读入数据中低字节读入数据中低字节20: NEGAX21: CMC22: INCSI;地址指针增量地址指针增量23: INCSI24: MOVBL,SI;读入数据高字节读入数据高字节25: NOTBL26: ADCBL,027: MOVDI,AX ;存放结果中低字节存放结果中低字节28: INCDI 29: INCDI 30: MOVDI,BL ;存放结果高字节存放结果高字节 31: MOVAX,4C00H33: INT21H33: CSEGENDS34: ENDMBNEG 使用变址寻址方式使用变址寻址

23、方式MOV BL,SI+2MOV DI+2,BLSIDI17: LEASI,DATA1;取原数据首址18: LEADI,DATA2;取存放结果首址19: MOVAX,SI ;读入数据中低字节20: NEGAX21: CMC24: MOVBL,SI+2;读入数据高字节25: NOTBL26: ADCBL,027: MOVDI,AX ;存放结果中低字节30: MOVDI+2,BL ;存放结果高字节 31: MOVAX,4C00H33: INT21H33: CSEGENDS34: ENDMBNEG使用变址寻址方式(使用变址寻址方式(DI=SI+3)MOV SI+3,AXMOV SI+5,BLSIDI

24、3617: LEASI,DATA1;取原数据首址取原数据首址18: MOV AX,0 ;AX清清019: SUB AX,SI20: MOV SI+3,AX21: MOV BL,0;读入数据高字节读入数据高字节22: SBBBL,SI+223: MOV SI+5,BL ;存放结果高字节存放结果高字节 24: MOV AX,4C00H25: INT21H26: CSEG ENDS27: ENDMBNEG换个算法(换个算法(0-X)SIDI3717: LEASI,DATA1;取原数据首址取原数据首址18: MOV AX,0 ;AX清清019: SUB AX,SI20: MOV SI+3,AX21:

25、MOV BL,0;读入数据高字节读入数据高字节22: SBBBL,SI+223: MOV SI+5,BL ;存放结果高字节存放结果高字节 24: MOV AX,4C00H25: INT21H26: CSEG ENDS27: ENDMBNEGXOR AX,AXXOR BL,BL换个算法(换个算法(0-X)SIDI3817: LEASI,DATA1;取原数据首址取原数据首址18: MOV AX,0 ;AX清清019: SUB AX,SI20: MOV SI+3,AX21: MOV BL,0;读入数据高字节读入数据高字节22: SBBBL,SI+223: MOV SI+5,BL ;存放结果高字节存放

26、结果高字节 24: MOV AX,4C00H25: INT21H26: CSEG ENDS27: ENDMBNEGXOR AX,AXXOR BL,BL换个算法(换个算法(0-X)SIDI3BYTE, 4T2BYTE,3T2BYTE, 4T2BYTE,3T3917: MOVAX,WORD PTR DATA1 19: SUB WORD PTR DATA2,AX20: MOV AL,DATA1+221: SBBDATA2+2,AL24: MOVAX,4C00H25: INT21H26: CSEGENDS27: ENDMBNEG换个算法(换个算法(0-X, 利用结果单元已经是利用结果单元已经是0)40

27、例例5.55.5 用查表的方法将HEX单元中低4位十六进制数转换为对应的ASCII码,并显示出来。09: +30H AF: +37H411: ;*EXAM 5.5.1*2: SSEG SEGMENTSTACK3: STK DB20 DUP (0)4: SSEG ENDS5: DSEG SEGMENT6: HATAB DB30H,31H,32H,33H,34H7: DB35H,36H,37H,38H,39H8: DB41H,42H,43H,44H,45H,46H9: HEX DB0CH11: DSEG ENDS12: CSEG SEGMENT13: ASSUMECS:CSEG,DS:DSEG14: ASSUMEES:DSEG,SS:SSEG15: HTOA:MOVAX,DSEG16: MOVDS,AX17: MOVA

温馨提示

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

评论

0/150

提交评论