微机原理与接口技术第3章汇编语言程序设计ppt课件.ppt
《微机原理与接口技术第3章汇编语言程序设计ppt课件.ppt》由会员分享,可在线阅读,更多相关《微机原理与接口技术第3章汇编语言程序设计ppt课件.ppt(80页珍藏版)》请在三一办公上搜索。
1、微机原理与接口技术,第 3 章 汇编语言程序设计,教案,第 3 章 汇编语言程序设计,3.1 8086/8088指令系统3.2 汇编语言程序3.3 汇编语言程序设计习题例,8086/8088指令语句格式,:;标号是自定义的、非系统关键字的符号串。操作符是操作码的助记符号表示,是指令的关键字,必不可少。操作数是参与指令具体操作的操作对象,根据操作数的个数,有0(零)操作数指令、单操作数指令和双操作数(用逗号分割)指令。注释仅仅是提供阅读的文字信息。,操作数寻址方式,操作数作为参与指令具体操作的对象,可以是操作数据,也可以是转移地址。操作数可以是立即数,也可以存放在寄存器或内存储器或输入/输出接口
2、中。操作数的寻址方式有立即方式、寄存器方式、直接内存方式、间接内存方式、I/O方式。8086/8088寻址方式分为数据寻址方式(7种)和转移地址寻址方式(4种)两大类。,数据传送MOV指令,传送指令 MOV格式:MOV dst,src操作:dst src源操作数(src)传送到目的操作数(dst)双操作数:源操作数,目的操作数数据类型:字节类型/字类型,立即方式:操作数据在指令中直接给出(立即数)。寄存器方式:操作数存放在指令给出的字节/字寄存器中。例如:MOV AX,0FC25H;AX0FC25H MOV AL,42H;AL42HMOV AH,11010011B;AH 11010011B(0
3、D3H)MOV CX,-25;AX-25MOV AL,1000;错误,立即数1000超字节范围 MOV DS,2000H;错误,不能直接取立即数给段RMOV AX,2000H;取2000H(立即数)给AXMOV DS,AX;将AX中的段基址数传送给DSMOV AX,IP;错误,程序中不得出现IPMOV AX,CS;正确,CS可读MOV CS,AX;错误,CS不可写,立即寻址和寄存器寻址,8086/8088存储器组织,微机存储器是以字节为存储单位。8086/8088存储器(内存)地址线是20根,内存容量1MB,地址范围 00FFFFFH。8086/8088存储器是分段结构,每段最大为64KB。操
4、作数如果存放在内存,需要指明内存的逻辑地址,微处理器的地址加法器会自动形成内存的物理地址.逻辑地址描述格式 段基址:偏移址 物理地址=段基址16+偏移址,存储器寻址方式,段址寄存器:内存逻辑地址的段基址存放的寄存器(CS,SS,DS,ES)。偏移址寄存器:基址寄存器(BX,BP),变址寄存器(SI,DI)。内存逻辑地址的偏移地址(EA)寻址方式:直接寻址方式:指令中直接给出EA 寄存器间接寻址方式:EA=(基/变址R)寄存器相对寻址方式:EA=(基/变址R)+位移量 基址变址寻址方式:EA=(基址R)+(变址R)基址变址相对寻址方式:EA=(基址R)+(变址R)+位移量段址寄存器和偏移址寄存器
5、配对使用的隐含规定:代码(指令)指针CS:IP堆栈操作指针SS:SP,或 SS:BP源数据串指针DS:SI目的数据串指针ES:DI,存储器寻址方式例,MOV AL,1000H;(DS:1000H)的字节数ALMOV 2000H,BX;BX(DS:2000H)MOV AX,BX;(DS:BX)的字数AXMOV AX,SS:BX;(SS:BX)的字数AXMOV AX,BX-100;(DS:(BX-100)的字数AXMOV BX+SI,AX;BX+SI 是内存间接寻址MOV AX,CX;错误,CX寄存器不能用于内存寻址MOV BX,SI;错误,2个操作数不能都是内存寻址MOV AX,SI+DI;错误
6、,SI和DI 不能配对做内存间接寻址,8086/8088指令系统,8086/8088微机的指令系统有133条指令(附录A),分为六大类:1.数据传送类指令:主要有MOV,PUSH,POP,XCHG,LEA,IN,OUT等指令。2.算术运算类指令:加、减、乘、除(整数)等算术运算指令。3.逻辑运算和移位类指令:逻辑运算和移位指令。4.控制转移类指令:有/无条件转移指令(在分支程序设计中介绍),LOOP循环控制指令(在循环程序设计中介绍),CALL/RET指令(在子程序设计中介绍)。5.串操作类指令(在循环程序设计中介绍)6.处理机控制类指令,1.数据传送指令类,数据传送类指令一共有14条。这里主
7、要介绍:MOV 传送PUSH 压入堆栈POP弹出堆栈XCHG 交换LEA取偏移IN 输入端口“读”OUT输出端口“写”数据传送类指令均不影响标志位。数据类型字节(byte)/字(word)。绝大多数是双操作数,两个操作数(字节/字)类型必须一致。寻址方式基本与MOV 指令的要求相同。,数据传送指令,传送指令 MOV格式:MOV dst,src操作:dst(src)双操作数寻址方式:dst(目的操作数)src(源操作数)reg(寄存器)reg|mem|imm(立即数)|segregmem(内存)reg|imm|segregsegreg(段寄存器)reg|mem注意:1.两个操作数类型(字节/字)
8、要一致。2.目的操作数不能是立即数,两个操作数不能都是内存寻址方式。,堆栈操作指令,PUSH 和POP 是一对堆栈操作指令:堆栈是一个“先进后出”的内存数据存取区域。逻辑地址SS:SP。数据进入堆栈的操作为压入(PUSH),从堆栈取出数据的操作为弹出(POP)。堆栈操作是单操作数指令,只能是字类型数据。压入指令PUSH 格式:PUSH src操作:(SP)-2SP(src)(SP)操作数寻址:src=|mem|reg|segreg例如:MOVAX,100 PUSHAX,堆栈操作指令,弹出指令POP格式:POP dst操作:(SP)dst(SP)+2SP操作数寻址:dst=mem|reg|seg
9、reg例如:PUSHAX;AX(SS:SP)PUSHBX;(DS:BX)(SS:SP)POPCX;(SS:SP)CXPUSHCL;错误,堆栈操作必须是字类型数据POP200;错误,立即数不能是堆栈操作数据,交换指令XCHG格式:XCHG opr1,opr2操作:(opr1)(opr2)操作数寻址:opr1=reg|mem opr2=reg|mem例如:XCHG 2000H,BX;错误,两个内存数据不可直接交换。可改为:MOV AX,2000H;(DS:2000H)AX XCHG AX,BX;AX和(DS:BX)交换 MOV 2000H,AX;AX(DS:2000H),数据交换指令,查表换码指令
10、XLAT格式:XLAT;无操作数操作:ALDS:(BX+AL);隐含操作数寻址注意:BX为表头的EA,AL是距离表头的位移量。表最大容量为256个字节。例如:MEMDB ABCDEFGHIJKLMNOPQRSTUVWXYZMOV BX,OFFSET MEM MOV AL,2XLAT;AL=43H(C的ASCII码值),查表换码指令,装偏移指令LEA格式:LEA dst,src操作:src的偏移址dst操作数寻址:dst=reg src=mem 例如:MEM DB ABCDEFGHIJKLMNOPQRSTUVWXYZLEA BX,MEM;BX取MEM数据表头的EA(等同于:MOV BX,OFFS
11、ET MEM)MOV AL,BX+2;AL=43H,装偏移址指令,输入/输出(I/O)指令,I/O接口指令的语句格式:IN AL,端口地址 OUT 端口地址,AL I/O接口的端口地址16位,地址范围为00FFFFH。若端口地址为 00FFH(0255),可以直接给出;超出字节范围的端口地址必须存放在DX寄存器中,间接给出。例如:IN AL,80H;与 MOV AL,80H 的区别OUT 20H,AL;与 MOV 20H,AL 的区别MOV DX,100H;DX=100HOUT DX,AL;与 MOV DX,AX 的区别IN AL,80H;错误,端口寻址不能用方括号,算术运算类指令可以分成加、
12、减、乘、(整)除和十进制(BCD码)调整五组。这里介绍加、减、乘、除14条指令。ADD 加法ADC 进位加INC 加1 SUB 减法SBB 借位减DEC 减1 CMP 比较NEG 求补MUL 无符号乘法 IMUL 有符号乘法DIV 无符号除法IDIV 有符号除法CBW 字节符号扩展CWD 字符号扩展算术运算类指令基本都均影响标志位(ZF、SF、CF、OF)。绝大多数是双操作数,操作数可为字节/字类型。寻址方式与MOV 指令基本相同。,2.算术运算指令类,加法指令ADD格式:ADD dst,src;(dst)+(src)dst进位加指令ADC格式:ADC dst,src;(dst)+(src)+
13、CF dst加1指令INC格式:INC dst;(dst)+1 dst操作数寻址方式:dstsrc regreg|mem|imm memreg|imm,加法运算指令,减法指令SUB格式:SUB dst,src;(dst)-(src)dst 借位减指令SBB格式:SBB dst,src;(dst)-(src)-CF dst减1指令DEC格式:DEC dst;(dst)-1dst操作数寻址方式:dstsrc regreg|mem|imm memreg|imm,减法运算指令,减法运算指令,比较指令CMP格式:CMP dst,src操作:(dst)-(src),仅根据计算结果设置相关标志位。求补指令
14、NEG格式:NEGdst操作:0-(dst)dst;求互补码例如,计算 12345678H+80A7FD28H MOV DX,1234H MOV AX,5678H;DX|AX=12345678H ADD AX,0FD28H ADC DX,80A7H;DX|AX=92DC53A0H,无符号乘法指令MUL有符号乘法指令IMUL格式:MUL src IMUL src操作数寻址:src=reg|mem操作:有/无符号数的乘法字节乘法:(AL)(src)AX字乘法:(AX)(src)DX|AX(32位)注意:被乘数和乘积是固定寻址,只需给出乘数。例如:无符号数字节乘法(2551)0FFH1=00FFH
15、有符号数字节乘法(-11)0FFH1=0FFFFH,乘法运算指令,无符号除法指令DIV有符号除法指令IDIV格式:DIVsrc IDIV src操作数寻址:src=reg|mem操作:有/无符号数的除法字节除法:(AX)/(src)AL(商),AH(余数)字除法:(DX|AX)/(src)AX(商),DX(余数)注意:1.被除数,商和余数是固定寻址,只需给出除数。2.除法可能有0作除数错误;商超出字节/字范围的溢出错误。3.有符号数除法的余数与被除数的符号相同。,除法运算指令,符号扩展指令CBW,CWD 格式:CBW;把AL字节数的符号扩展到AH,成AX字数CWD;把AX字数的符号扩展到DX,
16、成DX|AX双字数操作数:隐含寻址(AL/AX/DX)标志位:不改变。例如:MOVAL,56HCBW;AX=0056HMOVAX,8600HCWD;AX=8600H,DX=0FFFFH,符号扩展指令,例如:MULAH;无符号数(AL)(AH)AX DIVBX;无符号数(DX|AX)/(BX)AXIMULAL;有符号数(AL)(AL)AX IMUL CX;有符号数(AX)(CX)DX|AX例如:计算(-104)除以25。MOVAL,-104;AL=-104(98H)CBW;AL扩展为 AX(0FF98H)MOVBL,25;BL=25 IDIVBL;AL=-4(商),AH=-4(余数)例如,如果
17、AX=0010H(+16),BL=0FDH(-3)IDIV BL;AX=01FBH,商=-5,余数=1,乘/除法指令应用例,3.逻辑运算和移位指令,逻辑运算和移位类指令是以2#数位为单位的“位操作”指令,逻辑运算指令5条,移位指令8条。NOT 逻辑非AND 逻辑与OR 逻辑或XOR 逻辑异或TEST 位测试SHL 逻辑左移ROL 循环左移 SHR 逻辑右移ROR 循环右移SAL 算术左移RCL 带进位循环左移SAR 算术右移RCR 带进位循环右移操作数可为字节/字类型,按位进行逻辑运算。多数情况不改变标志位。,逻辑运算指令,逻辑非指令NOT格式:NOTdst;求(dst)的互反码逻辑与指令 A
18、ND逻辑或指令 OR逻辑异或指令XOR格式:ANDdst,src 操作:(dst)(src)dst ORdst,src(dst)(src)dstXORdst,src(dst)(src)dst测试指令TEST格式:TEST dst,src操作:(dst)(src);不保存与运算结果,只设置标志位,移位指令,逻辑左移 SHL逻辑右移 SHR算术左移 SAL算术右移 SAR循环左移 ROL循环右移 ROR带进位循环左移 RCL带进位循环右移 RCR格式:dst,cnt操作数寻址:dst是移位的对象,dst=reg|memcnt是移位的位数,cnt=1|CL操作:(图3.1 移位指令操作图解)标志CF
19、:左移取自dst的最高位,右移取自dst 的最低位D0位。,逻辑运算和移位指令应用例,;AX乘以10SAL AX,1MOVBX,AXSALAX,1SALAX,1ADDAX,BX,AND AL,50H;AL=(AL)50HOR AX,8080H;AX=(AX)(DS:8080H)AND AL,0FH;AL高4位清0,低4位保留OR AL,0FH;AL高4位保留,低4位置1XOR AL,0FH;AL高4位保留,低4位取反,6.处理器控制指令,标志位设置指令:CLCCF=0STCCF=1CMCCF取反CLDDF=0 STDDF=1CLIIF=0 STI IF=1CPU控制指令:NOP无操作(空操作)
20、HLT停机(暂停,等待外部中断,中断后恢复运行)WAIT等待(等待测试信号TEST,恢复运行),汇编语言程序的语句,汇编语言源程序由三类指令语句组成:(符号)执行指令语句提供给汇编程序“翻译”成机器能直接执行的指令。汇编指示性语句(伪指令)提供给汇编程序指示汇编操作的指令。宏指令语句提供给汇编程序的扩展的“功能宏大”的指令。,8086/8088汇编语句格式,汇编语言源程序语句的格式:;名字项是自定义的一个符号串。操作码项是执行指令、伪指令和宏指令的操作功能符。操作数项是0个或1个或多个(用逗号分隔)的操作对象。注释项是开始于“;”,提供阅读的文字信息。注意:各项之间用空格键符,或TAB键符分界
21、。操作码项必有,其它项可选择有/无。汇编语言程序不区别大小写英文。,名字项,名字项是自定义的一个符号串,可以是标号名(必须结束于“:”)、符号常数名、变量名、段名、过程名。名字项的合法字符:英文字母AZ/az,数字09,特殊字符 _?等。注意:数字09不能是第1个字符,句点“”只能做第1个字符。在执行指令语句的操作数项中:符号常数名作为立即数使用。标号名、过程名作为转移地址使用。变量名作为存储单元的偏移址,可以直接寻址使用。段名作为段基址(立即数)使用。,汇编表达式,操作数项是0个或1个或多个(用逗号分隔)的指令操作的对象,用规定的汇编表达式描述。汇编表达式是由(整数)常数、寄存器、标号、变量
22、等,和一些运算符,或操作符组成的表达式。汇编表达式能被汇编程序解释,并计算出数值/地址结果,所以分为数值表达式和地址表达式两种。数值表达式:由常数、数值运算符组成的表达式,计算结果为字节/字数据。地址表达式:包含地址(标号、变量和过程名都是地址)、常数,以及地址运算/操作符的表达式,计算结果为内存地址值。,常数和数值运算符,数字常数(立即数):2/10/16进制数、ASCII字符(用引号括起来)符号常数给常数起的名字数值运算符(运算对象和结果是整数常数):算术运算符:+、*、/、MOD逻辑运算符:NOT、AND、OR、XOR 关系运算符:EQ、NE、GT、GE、LT、LE(真值为全1,假值为全
23、0),地址运算/操作符,地址的属性:段基址 偏移址 类型(BYTE、WORD、DWORD、NEAR,FAR)地址运算/操作符:地址运算符:+、;取偏移址的相对位移量分析运算符:取地址类型值TYPE;类型值有1/2/4/-1/-2 取段基址值SEG 取偏移址值OFFSET 属性定义运算符:PTR;确定寻址的类型换段前缀;修改段地址寄存器SHORT;确定为“短”转移地址,汇编运算符的优先级,类型指示符 PTR应用格式:PTR 例如,INC WORD PTR BX;内存操作数为字类型INC BYTE PTR BX;内存操作数为字节类型CALL FAR PTR sub1;段间调用子程序 sub1CAL
24、L NEAR PTR sub2;段内调用子程序 sub2,地址表达式应用例,换段指示符应用格式::例如,MOV AX,SS:SI+2 SUB AX,ES:BXMOV ES:BX,AX,MEM DB 10H,20H,30H,40HMOVAX,SEG MEM;AX取MEM段址MOV DS,AXMOV BX,OFFSET MEM;BX取 MEM偏移址MOV AL,BX+2;AL=30HMOVAX,WORD PTR MEM;AX=2010H MOV AL,TYPE MEM;AL=1,汇编指示语句(伪指令),常用的汇编指示语句(伪指令)分成五组:符号定义、内存数据定义、段定义、过程定义、模块定义。常用的
25、伪指令语句:EQU 和=(符号定义/赋值)DB/DW/DD(存储单元类型和存储数据定义)SEGMENT 和 ENDS(段定义)ORG(段内偏移址指针$设置)PROC 和 ENDP(过程子程序定义)NAME 和 END(模块定义和源程序结束),符号定义伪指令,等值伪指令EQU格式:EQU 等号伪指令(=)格式:=与EQU不同:=只能是合法的汇编表达式;=的符号名可以重复定义。例如:count EQU 19;count=19b=20b=b+10;b重新定义,b=30d=(count+4)*2;d=46f EQU 123456H;正确,“123456H”为符号对象g=123456H;错误,12345
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 接口 技术 汇编语言 程序设计 ppt 课件
链接地址:https://www.31ppt.com/p-5382602.html