《微机原理》课件第3章 指令系统及汇编语言程序设计-1(-讲稿-)

上传人:考试不挂****2941... 文档编号:242949420 上传时间:2024-09-12 格式:PPT 页数:121 大小:3.06MB
返回 下载 相关 举报
《微机原理》课件第3章 指令系统及汇编语言程序设计-1(-讲稿-)_第1页
第1页 / 共121页
《微机原理》课件第3章 指令系统及汇编语言程序设计-1(-讲稿-)_第2页
第2页 / 共121页
《微机原理》课件第3章 指令系统及汇编语言程序设计-1(-讲稿-)_第3页
第3页 / 共121页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,1,操作码,目标操作数,,,源操作数,执行何种操作,参加操作的数据或数据存放的地址,3-1,概述,一、指令的格式,第三章,8088/8086,指令系统及汇编语言概述,例:,MOV AL,,,20H,寄存器,存储单元,立即数,n,寄存器,存储单元,寄存器:,AL,,,AX,立即数:,10H,,,100,,,1234H,存储单元:, ,2,2000H,;,BX,;,BX+5,;,BX+SI,;,BX+SI+4,例:,MOV AL,,,2000H,约定段,CS,:,ES,:,SS,:,DS,:,IP,BX/SI/DI/,直接寻址,SP/BP,DI(,串操作,),;AL,(DS*16+2000H), ,存储器操作数:,第三章,8088/8086,指令系统及汇编语言概述,3,二、超越段,MOV AL,,, BX+5 ;,有效地址,注:,只有,BX,、,SI,、,DI,、,BP,能间接表示地址,例:,MOV AL,,,ES,:,BX,;,AL,(,ES,*16+BX,),在指令中指定段寄存器,超越段,第三章,8088/8086,指令系统及汇编语言概述,4,-,寻找操作数地址的方法称为寻址方式,一、立即寻址方式,MOV AX,,,2000H,二、寄存器寻址方式,MOV AX,,,BX,三、存储器寻址方式,1,、直接寻址,MOV BX,,,2000H,2,、寄存器间接寻址,MOV AX,,,BX,3,、寄存器相对寻址,MOV AX,,,BX+05H,4,、基址变址寻址,MOV AX,,,BX+SI,5,、相对基址变址寻址,MOV AX,,,BX+SI+05H,3-2,寻址方式,5,一、立即寻址,例:,MOV AX ,2000H,AX=,2000H,操作码,00,20,代码段,内存(,H,),立即数,立即数,3-2,寻址方式,1.,操作数,8/16?,在什么地方?,(,立即数,/,寄存器,/,存储单元,-,物理地址,),2.,指令形式?,3.,应用,6,二 、寄存器寻址,-,-,指令中给出操作数所在的寄存器。,CPU,3000H,BX,AX,3-2,寻址方式,3000H,例:,MOV AX,BX;,(16,,寄存器,),结果:,AX=,3000H,操作码,代码段,内存(,H,),7,三、存储器寻址方式,(,1,)直接寻址,例:,MOV AX,2000H,操作码,00,20,偏移地址,32000H,32001H,00,01,04,09,10,偏移地址,代码段,数据段,设,DS,=3000H,DS*16+2000H=32000H,AX=,0100H,内存,(H),3-2,寻址方式,2000H,= DS:2000H,段超越:,ES:2000H,SS:2000H,8,(,2,)寄存器间接寻址,例:,MOV AX,BX;,间接地址,设,DS=3000H,BX=2000H,DS*16+BX=32000H,AX=,操作码,内存,(H),00,01,04,09,10,代码段,数据段,0100H,3-2,寻址方式,32000H,32001H,BX,SI,DI,BP,DS,SS,求,2000H,开始的,100,个数的和,MOV AL,0,ADD AL,2000H,ADD AL,2001H,MOV AL,0,MOV BX,2000H,ADD AL,BX,INC BX,MOV AL,0,MOV BX,2000H,MOV CX,100,NEXT:ADD AL,BX,INC BX,DEC CX,JNZ NEXT,9,(,3,)寄存器相对寻址,例:,MOV AL,BX+03H;,操作码,03,内存,(H),位移量,3000H:2000H,2001H,2002H,2003H,2004H,2005H,00,01,04,09,10,19,代码段,数据段,设,DS=3000H,BX=2000H,DS*16+BX+03H=32003H,结果:,AL=,09H,有效地址,3-2,寻址方式,指向数组中的第,N,个数,MOV AL,BX+N,10,(,4,)基址变址寻址,设,DS=3000H,BX=1000H,SI=1000H,DS*16+BX+SI=32000H,结果:,AX=,0100H,BX+SI,BX+DI,BP+SI,BP+DI,例:,MOV AX,BX+SI;,操作码,内存,(H),32000H,32001H,00,01,04,09,10,代码段,数据段,有效地址,3-2,寻址方式,指向数组中的第,SI,个数,MOV AL,BX+SI,11,(,5,)基址变址相对寻址,例:,MOV AX,BX+SI+0200H;,DS=3000H,BX=1000H,SI=0500H,DS*16+BX+SI+0500H=31700H,结果:,AX=,1234H,操作码,00,02,内存,(H),位移量,31700H,31701H,34,12,代码段,数据段,有效地址,3-2,寻址方式,指向二维数组中的第,N,个数,MOV AL,BX+SI+N,12,寻址方式小结,立即寻址,直接寻址,寄存器寻址,寄存器 间接寻址,寄存器,相对寻址,基址变址,AL,(,DS*16+2000H,),相对基址,变址寻址,(,DS*16+BX,),AL,AL,(,DS*16+BX+,位移量),AL,(,DS*16+BX+SI,),AL,(,DS*16+BX+SI+,位移量),操作,AX,2000H,BX,AX,MOV AX,,,2000H,MOV AL,,,2000H,MOV AX,,,BX,MOV BX,,,AL,MOV AL,,,BX+05H,MOV AL,,,BX+SI,MOV AL,,,BX+SI+05H,3-2,寻址方式,13,举例,1,、,分别指出源和目的操作数的寻址方式,(1) MOV CL,,,0FFH,(2) MOV 5BX,,,BL,(3) MOV BX+DI,,,$,(4) MOV VALBP+DI,,,DX,(5) MOV DS,,,AX,3-2,寻址方式,目的 源,寄存器;立即数,寄存器相对;寄存器,基址变址寻址;立即数,基址变址相对;寄存器,寄存器;寄存器,第,6,次课重点,七种寻址方式*(熟练掌握),15,3-3,指令系统,一、数据传送指令:,二、算术运算指令:,三、逻辑运算和移位指令:,四、串操作指令:,五、控制转移指令:,六、处理器控制指令:,16,一、数据传送指令,1,、通用传送指令,注意:,MOV,不影响标志位,MOV BX,,,SI,MOV ES,,,DS,MOV DS,,,2000H,(,1,),传送指令:,(8/16),例,MOV,sreg,reg/mem,MOV,reg,reg/sreg/mem/imm,MOV,mem,reg/sreg/imm,3-3,指令系统,通用寄存器,(AX,BX,CX,DX, SP,BP,SI,DI),段寄存器,(,CS,DS,ES,SS),MOV AL, SI,MOV BX, AL,MOV AX, DS,MOV ES, AX,MOV AX, 2000H,MOV DS, AX,17,举例,2,、,分析每条指令执行后,AX,的内容,(,1,),MOV AX,,,200H,已知:,DS=1000H,BX=0200H,SI=0002H,及内存数据,10200H,10201H,10202H,10203H,10204H,10205H,M,10H,2AH,3CH,46H,59H,6BH,:DS*16+200H=10200H,;AX,2A10H,:DS*16+BX+3=10203H,;AX,5946H,:DS*16+BX+SI+2=10204H,;AL,59H,3-3,指令系统,(,2,),MOV AX,,,3BX,(,3,),MOV AL , 2BX+SI,18,格式:,XCHG,目的操作数,OP1,,源操作数,OP2,XCHG,reg,reg/mem,(8/16),XCHG,mem,reg,(8/16),例,XCHG AX,,,BX+10H,注意:,XCHG DS,,,AX,XCHG BX,,,1000H,3-3,指令系统,2,、交换类指令,(,1,)交换指令,19,格式:,XLAT,;,AL,DS:,BX+AL,或,XLAT OPR,;,OPR,表示转换表的首地址;,注意:,换码表的长度不能超过,256,个字节,0,1,4,9,16,TABLE,BX,AL-,LEA BX,,,TABLE,MOV AL,,,3,XLAT,AL,9,3-3,指令系统,(,2,)查表指令,MOV BX,,,2000H,MOV AL,,,3,MOV AH, 0,ADD BX, AX,MOV AL, BX,;执行后,AL=9,XLAT,MOV BX,,,2000H,MOV SI,,,3,MOV AL, BX+SI,20,格式:,XLAT,;,AL,DS:,BX+AL,或,XLAT OPR,;,OPR,表示转换表的首地址;,注意:,换码表的长度不能超过,256,个字节,BX,AL-,LEA BX,,,TABLE,MOV AL,,,X,XLAT,AL,9,3-3,指令系统,(,2,)查表指令,MOV BX,,,2000H,MOV AL,,,X,MOV AH, 0,ADD BX, AX,MOV AL, BX,;执行后,AL=9,XLAT,DS:2000H,ADD BX, AL,0,1,4,9,16,3,TABLE,+0,+1,+2,+3,+4,X,RESULT,21,LEA BX,,,TABLE,MOV AL,,,X,XLAT,3-3,指令系统,+0,00H,0,+1,01H,1,+2,04H,4,+3,09H,9,+4,10H,16,+5,19H,25,+6,+15,E1H,15,X,3,RESULT,LEA BX,,,TABLE,MOV AL,,,X,MOV AH, 0,ADD BX, AX,MOV AL, BX,MOV RESULT, AL,方法,1,:,方法,2,:,求,0X 15,的平方值,TABLE,22,+0,00H,0,+1,00H,+2,01H,1,+3,00H,+4,04H,2,+5,00H,+6,09H,3,+7,00H,+8,10H,4,+9,00H,+,255,X,03H,00H,RESULT,LEA BX,,,TABLE,MOV AX,,,X,ADD AX, AX,ADD BX, AX,MOV AX, BX,MOV RESULT, AX,方法,1,:,求,0X 255,的平方值,TABLE,23,3,、地址传送类指令,(,1,)取偏移地址,:,LEA,reg16,mem,LEA BX , TABLE,; BX,TABLE,的偏移地址,同理,MOV BX,,,OFFSET TABLE,注:,OFFSET,仅能与符号地址相连,3-3,指令系统,00H,11H,22H,33H,44H,TABLE,BX,DS:2000H,MOV BX , TABLE,; 2000H,; 2000H,; 1100H,24,(,2,)指针送寄存器和,DS,指令,;SI,(,DS:0100H,),;DS,(,DS:0102H,),DS=1000H,10100H,10101H,10102H,10103H,10H,20H,30H,40H,2010H,SI,DS,3-3,指令系统,例,LDS SI,,,0100H,(,3,),例,LES DI,,,0100H,DI,ES,4030H,25,堆栈的应用,子程序,2,nn2,RET,栈顶,栈顶,栈底,断点,1,断点,2,内存堆栈区,栈顶,栈顶,CALL nn1,主程序段,CALL nn2,子程序,1,nn1,RET,断点,1,断点,2,堆栈:暂时保存的数据,(,以字为单位,),CS:IP,26,4,、堆栈操作指令,AX,1234,SP,栈顶,栈底,3000H,SP,2FFEH,2FFFH,34,12,堆栈指针功能:,SP,SP,2,(,1,)压入指令,:,PUSH,imm/reg/sreg/mem(16),PUSH AX,; (,SP-1,)(,SP-2,),AX,SP=SP-2,3-3,指令系统,27,格式:,POP BX,;,BX,(,SP,)(,SP+1,), SP=SP+2,执行,POP BX,1234H,(,2,)弹出指令,:,POP,reg/mem/sreg(CS,除外,)(16),SP,栈顶,栈底,3000H,SP,2FFEH,2FFFH,34,12,3-3,指令系统,PUSH,与,POP,指令配合使用,28,举例,3,分析堆栈及堆栈指针,SP,的变化过程,PUSH AX,PUSH BX,POP AX,POP BX,已知,SS=1050H,SP=0100H,AX=4860H,BX=1287H,SS,1050H:0000H,00FCH,00FDH,00FEH,00FFH,M,SP,0100H,1287H,AX,1287H,BX,栈底,48H,60H,SP,12H,87H,4860H,4860H,SP,SP,SP,可用栈区,3-3,指令系统,29,(,3,)标志寄存器压栈,/,出栈指令,格式,PUSHF/PUSHFD,;字,/,双字标志寄存器入栈,POPF/POPFD,;从堆栈中弹出字或双字存入寄存器,3-3,指令系统,30,(,3,)标志寄存器传送, 读取标志指令,格式,LAHF,;,AH,(标志寄存器的低位字节),写入标志指令,格式:,SAHF,; (,FLAG,的低位字节),AH, ,OF DF IF TF SF ZF,AF,PF,CF,标志寄存器,AH,3-3,指令系统,标志寄存器入栈,:,PUSHF/PUSHFD,标志寄存器出栈,:,POPF/POPFD,31,5,、输入输出指令,这组指令只限于累加器,AX AL,与外部设备的端口传送信息。,3-3,指令系统,1,),直接寻址,的输入输出指令,IN,输入指令,格式:,IN AL/AX,,,n,;字节,/,字输入,,n,为外设,8,位的端口地址,例:,IN AL, 0FH,IN AX, 0FH,32,3-3,指令系统,1,),直接寻址,的输入输出指令,OUT,输出指令,格式:,OUT,n,,,AL /AX,;字节,/,字输出,,n,为外设,8,位的端口地址,例:,OUT 0FH,,,AL,OUT 0FH,,,AX,33,3-3,指令系统,2,),间接寻址,的输入输出指令,IN,输入指令,格式:,IN AL /AX,,,DX,;字节,/,字输入,,DX,为外设,16,位的端口地址,例:,MOV DX, 1234H,IN AL, DX;,IN AX, DX;,34,3-3,指令系统,2,),间接寻址,的输入输出指令,OUT,输出指令,格式:,OUT,DX,,,AL/AX,;字节,/,字输出,,DX,为外设,16,位的端口地址,例:,MOV DX, 1234H,OUT DX,,,AL,OUT DX,,,AX,35,举例,4,、指出指令中的错误,(,1,),MOV 8650H,,,AX,;,立即数不能作为目标操作数,(,2,),MOV BX,,,1200H,;,两个操作数不能同时为存储器操作数,(,3,),MOV BX+SI+3,,,IP,; IP,不能用到,MOV,指令中,(,4,),MOV AL , ES: BP,;,无错误,(,5,),MOV AX,,,OFFSET 0A20H,;立即数不能取偏移地址,(6) XCHG AL , 50H,;,XCHG,指令中不能出现立即数,(7) OUT 1234H, AL,;,16,位接口地址,应用间址,3-3,指令系统,第,7,次课重点,熟练使用以下指令,MOV,、,XCHG,、,XLAT,PUSH,、,POP,LEA,IN,、,OUT,37,二、算术运算指令,数据类型:,无符号二进制;,有符号二进制;,无符号压缩十进制;,无符号非压缩十进制,3-3,指令系统,MOV AL , 23;,MOV AL , 23H,MOV AL , 2,AL,0001 0111B,AL,0010 0011B,AL,0011 0010B,38,一般的算术运算指令都会影响标志位,,当无符号数运算产生溢出时,,CF=1,;,当有符号数运算产生溢出时,,OF=1,;,如果运算结果为零,,ZF=1,如果运算结果为负,,SF=1,如果运算结果的低,8,位中有偶数个,1,,,PF=1,3-3,指令系统,标志名,标志为,1,标志为,0,CF,CY,NC,OF,OV,NV,ZF,ZR,NZ,SF,NG,PL,PF,PE,PO,IF,EI,DI,DF,DN,UP,AF,AC,NA,39,算术运算指令:,3-3,指令系统,ADD ;,加法,ADC ;,进位加法,SUB,;减法,SBB,;带借位减法,INC,;加,1,DEC,; 减,1,CMP,;比较指令,MUL,;乘法,IMUL,;有符号乘法,DIV,;除法,IDIV,;有符号除法,40,1,、加法,(,ADD,),、减法,(,SUB,),(8/16),3-3,指令系统,ADD,reg,,,reg/mem/imm,ADD,mem,,,reg/imm,(OP1,OP1+OP2,),SUB,reg,,,reg/mem/imm,SUB,mem,,,reg/imm,(OP1,OP1-OP2,),注意:,ADD BX,,,SI,;,ADD 30H , 40H,41,2,、带进位,/,借位的加法,(,ADC),/,减法,(,SBB) (8/16),用于多字节运算,3-3,指令系统,ADC,reg,,,reg/mem/imm,ADC,mem,,,reg/imm,(OP1,OP1+OP2+CF,),SBB,reg,,,reg/mem/imm,SBB,mem,,,reg/imm,(OP1,OP1-OP2-CF,),多字节运算,?,42,3-3,指令系统,例:计算,1234F000H+98765000H,1 2 3 4 F000H,9 8 7 6 5000H,+,AAAB 4000H,、,MOV AX,,,F000H,ADD AX,,,5000H,MOV BX,,,1234H,ADC BX,,,9876H,;,AX,4000H,,,CF,1,;,BX,AAABH,,,CF,0,多字节运算:,43,(,3,),INC,加,1,指令,:,INC,reg/mem,(8/16),例:,INC BX,;,BX,BX+1,说明 :无符号数加,1,;不影响进位标志,2000H,2001H,M,FFH,34H,例,INC 2000H;,INC BYTE PTR 2000H; INC WORD PTR 2000H;,3-3,指令系统,FFH+1,34FFH+1,(,4,),DEC,减,1,指令,:,DEC,reg/mem,(8/16),说明 :无符号数减,1,;不影响进位标志,44,(,5,),NEG,求补指令,NEG,reg/mem,(8/16),功能:连符号位一起逐位取反后末位加,1,例,MOV AL, 01H ;AL=00000001B=+1,NEG AL ;AL=11111111B=(-1),补,NEG AL ;AL=00000001B =+1,3-3,指令系统,45,(,6,),CMP,比较指令,CMP,reg,reg/mem/imm,(8/16) CMP,mem,reg/imm,例:,CMP AX,BX,;,AX,BX,置标志位,;,PR2,两数比较相等:,置,ZF,标志,AX=BX ZF=1,AX,BX ZF=0,3-3,指令系统, ,OF DF IF TF SF,ZF,AF,PF,CF,例:,CMP AL,0 ;,设置标志位,JZ XXX ;,检测标志位,判断是否转移,46,两无符号数比较大小,两有符号数比较大小,3-3,指令系统,置,CF,标志,AXBX CF=0,AX,BX,相同,AX,(,2041H,),(,2042H,),AL,N,Y,MOV AL, 2040H,CMP AL, 2041H,;AL,大时,CF,0,否则,CF,1,;,如果,CF,=,0,转,GREAT,GREAT,AL,(,2041H,),3-3,指令系统,MOV AL, 2041H,JNC GREAT,GREAT,:MOV 2042H, AL,48,从,BLOCK,开始的,100,个带符号八位数找出最大值,并存到,MAX,单元,3-3,指令系统,LEA BX, BLOCK,MOV AL, BX,INC BX,MOV CX, 99,AGAIN:CMP AL, BX,JG NEXT,MOV AL, BX,NEXT:INC BX,DEC CX,JNZ AGAIN,HLT,12H,34H,78H,56H,BLOCK,AL,AL,BX,CX,=0,N,Y,BX,指向,BLOCK,AL,BX,BX BX+1,CX,99,结束,初始化,循环体,ALBX,BX,BX+1,CX,CX-1,Y,N,12H,34H,78H,56H,BLOCK,AL,从,BLOCK,开始的,100,个,带符号八位数,找出,最大值,,并存到,MAX,单元,LEA BX, BLOCK,MOV AL, BX,INC BX,MOV CX, 99,AGAIN:CMP AL, BX,JG,NEXT,MOV AL, BX,NEXT:INC BX,DEC CX,JNZ AGAIN,HLT,JG,JL,JA,JB,50,从,BLOCK,开始的,100,个,带符号十六位数,找出,最大值,,并存到,MAX,单元,3-3,指令系统,LEA BX, BLOCK,MOV,AX, BX,INC BX,INC BX,MOV CX, 99,AGAIN:CMP,AX, BX,JG NEXT,MOV,AX, BX,NEXT:INC BX,INC BX,DEC CX,JNZ AGAIN,HLT,12H,34H,78H,56H,BLOCK,LEA BX, BLOCK,MOV AL, BX,INC BX,MOV CX, 99,AGAIN:CMP AL, BX,JG NEXT,MOV AL, BX,NEXT:INC BX,DEC CX,JNZ AGAIN,HLT,51,3,、乘法指令,(,1,)无符号数乘法指令,:,MUL reg/mem(8/16),例,MUL DL,;,MUL BX,MUL BYTE PTRSI,说明:,MUL 03H,错,存储单元做操作数,必须加上,属性说明,AX,AL*DL,字节乘法,DX AX,AX*BX,字乘法,AX,AL*(DS*16+SI),3-3,指令系统,(,2,)有符号数乘法指令,:,IMUL,reg/mem(8/16),52,例:,AL=FFH,,,DL=02H,,,MUL DL,;,AX,AL*DL,FFH*02H,=255*02,=510,;AX=01FEH,AX ,IMUL DL,;,AX,AL*DL,FFH*02H,= -1*02,= -2,;AX=FFFEH,AX ,3-3,指令系统,53,4,、除法指令,(,1,) 无符号数除法指令,:,DIV,reg/mem(8/16),说明:,指令要求被除数是除数的双倍字长,DIV 04H,;错误,除数不能是立即数,当商超出,AL,或,AX,范围,计算机产生,0,号除法错中断,3-3,指令系统,DIV DL,;,AX/DL,商,AL,,余数,AH,DIV BX,;,DX,,,AX/BX,商,AX,,余数,DX,DIV BYTE PTR SI ,;,操作?,(,2,)有符号数除法指令,:,IDIV,reg/mem(8/16),54,说明:,1),除法运算标志位无意义;,例:,25H/05H,0025H/05H,85H/05H,FF85H/05H,2)IDIV,余数的符号与被除数相同,3),被除数符号位扩展,;,-8/5,的余数为负数,3-3,指令系统,(,3,),CBW,字节转换为字指令,格式:,CBW,;,AL,中的符号位扩展到,AH,中。,例:,MOV AL,,,25H,CBW,;,AH,=00H,55,(,4,),CWD,字转换为双字指令,格式:,CWD,;,AX,中的符号位扩展到,DX,中。,例:,MOV AX,,,8025H,CWD,;,3-3,指令系统,DX=FFFFH,例:,85H/03H,FF85/03H,MOV AL,,,85H,CBW,;,AH=FFH,MOV BL,,,03H,IDIV BL,;,FF85H/03H,例,3.38,编程序,求表达式,Z = (X*X+Y-5) /2,的值,并将,Z,存入,RESULT,单元,.,其中, X,、,Y,为,字值,,存在,VARX,和,VARY,单元中。,3.5,汇编语言程序设计基础,X,*,X,+,Y,-,5,/,2,DX AX,AX*BX,CX BX,Y,DX AX,+,DX AX,-,0 5,/2,商,AX,余,DX,DX AX,BX,;,Z = (X*X+Y-5) /2,MOV AX, VARX,MOV BX, AX,IMUL BX,;,*,MOV CX, DX,MOV BX, AX,MOV AX, Y,CWD,;,Y,扩展,ADD AX, BX,ADC DX, CX,; +Y,SUB AX, 5,SBB DX, 0,; -5,MOV BX, 2,IDIV BX,; /2,MOV RESULT, AX,例,3.38,编程序,求表达式,Z = (X*X+Y-5) /2,的值,并将,Z,存入,RESULT,单元,.,其中, X,、,Y,为,字值,,存在,VARX,和,VARY,单元中。,分析:,1,,定义字数据,VARX, VARY,RESULT,2,分配寄存器:,AX,X,BX,X, DX AX ,乘积,CX BX DX AX,DX AX Y,DX AX(DX AX ) +(CX BX),DX AX(DX AX) - (5),BX2, / , AX,商,,DX,余,RESULT,AX,3.5,汇编语言程序设计基础,X,*,X,+,Y,-,5,/,2,AX,X,BX, X,IMUL,CX,DX,BX,AX,AX,Y,CWD,AX,AX-5,DX,DX-0,BX,2,IDIV,AX,AX+BX,DX,DX+CX,;,Z = (X*X+Y-5) /2,MOV AX, VARX,MOV BX, AX,IMUL BX,;,*,MOV CX, DX,MOV BX, AX,MOV AX, Y,CWD,;,Y,扩展,ADD AX, BX,ADC DX, CX,; +Y,SUB AX, 5,SBB DX, 0,; -5,MOV BX, 2,IDIV BX,; /2,MOV RESULT, AX,58,5,、十进制调整指令,压缩的,BCD,码:,例:,87,的压缩,BCD,码为,1000 0111B,非压缩的,BCD,码,(ASCII,码):,例:,87,的非压缩,BCD,码为:,XXXX 1000B,XXXX 0111B,3-3,指令系统,十进制数,BCD,码,00000,10001,20010,30011,40100,50101,60110,70111,81000,91001,59,(,1,)加法的十进制调整指令,格式:,DAA;,使用,:仅对,AL,调整,加法结果必须存放在,AL,中。,ADD ADC,DAA,DAA,调整方法:加,6,调整,例 计算,28+26,MOV AL,,,28H,ADD,AL,,,26H,DAA ;,对,AL,调整,;,AL,28H,;,AL,28H+26H=4EH,;,AL,4EH+06H=54H,3-3,指令系统,60,(,2,)减法的十进制调整指令,格式:,DAS,使用,:仅对,AL,调整,减法结果必须存放在,AL,中。,SUB SBB,DAS,DAS,MOV AL,,,26H,SUB AL,,,18H,DAS,例 计算,26-18,;,AL,26H,;,AL,26H-18H=0EH,;,AL,0EH-06H=08H,3-3,指令系统,调整方法:减,6,调整,61,例,6,:,编程计算,1+2+3+4+ -10,AL,AL+BL,调整为十进制数,BL ,BL+1,CX,CX-1,CX,=0,N,Y,AL,清,0,BL,初值,1,CX,10,,循环次数,MOV AL,,,0,MOV BL, 1,MOV CX, 10,NEXT:ADD AL,,,BL,DAA,;,对,AL,调整,INC BL,DEC CX,JNZ NEXT,;,CX,0,转,HLT,请分析程序中有无,DAA,,最后,AL,结果是?,结果,AL= 55,H,结束,3-3,指令系统,初始化,循环体,62,(,3,)非压缩的,BCD,码加法调整,格式:,AAA,操作:,AL,把,AL,中的内容调整为非压缩的,BCD,码格式,AH,AH+,调整产生的进位,调整方法:,如果,AL,的低,4,位为大于,9,,或,AF=1,则:,1,),AL,AL+6,;,2,),AL,高,4,位清,0,3,),CF,AF=1,,,AH,AH+1,;,否则仅,使,AL,的高,4,位清,0,MOV AL,,,8,ADD AL,,,4,AAA,;,AL,38H,;,AL,38H+34H=6CH,;,AL,6CH+6=72H02H,AH 01H,3-3,指令系统,(,4,)非压缩的,BCD,码的减法调整,格式:,AAS,第,8,次课重点,熟练使用以下指令,ADD,、,ADC,、,SUB,、,SBB,、,INC,、,DEC,、,CMP,MUL,、,IMUL,、,DIV,、,IDIV,、,CBW,、,CWD,DAA,、,DAS,64,三、逻辑运算和移位指令,逻辑运算,AND,OR,XOR,NOT,TEST,与,或,异或,取反,测试,3-3,指令系统,CF=OF=0,AF,不定,SF,、,PF,、,ZF,65,1,),AND,逻辑与指令,:,AND,reg,reg/mem/imm,(8/16),AND,mem,reg/imm,说明:,位操作,某些位置,0,(和“,0”,相“与”)。,1,、逻辑指令,3-3,指令系统,MOV,AL,,, ,B,AND,AL,,,1 0 0 0 0 0 0 0 B ; 80H,;,AL,1,000 0000B/,0,000 0000B,;使,AL,低七位变为,0,,最高位不变,JZ ZHENG,JNZ FU,66,2,),OR,逻辑或指令,:,OR,reg,reg/mem/imm,(8/16),OR,mem,reg/imm,说明:,某些位置,1,:和“,1”,相“或” 。,MOV,AL,,, ,B,OR,AL,,,1 0 0 0 0 0 0 0 B ;80H,;,AL,1, ,B,;使,AL,最高位变为,1,,其它位不变,3-3,指令系统,67,3,),XOR,逻辑或指令,:,XOR,reg,reg/mem/imm,(8/16),XOR,mem,reg/imm,说明:使某个操作数清零,同时清进位,CF=0,。,例,XOR AX,,,AX,4,),NOT,逻辑非指令,:,NOT,reg/mem,(8/16),操作:,OPR,OPR,逐位取反,说明:,NOT,指令执行后不影响标志位。,3-3,指令系统,68,5,),TEST,测试指令,:,TEST,reg,reg/mem/imm,(8/16),TEST,mem,reg/imm,TEST AL,80H ; AL,与,80H,置标志位,;不改变原操作数,说明:,仅用来检测某一位或某几位是,“,0,或,1,”,,,编程时,用在条件转移指令前产生条件。,例:,3-3,指令系统,MOV,AL,,, ,B,TEST,AL,,,1 0 0 0 0 0 0 0 B ; 80H,;,结果为,1,000 0000B/,0,000 0000B,;使,AL,低七位变为,0,,最高位不变,JZ ZHENG,JNZ FU,69,例,3.10,从,3000H,开始的内存单元中存放有,64,个有符号数,要求统计其中负数的个数,并将统计结果存入,NUM,单元。,3000H,12H,3001H,34H,3002H,78H,3003H,56H,3039H,H,AL,SI,SI,SI+1,DX,DX+1,CX,=0,N,Y,DX,清,0,SI,初值,3000H,CX,64,,循环次数,结束,初始化,循环体,AL0,CX,CX-1,Y,N,XOR DX, DX,MOV SI, 3000H,MOV CX, 40H,AGN: MOV AL, SI,INC SI,TEST AL,80H,JZ NEXT,INC DX,NEXT:DEC CX,JNZ AGN,MOV NUM, DX,HLT,70,L,ogical,逻辑,A,rithmetic,算术,R,otate,循环,SH,ift,移位,R,ight,右,L,eft,左,算术,/,逻辑移位,SHL/SAL,SHR,SAR,循环移位,ROL,ROR,RCL,RCR,逻辑,/,算术左移,逻辑右移,算术右移,循环左移,循环右移,带进位循环左移,带进位循环右移,3-3,指令系统,2,、算术,/,逻辑移位指令,71,格式:,指令助记符,reg/mem(8/16),,,1,指令助记符,reg/mem(8/16),,,CL,例:,SAL AX,,,1,MOV CL,,,8,SAL AX,,,CL,指令助记符,SHL/SAL,SHR,SAR,3-3,指令系统,72,1,),SHL/SAL,逻辑,/,算术左移指令,0,CF D,15,/,7,OPR D0,乘,2,操作,如果符号位改变表示,溢出,2,),SHR,逻辑右移指令,0,D,15,/,7,OPR D0 CF,3,),SAR,算术右移指令,D,15,/,7,OPR D0 CF,无符号数除,以,2,操作。,有符号数除,以,2,操作。,3-3,指令系统,73,3,、循环移位指令,1,),ROL,循环左移指令,CF D,15,/,7,OPR D0,2,),ROR,循环右移指令,D,15,/,7,OPR D0 CF,3,),RCL,带进位循环左移指令,4,),RCR,带进位循环右移指令,CF D,15,/,7,OPR D0,D,15,/,7,OPR D0 CF,3-3,指令系统,74,例:将,4000H,单元的内容拆开,高,4,位送,4001H,低位,低,4,位送,4002H,低位,,4001H,、,4002H,的高,4,位清零,一般用于把数据送显示缓冲区时使用。,3-3,指令系统,开始,4000H,内容送,AH,,,AL,AH,右移,4,位后送,4001H,AL,屏蔽高,4,位后送,4002H,结束,25H,25H,25H,02H,05H,AH,AL,SHR,25H/16,商,2,AL,余,5AH,25/10,商,2,AL,余,5AH,AND,MOV AL, 4000H,MOV AH, AL,MOV CL, 4,SHR AH, CL,MOV 4001H, AH,AND AL, 0FH,MOV 4002H, AL,75,思考题:将,4000H,、,4001H,单元的低位送,4002H,单元的高、低位,一般用于将缓冲区的数据取出拼成一个字节,3-3,指令系统,76,约定:,源数据串地址:,DS,:,SI,目的数据串地址:,ES,:,DI,传送次数:,CX,每传送一次,自动修改,SI,、,DI,值,指令,CLD,使标志,DF=0,,增址方向传,指令,STD,使标志,DF=1,,减址方向传,DS,:,SI,ES,:,DI,源串,目的串,四、字符串处理指令,3-3,指令系统,77,指令名称 字节操作 字操作,串传送,MOVSB MOVSW,串比较,CMPSB CMPSW,串扫描,SCASB SCASW,串装入,LODSB LODSW,串存储,STOSB STOSW,类型和格式,重复串操作前缀,REP,无条件重复,REPE/REPZ,相等,/,结果为零重复,REPNE/REPNZ,不相等,/,结果非零重复,例、,REP MOVSB,;重复传送至,CX=0,3-3,指令系统,78,1,、,MOVS,串传送指令,格式,1,:,MOVSB,;,(,DI,),(,SI,),SI,SI,1,DI,DI,1,格式,2,:,MOVSW,;,格式,3,:,REP MOVSB,;,CX=0,?若相等,则退出,REP,语句;,否则执行指令,MOVSB,2,),CX,CX-1,,转,1,),(,DI,),(,SI,),SI,SI,2,DI,DI,2,DS,:,SI,ES,:,DI,源串,目的串,3-3,指令系统,79,2,、,STOS,存入串指令,格式,1,:,STOSB,;,格式,2,:,STOSW,;,(,DI,),(,AL,),DI,DI,1,(,DI,),(,AX,),DI,DI,2,格式,3,:,REP STOSB,;,ES,:,DI,源串,目的串,AL/AX,3-3,指令系统,CX=0,?若相等,则退出,REP,语句;,否则执行指令,STOSB,2,),CX,CX-1,,转,1,),常用来对内存初始化,80,3,、,LODS,从串取指令,格式,1,:,LODSB,;,格式,2,:,LODSW,;,(,AL,),(,SI,),SI,SI,1,(,AX,),(,SI,),SI,SI,2,DS,:,SI,源串,目的串,AL/AX,3-3,指令系统,81,4,、,CMPS,串比较指令,格式,1,:,CMPSB,;,(,SI,),-,(,DI,),置标志,ZF,SI,SI,1,DI,DI,1,格式,2,:,CMPSW,;,(,SI,),-,(,DI,),SI,SI,2,DI,DI,2,格式,3,:,REPE CMPSB,;,常用于口令判断,DS,:,SI,ES,:,DI,源串,目的串,3-3,指令系统,CX=0,?若相等,则退出,REPE,;,否则执行指令,CMPSB,;置标志位,ZF,2,),CX,CX-1,3,),ZF=1,?相等则转,1,);否则退出,REPE,语句,82,5,、,SCAS,串扫描指令,格式,1,:,SCASB,;,格式,2,:,SCASW,;,(,AL,),-,(,DI,)置,ZF,标志,DI,DI,1,(,AX,),-,(,DI,),DI,DI,2,格式,3,:,REPNE SCASB,;,寻找字符串中的关键字,ES,:,DI,源串,目的串,AL/AX,比较,3-3,指令系统,CX=0,?若相等,退出,REPNE,;,否则执行指令,SCASB,;置,ZF,标志位,2,),CX,CX-1,3,),ZF=0,?不相等则转,1,);否则退出,REPNE,语句,83,6,、,CLD,清除方向标志指令,格式:,CLD,操作:使方向标志,DF=0,,串操作指令中地址自动增量。,7,、,STD,设置方向标志指令,格式:,STD,操作:使方向标志,DF=1,,执行串操作指令地址自动减量变化。,DS,:,SI,ES,:,DI,源串,目的串,3-3,指令系统,84,REP MOVSB,;重复传送至,CX=0,1,)如果,CX=0,退出,REP,,,否则执行,REP,后面的串操作指令一次;,2,),CX,CX-1,;,3,)重复,1,), 2,),DS,:,SI,ES,:,DI,源串,目的串,8,、,REP,重复操作前缀,9,、,REPE/REPZ,相等,/,为零时重复操作,10,、,REPNE/REPNZ,不相等,/,不为零时重复操作,3-3,指令系统,85,1,、分析程序段中每条指令的执行结果,XOR AX,,,AX,;,AX,OR AL,,,80H,;,AL, ,MOV AH,,,10H,;,AH,MOV BX,,,AX,;,BX ,ADD AX,,,AX,;,AX ,00H,80H,10H,1080H,2100H,复习,3-3,指令系统,86,2040H,2041H,2042H,2,、编程 对内存,2040H,和,2041H,单元存放的十进制数,26,和,29
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!