微机原理与接口技术第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 ;AL42H MOV
3、AH, 11010011B ;AH 11010011B(0D3H) MOV CX, -25 ;AX -25 MOV AL, 1000 ;错误,立即数1000超字节范围 MOV DS, 2000H ;错误,不能直接取立即数给段R MOV AX, 2000H ;取2000H (立即数)给AX MOV DS, AX ;将AX中的段基址数传送给DS MOV AX, IP ;错误,程序中不得出现IP MOV AX, CS ;正确,CS可读 MOV CS, AX ;错误,CS不可写,立即寻址和寄存器寻址,8086/8088存储器组织,微机存储器是以字节为存储单位。 8086/8088存储器(内存)地址线是
4、20根,内存容量1MB,地址范围 00FFFFFH 。 8086/8088存储器是分段结构,每段最大为64KB。 操作数如果存放在内存,需要指明内存的逻辑地址,微处理器的地址加法器会自动形成内存的物理地址. 逻辑地址描述格式 段基址:偏移址 物理地址 =段基址16 +偏移址,存储器寻址方式,段址寄存器:内存逻辑地址的段基址存放的寄存器(CS, SS, DS, ES)。 偏移址寄存器:基址寄存器(BX, BP), 变址寄存器(SI, DI)。 内存逻辑地址的偏移地址(EA)寻址方式: 直接寻址方式: 指令中直接给出EA 寄存器间接寻址方式: EA =(基/变址R) 寄存器相对寻址方式: EA =
5、(基/变址R)+位移量 基址变址寻址方式: EA =(基址R)+ (变址R) 基址变址相对寻址方式:EA =(基址R)+ (变址R)+ 位移量 段址寄存器和偏移址寄存器配对使用的隐含规定: 代码(指令)指针 CS:IP 堆栈操作指针 SS:SP, 或 SS:BP 源数据串指针 DS:SI 目的数据串指针 ES:DI,存储器寻址方式例,MOV AL, 1000H ;(DS : 1000H)的字节数AL MOV 2000H, BX ;BX (DS : 2000H) MOV AX, BX ;(DS : BX)的字数AX MOV AX, SS:BX ;(SS : BX)的字数AX MOV AX, BX
6、-100 ;(DS :(BX-100)的字数AX MOV BX+ SI ,AX ; BX+SI 是内存间接寻址 MOV AX, CX ;错误,CX寄存器不能用于内存寻址 MOV BX,SI ;错误,2个操作数不能都是内存寻址 MOV AX,SI+DI ;错误,SI和DI 不能配对做内存间接寻址,8086/8088指令系统,8086/8088微机的指令系统有133条指令(附录A),分为六大类: 1. 数据传送类指令: 主要有MOV,PUSH,POP,XCHG,LEA,IN,OUT等指令。 2. 算术运算类指令: 加、减、乘、除(整数)等算术运算指令。 3. 逻辑运算和移位类指令: 逻辑运算和移位
7、指令。 4. 控制转移类指令: 有/无条件转移指令(在分支程序设计中介绍), LOOP循环控制指令(在循环程序设计中介绍),CALL/RET指令(在子程序设计中介绍)。 5. 串操作类指令(在循环程序设计中介绍) 6. 处理机控制类指令,1. 数据传送指令类,数据传送类指令一共有14条。这里主要介绍: MOV 传送 PUSH 压入堆栈 POP 弹出堆栈 XCHG 交换 LEA 取偏移 IN 输入端口“读” OUT 输出端口“写 ” 数据传送类指令均不影响标志位。 数据类型字节(byte)/字(word)。绝大多数是双操作数,两个操作数(字节/字)类型必须一致。 寻址方式基本与MOV 指令的要求
8、相同。,数据传送指令,传送指令 MOV 格式:MOV dst,src 操作:dst(src) 双操作数寻址方式: dst (目的操作数) src (源操作数) reg(寄存器) reg| mem| imm(立即数)| segreg mem(内存) reg| imm| segreg segreg(段寄存器) reg| mem 注意: 1. 两个操作数类型(字节/字)要一致。 2. 目的操作数不能是立即数,两个操作数不能都是内存寻址方式。,堆栈操作指令,PUSH 和POP 是一对堆栈操作指令: 堆栈是一个“先进后出”的内存数据存取区域。逻辑地址SS: SP 。 数据进入堆栈的操作为压入(PUSH)
9、,从堆栈取出数据的操作为弹出(POP)。堆栈操作是单操作数指令, 只能是字类型数据。 压入指令PUSH 格式: PUSH src 操作: (SP)-2SP (src)(SP) 操作数寻址:src = |mem |reg |segreg 例如: MOV AX,100 PUSH AX,堆栈操作指令,弹出指令POP 格式: POP dst 操作: (SP)dst (SP)+2SP 操作数寻址:dst = mem|reg|segreg 例如 : PUSH AX ;AX(SS : SP) PUSH BX ;(DS : BX)(SS : SP) POP CX ;(SS : SP)CX PUSH CL ;错
10、误,堆栈操作必须是字类型数据 POP 200 ;错误,立即数不能是堆栈操作数据,交换指令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),数据交换指令,查表换码指令XLAT 格式: XLAT ; 无操作数 操作: ALDS:(BX+AL)
11、 ; 隐含操作数寻址 注意: BX为表头的EA, AL是距离表头的位移量 。表最大容量为256个字节。 例如: MEM DB ABCDEFGHIJKLMNOPQRSTUVWXYZ MOV BX, OFFSET MEM MOV AL, 2 XLAT ; AL= 43H( C的ASCII码值),查表换码指令,装偏移指令LEA 格式: LEA dst,src 操作: src的偏移址dst 操作数寻址: dst= reg src = mem 例如: MEM DB ABCDEFGHIJKLMNOPQRSTUVWXYZ LEA BX, MEM ;BX取MEM数据表头的EA (等同于:MOV BX, OFF
12、SET 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=100H OUT DX, AL ;与 MOV DX,AX 的区别 IN AL, 80H ;
13、错误,端口寻址不能用方括号,算术运算类指令可以分成加、减、乘、(整)除和十进制(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
14、)+(src) dst 进位加指令ADC 格式: ADC dst,src ; (dst)+(src)+ CF dst 加1指令INC 格式: INC dst ;(dst)+ 1 dst 操作数寻址方式: dst src reg reg|mem|imm mem reg|imm,加法运算指令,减法指令SUB 格式: SUB dst,src ;(dst)-(src) dst 借位减指令SBB 格式: SBB dst,src ;(dst)-(src)- CF dst 减1指令DEC 格式: DEC dst ;(dst)- 1dst 操作数寻址方式: dst src reg reg|mem|imm me
15、m reg|imm,减法运算指令,减法运算指令,比较指令CMP 格式:CMP dst,src 操作:(dst)-(src), 仅根据计算结果设置相关标志位。 求补指令 NEG 格式: NEG dst 操作: 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 =
16、 reg|mem 操作:有/无符号数的乘法 字节乘法:(AL)(src)AX 字乘法: (AX)(src)DX|AX(32位) 注意:被乘数和乘积是固定寻址,只需给出乘数。 例如: 无符号数字节乘法(2551 ) 0FFH1= 00FFH 有符号数字节乘法(-11 ) 0FFH1= 0FFFFH,乘法运算指令,无符号除法指令DIV 有符号除法指令IDIV 格式: DIV src IDIV src 操作数寻址:src = reg|mem 操作:有/无符号数的除法 字节除法:(AX)/(src)AL(商),AH(余数) 字除法: (DX|AX)/(src)AX(商),DX(余数) 注意: 1. 被
17、除数,商和余数是固定寻址,只需给出除数。 2. 除法可能有0作除数错误;商超出字节/字范围的溢出错误。 3. 有符号数除法的余数与被除数的符号相同。,除法运算指令,符号扩展指令CBW,CWD 格式: CBW ; 把AL字节数的符号扩展到AH,成AX字数 CWD ; 把AX字数的符号扩展到DX,成DX|AX双字数 操作数: 隐含寻址(AL/ AX/ DX ) 标志位:不改变。 例如: MOV AL,56H CBW ;AX=0056H MOV AX,8600H CWD ;AX= 8600H, DX= 0FFFFH,符号扩展指令,例如: MUL AH ;无符号数 (AL)(AH)AX DIV BX
18、;无符号数 (DX|AX) / (BX) AX IMUL AL ;有符号数 (AL)(AL)AX IMUL CX ;有符号数 (AX)(CX)DX|AX 例如:计算(-104)除以25。 MOV AL,-104 ;AL=-104(98H) CBW ;AL扩展为 AX (0FF98H) MOV BL,25 ;BL=25 IDIV BL ;AL=-4(商),AH=-4(余数) 例如,如果 AX=0010H(+16),BL=0FDH(-3) IDIV BL ;AX=01FBH,商=-5,余数=1,乘/除法指令应用例,3. 逻辑运算和移位指令,逻辑运算和移位类指令是以2#数位为单位的“位操作”指令,逻
19、辑运算指令5条,移位指令8条。 NOT 逻辑非 AND 逻辑与 OR 逻辑或 XOR 逻辑异或 TEST 位测试 SHL 逻辑左移 ROL 循环左移 SHR 逻辑右移 ROR 循环右移 SAL 算术左移 RCL 带进位循环左移 SAR 算术右移 RCR 带进位循环右移 操作数可为字节/字类型,按位进行逻辑运算。 多数情况不改变标志位。,逻辑运算指令,逻辑非指令NOT 格式: NOT dst ; 求(dst)的互反码 逻辑与指令 AND 逻辑或指令 OR 逻辑异或指令XOR 格式: AND dst,src 操作: (dst)(src)dst OR dst,src (dst)(src)dst XO
20、R dst,src (dst)(src)dst 测试指令TEST 格式: TEST dst,src 操作:(dst)(src) ; 不保存与运算结果,只设置标志位,移位指令,逻辑左移 SHL 逻辑右移 SHR 算术左移 SAL 算术右移 SAR 循环左移 ROL 循环右移 ROR 带进位循环左移 RCL 带进位循环右移 RCR 格式: dst,cnt 操作数寻址:dst是移位的对象,dst=reg|mem cnt是移位的位数,cnt=1|CL 操作:(图3.1 移位指令操作图解) 标志CF :左移取自dst的最高位,右移取自dst 的最低位D0位。,逻辑运算和移位指令应用例,; AX乘以10
21、SAL AX,1 MOV BX,AX SAL AX,1 SAL AX,1 ADD AX,BX,AND AL, 50H ;AL=(AL)50H OR AX, 8080H ;AX=(AX)(DS : 8080H) AND AL, 0FH ;AL高4位清0,低4位保留 OR AL, 0FH ;AL高4位保留,低4位置1 XOR AL, 0FH ;AL高4位保留,低4位取反,6. 处理器控制指令,标志位设置指令: CLC CF=0 STC CF=1 CMC CF取反 CLD DF=0 STD DF=1 CLI IF=0 STI IF=1 CPU控制指令: NOP 无操作(空操作) HLT 停机(暂停,
22、等待外部中断,中断后恢复运行) WAIT 等待(等待测试信号TEST, 恢复运行),汇编语言程序的语句,汇编语言源程序由三类指令语句组成: (符号)执行指令语句 提供给汇编程序“翻译”成机器能直接执行的指令。 汇编指示性语句(伪指令) 提供给汇编程序指示汇编操作的指令。 宏指令语句 提供给汇编程序的扩展的“功能宏大”的指令。,8086/8088汇编语句格式,汇编语言源程序语句的格式: ; 名字项是自定义的一个符号串。 操作码项是执行指令、伪指令和宏指令的操作功能符。 操作数项是0个或1个或多个(用逗号分隔)的操作对象 。 注释项是开始于“;” ,提供阅读的文字信息。 注意:各项之间用空格键符,
23、或TAB键符分界。 操作码项必有,其它项可选择有/无。 汇编语言程序不区别大小写英文。,名字项,名字项是自定义的一个符号串,可以是标号名(必须结束于“:” ) 、符号常数名、变量名、段名、过程名。 名字项的合法字符:英文字母AZ/az ,数字09 ,特殊字符 _ ?等。 注意:数字09不能是第1个字符,句点“”只能做第1个字符。 在执行指令语句的操作数项中: 符号常数名作为立即数使用。 标号名、过程名作为转移地址使用。 变量名作为存储单元的偏移址,可以直接寻址使用。 段名作为段基址(立即数)使用。,汇编表达式,操作数项是0个或1个或多个(用逗号分隔)的指令操作的对象,用规定的汇编表达式描述。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 接口 技术 汇编 语言程序设计 ppt 课件
链接地址:https://www.31doc.com/p-3195622.html