《洪第3章 寻址方式与指系统.ppt》由会员分享,可在线阅读,更多相关《洪第3章 寻址方式与指系统.ppt(93页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第3章章 寻址方式和指令系统寻址方式和指令系统用来指挥和控制计算机完成指定操作的命令用来指挥和控制计算机完成指定操作的命令称为指令。不同的微处理器具有各自不同的称为指令。不同的微处理器具有各自不同的指令。指令。每种微处理器能够识别和执行的所有指令的每种微处理器能够识别和执行的所有指令的集合称为该微处理器的指令系集合称为该微处理器的指令系统。统。程序程序:是由一系列有序指令组成的有序集合是由一系列有序指令组成的有序集合指令通常是用英文助记符来表示指令通常是用英文助记符来表示3.1 指令格式与指令格式与寻址方式寻址方式3.1.13.1.1指令格式:指令格式:标号:操作码标号:操作码 操作数操作数
2、操作数;注释操作数;注释 操作码规定计算机所执行的操作,;操作码规定计算机所执行的操作,;操作操作数用来描述该指令的操作对象数用来描述该指令的操作对象,为参加操作为参加操作的数据或其存放的地址。的数据或其存放的地址。根据完成的命令和根据完成的命令和程序设计要求的不同,可以缺省除操作码以程序设计要求的不同,可以缺省除操作码以外的其余三项,但必须由操作码才能组成不外的其余三项,但必须由操作码才能组成不同功能的指令。同功能的指令。3.1.2 寻址方式寻址方式所谓寻址方式,就是寻找操作数或操作数所谓寻址方式,就是寻找操作数或操作数地址的方式。与数据有关的寻址方式有地址的方式。与数据有关的寻址方式有:立
3、即数寻址立即数寻址:MOV AX,2004H 寄存器寻址寄存器寻址:MOV AX,BX 直接寻址直接寻址:MOV AX,2004H 寄存器间接寻址寄存器间接寻址:MOV AX,BX 寄存寄存器相对寻址器相对寻址:MOV AX,BX+204H基址变址寻址基址变址寻址:MOV AX,BX+SI 基址变址相对寻址基址变址相对寻址:MOV AX,20BP+DI1)立即数寻址立即数寻址立即数立即数(操作数操作数)直接包含在指令中,作为指令的直接包含在指令中,作为指令的一部分存放在代码段中一部分存放在代码段中。以下均源操作数为例。以下均源操作数为例。例3-1MOV AX,2004H ;(AH)=20H,(
4、AL)=04HMOV BL,5AH ;(BL)=5AHMOV EAX,22334455H ;(EAX)=22334455H,(AX)=4455H立即数常用于给寄存器赋初值,只能作源操作数,立即数常用于给寄存器赋初值,只能作源操作数,不能作目的操作数不能作目的操作数 2)寄存器寻址寄存器寻址操作数存放在指令指定的操作数存放在指令指定的8 8位、位、1616位或位或3232位通用寄存位通用寄存器中器中。例例3-2 寄存器寻址寄存器寻址MOV AL,BL ;将将BL中的内容送入中的内容送入AL中,中,BL中的内容保持不变中的内容保持不变MOV SI,DI ;将;将DI中的内容送入中的内容送入SI中,
5、中,DI中的内容保持不变中的内容保持不变MOV EAX,EBX ;将;将EBX中的内容送入中的内容送入EAX3)直接寻址直接寻址指的是操作数在存储器中的有效地址指的是操作数在存储器中的有效地址EA内内,书写时,书写时有效地址加上中括号有效地址加上中括号例例3-3 存储器直接寻址存储器直接寻址MOV AX,1000H ;将;将DS段的段的1000H和和1001H 两个单元的内容送入两个单元的内容送入AX寄存器中寄存器中MOV EAX,ES:2000H ;将;将ES段的段的2000H2003H四个单元的内容送入四个单元的内容送入EAX寄存中,寄存中,其中其中ES为段超越前缀为段超越前缀MOV AX
6、,BUF ;将;将DS段内以有效地址段内以有效地址BUF(符号地址)起始的两个单元的内容送入符号地址)起始的两个单元的内容送入AX中中4)寄存器间接寻址寄存器间接寻址操作数的有效地址操作数的有效地址EA放在基址寄存器放在基址寄存器BX,BP,或变,或变址寄存器址寄存器SI,DI中。中。操作数的物理地址为:操作数的物理地址为:(DS)16(SI/DI/BX)或()或(SS)16(BP)例例3-4 假定(假定(DS)2000H,(,(SI)=3600H,(23600H)=6022HMOV AX,SI ;先将;先将DS中的值左移中的值左移4位,然后位,然后与与SI中的值相加,中的值相加,则则物理地址
7、是物理地址是23600H,再将该,再将该物理地址中的数据物理地址中的数据6022H送入送入AX寄存器中寄存器中例例3-5 假定(假定(SS)=3000H,(BP)=1100H,(31100H)=5E28HMOV BX,BP 例例3-6 偏移量为偏移量为32位时的寄存器间接寻址位时的寄存器间接寻址MOV EAX,DX5)寄存器相对寻址寄存器相对寻址操作数的有效地址是一个基址寄存器或变址寄存器操作数的有效地址是一个基址寄存器或变址寄存器中存放的数据加上指令给出的中存放的数据加上指令给出的8 8位或位或1616位偏移位偏移量,其量,其物理地址为:物理地址为:(DS)16(SI/DI/BX)8位或位或
8、16位偏移量位偏移量 或或(SS)16(BP)8位或位或16 位偏移量位偏移量例例3-7 假定(假定(DS)=2000H,(SS)=3000H,(SI)=3600H,(BP)=1100H,COUNT=10H,(23620H)=8A76H,(31110H)=4567H MOV AX,SI+20H MOV BX,BP+COUNT;该该指令指令书写有下面的等书写有下面的等效形式效形式:MOV BX,BP+COUNT MOV BX,COUNTBP6)基址变址寻址基址变址寻址操作数的有效地址操作数的有效地址只能只能是是一个基址寄存器和一个一个基址寄存器和一个变址寄存器的内容之和。其物理地址为:变址寄存器
9、的内容之和。其物理地址为:(DS)16(BX)()(SI/DI)或(或(SS)16+(BP)+(SI/DI)例例3-9,假定(,假定(DS)=2000H,(,(SS)3000H,(BX)=1800H,(BP)=2080H,(DI)=1000H,(SI)=0800H,(22800H)=80CFH,(32880H)=067AH MOV AX,BXDIMOV AX,BP+SI 7)基址变址相对寻址基址变址相对寻址操作数的有效地址是一个基址寄存器内容和一个变操作数的有效地址是一个基址寄存器内容和一个变址寄存器的内容和址寄存器的内容和8 8位或位或1616位偏移量相加之加,其位偏移量相加之加,其物理地址
10、为:物理地址为:(DS)16(DS)16(BXBX)+(SI/DI)+8+(SI/DI)+8位或位或1616位偏移量位偏移量(SSSS)1616(BPBP)+(SI/DI)+8+(SI/DI)+8位或位或1616位偏移量位偏移量例例3-10基址变址相对寻址基址变址相对寻址MOV AX,BX+SI+100HMOV CX,BX+SI+NUMMOV DX,SS:NUMDIBP例例3-11 32位偏移量的寄存器比例寻址位偏移量的寄存器比例寻址MOV EAX,DAT EBX+ESIMOV EAX,NUM EBP+EDI8)寄存器寄存器(变址变址)比例寻址比例寻址这种寻址方式中,形成存储器操作数的有效地址
11、采用:这种寻址方式中,形成存储器操作数的有效地址采用:(1)变址寄存器的内容乘以比例因子变址寄存器的内容乘以比例因子,再加上偏再加上偏移量移量,称为比例称为比例变址方式变址方式(2)变址寄存器的内容乘以比例因子变址寄存器的内容乘以比例因子,再加上基再加上基址寄存器的内容址寄存器的内容,称为称为基址基址比例比例变址方式变址方式。(3)变址寄存器的内容乘以比例因子变址寄存器的内容乘以比例因子,再加上基再加上基址寄存器的内容和偏移量址寄存器的内容和偏移量,称为称为基址基址比例比例变址偏移变址偏移方式。方式。MOV EAX,XEDI*4 MOV EBX,EDI*8EBX ;EA=(EDI)*8+(EB
12、X)MOV EAX,XESI*4EBP ;=(ESI)*4+(EBP)+X3.2 8086指令系统指令系统8086指令系统是指令系统是80 x86的基本指令集,的基本指令集,共有共有95条指令,条指令,按功能可以分为六种类型:按功能可以分为六种类型:数据传送指令数据传送指令算术运算指令算术运算指令逻辑运算与移位指令逻辑运算与移位指令串操作指令串操作指令控制转移指令控制转移指令处理器控制指令处理器控制指令3.2.1 数据传送指令数据传送指令数据传送指令用于寄存器,存储单元和输入数据传送指令用于寄存器,存储单元和输入输出端口之间传送数据或地址。除输出端口之间传送数据或地址。除SAHF和和POPF外
13、,对标志无影响。主要有四类:外,对标志无影响。主要有四类:1通用数据传送指令通用数据传送指令2地址传送指令地址传送指令3标志传送指令标志传送指令4输入输出指令输入输出指令1通用数据传送指令通用数据传送指令(MOV、XCHG、PUSH、POP、XLAT)(1)基本的传送指令)基本的传送指令MOV格式:格式:MOV DEST,SRCMOV AL,30H ;立即数传送到寄存器;立即数传送到寄存器MOV AL,BL ;寄存器之间传送字节数据;寄存器之间传送字节数据MOV BX+62H,SI;寄存器和存储器之间传送数据;寄存器和存储器之间传送数据MOV AL,BX例例3-133-13下列指令是不合法的下
14、列指令是不合法的。MOV 6234HMOV 6234H,AX AX ;立即数不能用于目的操作数;立即数不能用于目的操作数MOV CSMOV CS,AX AX ;CSCS不能不能改变(不能为改变(不能为目的操作数目的操作数)MOV IPMOV IP,AX AX ;IPIP不能不能改变(改变(不能不能为为目的操作数目的操作数)MOV DSMOV DS,4234H 4234H ;立即数不能直接传送给段寄存器立即数不能直接传送给段寄存器MOV ALMOV AL,BX BX ;寄存器之间传送,寄存器之间传送,位数必须一致位数必须一致MOV BUF1MOV BUF1,BUF2 BUF2 ;两个存储器单元之
15、间不能传送数据两个存储器单元之间不能传送数据MOV DSMOV DS,ES ES ;不能在两个段寄存器之间传送数据不能在两个段寄存器之间传送数据(2)交换指令)交换指令 XCHG格式:格式:XCHG DEST,SRC功能:将源操作数与目的操作数的内容交换功能:将源操作数与目的操作数的内容交换。例例XCHG AL,CL ;字节交换;字节交换(通用寄存器之间)(通用寄存器之间)XCHG BX,SI ;字交换;字交换XCHG AX,BX+SI ;寄存器和存储器之间;寄存器和存储器之间 下列指令是非法的下列指令是非法的XCHG AX,6234H ;立即数立即数不能不能参加参加交换交换XCHG BX,4
16、234H ;存储器之间不能交换存储器之间不能交换XCHG DS,AX ;段寄存器不能参加交换段寄存器不能参加交换XCHG CS,DATBX ;不能不能改变改变CS、IP的值的值只能是通用寄存器之间或其与存储器之间交换只能是通用寄存器之间或其与存储器之间交换3)堆栈操作指令堆栈操作指令(PUSH/POP)n堆栈是主存一个特殊的区域堆栈是主存一个特殊的区域n操作原则:先进后出操作原则:先进后出 或后进先出或后进先出n堆栈指针堆栈指针它指示栈顶位置,它指示栈顶位置,在在80868086中,栈顶由中,栈顶由SS*16+SPSS*16+SP指示,指示,栈顶栈顶随不断压入(存)数据而由随不断压入(存)数据
17、而由高高低地址;随弹出(取)数据低地址;随弹出(取)数据由低由低高地址自动改变高地址自动改变。栈底即栈底即程序中设定的程序中设定的SPSP的值,不会变的值,不会变n指令格式指令格式 PUSH AX POP BX PUSH 2000H POP BXv字操作不能字节操作,高对高,低对低;字操作不能字节操作,高对高,低对低;v进栈操作进栈操作1次,次,SP=SP-2,向低地址方向生长;,向低地址方向生长;v出栈操作出栈操作1次,次,SP=SP+2,向高地址方向生长。,向高地址方向生长。v“栈顶总满栈顶总满”(栈顶已有数据)(栈顶已有数据)。进栈先栈先SP-1-压压入高入高8位数据,再位数据,再SP-
18、1压入低压入低8位数据。位数据。总结总结8088/80868088/8086的堆栈操作特点的堆栈操作特点 堆栈操作指令堆栈操作指令 说明:说明:PUSH、POP指指令令不不能能使使用用立立即即寻寻址址方方式式,POP指令不能使用指令不能使用CS寄存器,不能改变寄存器,不能改变CS与与IP的值。的值。堆栈中数据的压入弹出必须堆栈中数据的压入弹出必须以字以字为单位进行,为单位进行,这两条堆栈指令不影响标志位这两条堆栈指令不影响标志位。堆栈只有两种基本操作:进栈和出栈两条指令。堆栈只有两种基本操作:进栈和出栈两条指令。进栈指令进栈指令 PUSH BX PUSH BXSP=SP-2,然后把一个,然后把
19、一个字操作数存入堆栈顶部字操作数存入堆栈顶部出栈指令出栈指令 POP SI POP DI把把栈栈顶顶一一个个字字送送至至指指定定的的目目的的操操作作数数,然然后后SP=SP-2例例3-16 将将16位通用寄存器位通用寄存器CX的内容压入堆栈,然后,弹的内容压入堆栈,然后,弹出栈顶至出栈顶至CX中,已知:(中,已知:(SS)=0200H,(SP)=0008H,(CX)=12FAH,其示意图见图。,其示意图见图。PUSH CX POP CX-2020012FA162006200712FAH2000存储器存储器SS段段首地址首地址新栈顶新栈顶原栈顶原栈顶120008SSCXSP2008FA+12FA
20、H+216存储器存储器SS段段首地址首地址新栈顶新栈顶原栈顶原栈顶CXSPSS020012FA0008200620072008FA122000+PUSH CXPOP CX用途:现场的保护和恢复用途:现场的保护和恢复push ax;进入子程序后进入子程序后push bxpush ds.pop ds;返回主程序前返回主程序前pop bxpop ax(4)换码指令)换码指令格式:格式:XLAT功能:执行(功能:执行(AL)BX+AL的操作,使的操作,使AL中的值变换为中的值变换为内存表格中的某一个值,实现码的转换内存表格中的某一个值,实现码的转换。例例3-17 在内存的数据段中存放有一张数值在内存的
21、数据段中存放有一张数值09的的ASCII码转码转换表,首地址为换表,首地址为Hex_table,如图,如图3-3所示。现要把数值所示。现要把数值8转转换成对应的换成对应的ASCII码,可用以下几条指令实现码,可用以下几条指令实现:LEA BX,Hex_table ;(;(BX)表首偏移地址表首偏移地址MOV AL,8 ;(AL)8XLAT ;查表转换;查表转换Hex_table+0Hex_table+1Hex_table+2Hex_table+8Hex_table+90128930H31H32H38H39H2.地址传送指令地址传送指令1)有效地址传送指令)有效地址传送指令格式:格式:LEA D
22、EST,SRC功能:功能:这是一条取有效地址的指令这是一条取有效地址的指令。将源操作数的将源操作数的偏移地址传送到偏移地址传送到16位位通用、指针或变址寄存器中通用、指针或变址寄存器中。例例3-18 MOV BX,3200H;将将3200H单元的内容送单元的内容送BXLEA BX,3200H ;将有效地址;将有效地址3200H送送BXLEA SI,ADDR ;将;将ADDR的有效地址送的有效地址送SI LEA SI,50HBX+DI 2)地址指针传送指令)地址指针传送指令格式:格式:LDS DEST,SRC(数据段地址指针)(数据段地址指针)LES DEST,SRC(附加据段地址指针)(附加据
23、段地址指针)功能:将源操作数指定的连续功能:将源操作数指定的连续4个存储器单元中存个存储器单元中存放的放的32位地址指针(包括一个段地址和一个偏移地位地址指针(包括一个段地址和一个偏移地址)传送到两个址)传送到两个16位寄存器位寄存器 例例3-19 POINT DD 55663344H ;设定;设定变量变量POINT(段地段地址和偏移地址址和偏移地址)中存放)中存放4个字节的数据个字节的数据。LDS BX,POINT ;(BX)=3344H,(DS)=5566HLES DI,POINT ;(DI)=3344H,(ES)=5566H3.标志寄存器传送指令(标志寄存器传送指令(LAHF/SAHF)
24、(PUSHF/POPF)标志读写指令标志读写指令 LAHF将标志寄存器将标志寄存器FLAGSFLAGS中的低中的低8 8位,传送至位,传送至AHAH中中。SAHFSAHF与LAHF正好相反,把把AHAH传送至标志寄存器传送至标志寄存器FLAGSFLAGS的低的低8 8位位。LAHFLAHF指令操作格式指令操作格式(2)标志入栈出栈指令)标志入栈出栈指令格式:格式:PUSHF/POPF功能:功能:PUSHF指令是将标志寄存器中的内容压入指令是将标志寄存器中的内容压入堆栈,指令的操作为堆栈,指令的操作为SP-1(FLAGSH),SP-2(FLAGSL),(SP)(SP)-2POPF指令是将栈顶的字
25、单元内容弹出到标指令是将栈顶的字单元内容弹出到标志寄存器中,同时志寄存器中,同时SP(SP)+24输入输出指令输入输出指令格式:格式:IN DEST,SRC OUT DEST,SRC功能:专门用于累加器和功能:专门用于累加器和I/O端口之间执行数据传送端口之间执行数据传送 IN AL,28H ;从端口;从端口28H输入一个字节到输入一个字节到AL OUT 15,AL ;从;从AL输出一个字节到端口输出一个字节到端口15 MOV DX,0362H ;先将端口地址送入;先将端口地址送入DX IN AX,DX ;从端口;从端口0362H输入一个字到输入一个字到AX IN AL,80H;(AL)(80
26、H)IN AX,40H;(;(AX)(40H)IN AL,DX;(AL)(DX)OUT60H,AX;(;(60H)(AX)OUTDX,AL;(;(DX)(AL)OUTDX,AX;(;(DX)(AX)3.2.2 算算术术运算指令运算指令 实现二进制实现二进制/BCD码数据的码数据的加,减,乘,除加,减,乘,除四则运算,四则运算,除了符号扩展指令,均不同程度影响标志位除了符号扩展指令,均不同程度影响标志位1、加法运算:、加法运算:ADD/ADC/INC2、减法运算:减法运算:SUB/SBB/DEC/NEG/CMP3、乘法运算:乘法运算:MUL/IMUL4、除法运算:除法运算:DIV/IDIV/CB
27、W/CWD5、十进制调整十进制调整:DAA/DAS/AAA/AAS/AAM/AAD1.加法指令加法指令(ADD、ADC、INC(1)不带进位加法指令)不带进位加法指令格式:格式:ADD DEST,SRC功能:将源操作数与目的操作数相加,结果送入原功能:将源操作数与目的操作数相加,结果送入原存放目的操作数的地方。该指令对标志位有影响。存放目的操作数的地方。该指令对标志位有影响。例例3-21 ADD CL,20H ;(CL)(CL)+20HADD AX,SI ;(AX)(AX)+(SI)ADD DATA BX,AL;(BX)+DATA)(BX)+DATA)+(AL)ADD DX,BX+SI ;(D
28、X)(DX)+(BX)+(SI)举例举例:MOV AL,46H ;AL=46HADD AL,0C5H ;AL+0C5HAL指令执行后,对标志位的影响如下:指令执行后,对标志位的影响如下:二进制运算二进制运算 无符号数无符号数 带符号数带符号数(AL)=46H=0 1 0 0 0 1 1 0 70 +70 +0C5H=1 1 0 0 0 1 0 1 197 59 自然丢掉自然丢掉 1 0 0 0 0 1 0 1 1 267 +11 SF=0,CF=1,ZF=0,AF=0,OF=0,PF=0(2)带进位加法指令)带进位加法指令格式:格式:ADC DEST,SRC功能:将源操作数和目的操作数相加,同
29、时加上功能:将源操作数和目的操作数相加,同时加上进位标志的现行值进位标志的现行值CF,结果送入原存放目的操作,结果送入原存放目的操作数的地方数的地方,例例3-22 带进位加法指令带进位加法指令ADC AX,SI ;(AX)(AX)+(SI)+CFADC BX,3000H ;(BX)(BX)+3000H+CFADC AX,DATSI ;(AX)(AX)+(SI+DAT)+CF两两个个操操作作数数相相加加时时,还还要要把把进进位位标标志志CF加加上上去去,结结果果送送到到目目标标操操作作数数中中。其其格格式式完完全全同同ADDADD指指令令,用用于于多多字字节节相加相加.如:将内存如:将内存010
30、0H0100H与与0200H0200H单元连续单元连续4 4个字节数相加个字节数相加.MOV AX,0100HADD AX,0200HMOV 0300H,AX;低字之和存入;低字之和存入C单元。单元。MOV AX,0100H2;装入高字。装入高字。ADC AX,0100H2;高字求和考虑低字进位;高字求和考虑低字进位 MOV 0300H2,AX;存入高字之和存入高字之和。所有算术运算类指令只允许是寄存器与寄存器所有算术运算类指令只允许是寄存器与寄存器/存储器存储器/立即数或存储器与寄存器立即数或存储器与寄存器/立即数之间进行立即数之间进行.(3)加)加1指令指令格式:格式:INC DEST 功
31、能:将目的操作数中的内容加功能:将目的操作数中的内容加1,然后送回,然后送回该操作数。目的操作数可以是寄存器或存储该操作数。目的操作数可以是寄存器或存储器。例器。例3-23INC BX ;(BX)(BX)+1INC BYTE PTR DI+100H ;将(DI)100H所指的字节单元内容加1INC WORD PTR BX+SIINC BLINC指令不影响进位标志指令不影响进位标志CF。2、减法指令(减法指令(SUB、SBB、DEC、NEG、CMP)1)不带借位的减法指令)不带借位的减法指令 SUB SUB DEST,SRC ;(;(DEST)()(DEST-SRC)该该指指令令求求源源操操作作
32、数数与与目目标标操操作作数数之之差差,结结果果送送到到目目标标操操作作数数中中。SUB指指令令影影响响CF、OF、AF、SF、ZF和和PF等标志位。等标志位。格式同格式同ADDADD2)带借位的减法指令带借位的减法指令 SBB SBB DEST,SRC ;(;(DEST)()(DEST-SRC-CF)SBB指令对状态标志位的影响与指令对状态标志位的影响与SUB指令相同。它指令相同。它的用法与的用法与ADC指令相似指令相似3)减减1指令指令 DEC自自减减指指令令DEC将将目目标标操操作作数数DST减减1,并并将将结结果再送回果再送回DST。格式:格式:DEC BYTE PTR BX DEC W
33、ORD PTR BX+SI DEC BL DEC SI ;SI内容内容-1,结果送回,结果送回SIDEC指令影响指令影响OF、AF、SF、ZF和和PF标志位,标志位,但不影响进位标志但不影响进位标志CF。4)求补求补NEG格式:格式:NEG DST 无无论论操操作作数数DST是是正正数数还还是是负负数数,执执行行完完该该指指令令后后,都都相相当当于于对对DST按按位位取取反反,末末位位加加1(即即用用零零减减去去此操作数此操作数)。例如:例如:NEG BYTE PTR BX NEG WORD PTR BX+SI NEG BL NEG SI例:例:若若(AL)=03H,则,则CPU执行完执行完
34、NEG AL指令后,指令后,(AL)=0FDH。NEG指令影响指令影响CF、OF、AF、SF、ZF和和PF标志位标志位(5)比较指令)比较指令格式:格式:CMP DEST,SRC功能:功能:同同SUBSUB指令指令,将目的操作数减去源操作数,将目的操作数减去源操作数,但但结果不结果不回回送,二操作数原值不变,只是影响状态送,二操作数原值不变,只是影响状态标志位。标志位。根据根据ZF、CF、SF和和OF 四个标志位可四个标志位可以判断两数的大小。以判断两数的大小。以判断二操作数是否满足某以判断二操作数是否满足某种关系。种关系。这条指令后边一般跟条件转移指令,根据比较结果这条指令后边一般跟条件转移
35、指令,根据比较结果对标志位的影响来实现程序的分支。对标志位的影响来实现程序的分支。例例:比较比较AL是否大于是否大于100 CMP AL,100 ;AL-100结果结果 相等?相等?无符号数大于无符号数大于?有符号数大于?有符号数大于?3.乘法指令乘法指令(MUL、IMUL)(1)无符号数乘法指令)无符号数乘法指令格式:格式:MUL SRC(只能是通用寄存器和存储器只能是通用寄存器和存储器)功能:功能:字节相乘时,字节相乘时,ALAL与源操作数相乘,乘积为与源操作数相乘,乘积为1616位送入位送入AXAX中;字相乘时,中;字相乘时,AXAX与源操作数相乘,乘积与源操作数相乘,乘积为为3232位
36、,高位,高1616位送位送DXDX,低,低1616位送位送AXAX。对标志位影响:若乘积的高半部分(字节相乘时为对标志位影响:若乘积的高半部分(字节相乘时为AH,字相乘时为,字相乘时为DX)不为零,则)不为零,则CF1,OF1;否则;否则CF=0,OF=0。其它标志位为任意值。其它标志位为任意值。例例3-32 无符号数乘法指令无符号数乘法指令MUL DL ;AXAX*DLMUL CX ;DX:AXAX*CXMUL BYTE PTR SI+8 ;AXAL*SI+8(2)有符号数乘法指令)有符号数乘法指令格式:格式:IMUL SRC(只能是通用寄存器和存储器只能是通用寄存器和存储器)功能:与功能:
37、与MUL的功能相同,只是要求两乘数都必须的功能相同,只是要求两乘数都必须为有符号数。为有符号数。例例3-33两个有符号数的乘法两个有符号数的乘法MOV AL,0FEH ;ALFEH,FEH看作有符号数看作有符号数-2MOV CL,11H ;CL11H,11H看作有符号数看作有符号数17IMUL CL ;AXFFDEH,执行,执行02H*11H 将乘积结果取补码,将乘积结果取补码,FFDEH=-344.除法指令除法指令(DIV、IDIV)(1)无符号数除法指令)无符号数除法指令格式:格式:DIV SRC(只能是通用寄存器和存储器只能是通用寄存器和存储器)功能:功能:a.字节除法:将字节除法:将A
38、X/SRC的商送入的商送入AL,将,将AX/SRC的余数送入的余数送入AHb.字除法:将字除法:将DX:AX/SRC的商送入的商送入AX,将,将DX:AX/SRC的余数送入的余数送入DX例例3-35 无符号数除法指令无符号数除法指令DIV CL;AX中的中的16位数除以位数除以CL中的中的8位数,位数,商送商送AL,余数送,余数送AHDIV CX ;DX和和AX中的中的32位数除以位数除以CX中的中的16位数,位数,商送商送AX,余数送,余数送DX(2)有符号数除法指令)有符号数除法指令格式:格式:IDIV SRC(只能是通用寄存器和存储器只能是通用寄存器和存储器)功能:与功能:与DIV指令相
39、比只有两点不同:指令相比只有两点不同:a.两个操作数均为有符号数。两个操作数均为有符号数。b.如果被除数不是除数的两倍长度,对被除数要用专门的如果被除数不是除数的两倍长度,对被除数要用专门的指令进行符号扩展,以产生双倍长度表示的被除数。指令进行符号扩展,以产生双倍长度表示的被除数。(3)有符号扩展指令)有符号扩展指令(CBW、CWD)功能:功能:CBW为字节扩展指令,将为字节扩展指令,将AL中有符号数的符号位扩展到中有符号数的符号位扩展到AH中中;CWD为字扩展指令,将为字扩展指令,将AX中有符号数的符号位扩展到中有符号数的符号位扩展到DX中中 例例3-37MOV AL,12H ;AL12HC
40、BW ;AX0012H,AH=00HMOV AX,BBA3HCWD ;DXFFFFH,AXBBA3H符号扩展规则符号扩展规则CBW;AL的符号扩展至的符号扩展至AH;如如AL的最高有效位是的最高有效位是0,则,则AH00;AL的最的最高有效位为高有效位为1,则,则AHFFH。AL不变。不变。CWD;AX的符号扩展至的符号扩展至DX;如如AX的最高有效位是的最高有效位是0,则则DX00;AX的最高的最高有效位为有效位为1,则,则DXFFH。AX不变。不变。什么是什么是符号扩展符号扩展作业:作业:1 1)编程实现)编程实现 78/2378/23,并把商存放在,并把商存放在BLBL,余,余数存放在数
41、存放在CLCL2 2)取偏移地址)取偏移地址3256H3256H中数据中数据1 1个字负数的绝对值个字负数的绝对值3 3)编程实现编程实现7BH*2347H7BH*2347H,将结果存放在将结果存放在10001000:23502350为首地址的连续的单元中。为首地址的连续的单元中。5.BCD码(十进制)调整指令码(十进制)调整指令十进制数调整指令对十进制数调整指令对BCD码码运算的结果进行十进制运算的结果进行十进制调整,以得到正确运算结果的调整,以得到正确运算结果的BCD码。码。BCD码运算分压缩和非压缩两种,它们的调整方法不同。码运算分压缩和非压缩两种,它们的调整方法不同。压缩(组合)压缩(
42、组合)BCD码:一个字节中容纳两个码:一个字节中容纳两个BCD码,其范码,其范围为:围为:00H 99H。非压缩(非组合)非压缩(非组合)BCD码:码:一个字节中仅容纳一个字节中仅容纳1个个BCD码,其范围为:码,其范围为:00H 09H。十十进进制制调调整整指指令令有有6条条,对对用用组组合合BCD码码、未未组组合合BCD码及码及ASCII码表示的数算术运算后调整。码表示的数算术运算后调整。DAA、DAS、AAA、AAS、AAM、AAD 一定是以一定是以AL为目的操作数。为目的操作数。(1)组合组合BCD码加法调整指令码加法调整指令DAA DAA位于位于ADD和和ADC指令后指令后。功能:加
43、法运算后,若使功能:加法运算后,若使AL低低4位位1001B或或AF1,则则AL06HAL,且使,且使CF1;若使若使AL高高4位位1001B或或CF1,则,则AL60HAL且使且使CF1。(2)组合组合BCD码减法的调整指令码减法的调整指令DAS DAS接在接在SUB或或SBB指令后。指令后。功能:功能:若若AL低低4位位1001或或AF1,则进行,则进行AL06HAL,且,且使使AF1;若若AL高高4位位1001或或CF1,则进行,则进行AL60HAL,且使,且使CF1。(p58 例题例题 37+35 73-27)1)组合组合BCD码的调整指令码的调整指令(DAA DAS)(1)未组合未组
44、合BCD码加法调整指令码加法调整指令AAA AAA也称为也称为ASCII码调整指令,接在码调整指令,接在ADD或或ADC之后。之后。功能:若功能:若AL低低4位位1001或或AF1,则,则AL06HAL,且使且使AF1,AH1AH;执行执行ALAL0FH,即将即将AL高高4位清位清0,CFAF。(2)未组合未组合BCD码减法的调整指令码减法的调整指令AAS AAS也称为减法的也称为减法的ASCII码调整指令,参加运算的两个数码调整指令,参加运算的两个数是未组合是未组合BCD或或ASCII码,在码,在SUB或或SBB指令后执行。指令后执行。功能:功能:若若AL低低4位位1001或或AF1,则,则
45、AL6AL,AH1AH,且使,且使AF1;ALAL 0FH,即将,即将AL高高4位清位清0;CFAF。2)未组合未组合BCD码调整指令码调整指令(AAA、AAS、AAM、AAD)非压缩非压缩BCD码的加减运算举例码的加减运算举例v实现非压缩实现非压缩BCD码加法:码加法:8977MOV AL,08H;AL=08,非压缩,非压缩BCD码表示真值码表示真值8MOV BL,09H;BL=09,非压缩,非压缩BCD码表示真值码表示真值9ADD AL,BLl;二进制加法:二进制加法:AL=08H+09H=11HAAA;十进制调整:十进制调整:ax=0707h实现非压缩实现非压缩BCD码减法:码减法:68
46、0959mov ax,0608h;ax=0608h,非压缩非压缩BCD码表示真值码表示真值68mov bl,09h;bl=09h,非压缩,非压缩BCD码表示真值码表示真值9sub al,bl;二进制减法:二进制减法:al=08h09h=ffhaas;十进制调整:十进制调整:ax=0509h(3)未组合未组合BCD码乘法的调整指令码乘法的调整指令AAM AAM也也称称为为乘乘法法的的ASCII码码调调整整指指令令,在在MUL指指令令后后执执行行。参加参加MUL相乘的两个数应当是高相乘的两个数应当是高4位为位为0的的8位未组合位未组合BCD码。码。功能:执行功能:执行MUL后,后,AL0AH后,商
47、后,商AH,余数余数AL。【例例3-36】MOV AL,06H MOV BL,07H。MUL BL ;AX002AH AAM ;AX0402H,6742(4)未组合)未组合BCD码除法的调整指令码除法的调整指令AAD AAD也称为除法的也称为除法的ASCII码调整指令,在码调整指令,在DIV指令之前进行。指令之前进行。功能:将功能:将AX中的未组合中的未组合BCD码变成二进制数,并放入码变成二进制数,并放入AL。MOV AX,0504H;MOV BL,03H,AAD ;AX0036HDIV BL;AX=0012H;AAM ;AL/0AH ,商,商AH,余数,余数AL这一节指令要掌握:这一节指令
48、要掌握:ADD/ADC SUB/SBB INC/DEC CMP NEG MUL DIV DAA DAS3.2.3 逻辑逻辑运算指令运算指令 v以二进制位为基本单位进行数据的操作以二进制位为基本单位进行数据的操作 1、逻辑运算:、逻辑运算:AND、TEST、OR、XOR、NOT 2、移位:、移位:SHL、SHR、SAL、SAR 3、循环移位:、循环移位:ROL、ROR、RCL、RCR、常用指令,应该特别熟悉;同时,注意这些指令常用指令,应该特别熟悉;同时,注意这些指令对标志位的影响。对标志位的影响。1逻辑运算指令逻辑运算指令逻辑运算指令主要用于对寄存器或存储器单元逻辑运算指令主要用于对寄存器或存
49、储器单元中某些位的测试,置位,复位等操作。逻辑运中某些位的测试,置位,复位等操作。逻辑运算指令对操作数都是按位进行操作,对相应的算指令对操作数都是按位进行操作,对相应的标志位产生影响,操作数可以是字节或字标志位产生影响,操作数可以是字节或字。结结果回送到目的寄存器或存储器果回送到目的寄存器或存储器。格式格式:AND AL,BL;逻辑逻辑与与 OR AX,BX;逻辑逻辑或或NOT BYTE PTRSI+0100H;逻辑逻辑取反取反 XOR XOR AX,BX ;逻辑逻辑异或异或TEST AX,1234H ;测试测试(同同逻辑逻辑与不回送)与不回送)应用举例:应用举例:lAND:将指定位清零:将指
50、定位清零AND AL,0FH ;AL的高的高4位清零位清零lTEST:判断指定位是:判断指定位是“0”还是还是“1”TEST AL,80H ;判断判断AL最高位是否为最高位是否为“1”JNZ NEXT ;如果为;如果为“1”,则跳转,则跳转lOR:将指定位置:将指定位置“1”OR AL,01H ;AL的最低位置的最低位置“1”lXOR:将指定位取反;将指定位取反;将寄存器清零将寄存器清零XOR AL,80H ;AL的最高位取反的最高位取反XOR BL,BL ;BL清清0,相当于,相当于“MOV BL,0”lNOT:将整个操作数取反:将整个操作数取反NOT AL ;若执行前;若执行前(AL)=0