《第二章8086微处理器与汇编语言(下)课件》由会员分享,可在线阅读,更多相关《第二章8086微处理器与汇编语言(下)课件(183页珍藏版)》请在金锄头文库上搜索。
1、微机原理及其应用,普通高等教育“十一五”国家级规划教材,作者 丁新民,2007年5月,第二章 8086微处理器与汇编语言 (下),学习目标,1、识记80X86汇编语言指令集、伪指令和宏、MASM表达式。 2、理解程序设计中顺序、分支、循环、子程序的基本结构,以及实现方法。 3、识记汇编语言编程、上机调试的基本方法。 4、识记DOS功能调用和BIOS中断调用的方法和应用,以及混合编程的概念。,2.3 指令系统 2.4 汇编语言 2.5 汇编语言程序设计 2.6 系统功能调用 2.7 宏指令、条件汇编及上机过程 2.8 模块化程序设计与混合编程,第二章微处理器与汇编语言(下),1. 传送类指令 2
2、. 算术运算类指令 3. 位操作类指令 4. 串操作指令 5. 循环和转移指令 6. 子程序的调用和返回指令 7. 输入输出指令,三、指令系统,第一节 传送类指令,1. 传送类指令,(1)数据传送指令 格式:MOV DEST,SRC; 即DEST(SRC)。 MOV指令对标志寄存器各位无影响。MOV指令的数据传送方向如图2-3-1所示。,1. 传送类指令,(2)交换指令 格式:XCHG DEST,SRC; 即(DEST)(SRC)。 指令对标志寄存器各位无影响。如图2-3-2所示。 (3)堆栈操作指令 进栈指令 格式:PUSH SRC; 即SP=(SP)- 2,SP (SRC)。 退栈指令 格
3、式:POP DEST; 即DEST(SP),SP =(SP)+ 2。 堆栈指令对标志寄存器的各位无影响。,1. 传送类指令,(4)标志传送指令 取标志寄存器指令 格式:LAHF 把标志寄存器的低8位传送给AH寄存器。指令执行后对标志寄存器的各位无影响。 存储标志寄存器 格式:SAHF 把寄存器AH中第7、6、4、2和0位分别送入标志寄存器的SF、ZF、AF、PF、CF标志位。标志寄存器的其他位均不受影响。,1. 传送类指令,(4)标志传送指令(续) 标志位进栈 格式:PUSHF 将标志寄存器压入堆栈。标志寄存器中各标志位本身不受影响。 标志位出栈 格式:POPF 将堆栈顶部的内容弹入标志寄存器
4、。,1. 传送类指令,(5)地址传送指令 装入有效地址 格式:LEA DEST,SRC 指令对标志寄存器各位无影响。 装入地址指针 格式:LDS DEST,SRC 或 LES DEST,SRC 把寄存器AH中第7、6、4、2和0位分别送入标志寄存器的SF、ZF、AF、PF、CF标志位。标志寄存器的其他位均不受影响。,3. 指出下列指令的错误 MOV AH ,BX MOV BX,SI MOV AX,SIDI MOV BYTE PTRBX,1000 MOV CS,AX,4. 程序在数据段中定义的数组如下: NAMES DB TOM. DB 20 DB ROSE. DB 30 DB KATE. DB
5、 25 请指出下列指令是否正确?为什么?,(1) MOV BX,OFFSET NAMES MOV AL,BX+5 (2) MOV AX,NAMES (3) MOV AX,WORD PTR NAMES+1 (4) MOV BX,6 MOV SI,5 MOV AX,NAMESBXSI,MOV BX,6*2 MOV SI,5 MOV AX,OFFSET NAMESBXSI INC AX (6) MOV BX,6 MOV SI,5 LEA DI,NAMESBXSI MOV AL,DI,第二节 算术运算类指令,2. 算术运算类指令,(1)加法类指令 加法指令 格式:ADD DEST,SRC; 即DEST
6、(DEST)+(SRC)。 相加结果影响标志寄存器的CF、PF、AF、ZF、SF和OF。 带进位加法指令 格式:ADC DEST,SRC 即DEST(DEST)+(SRC)+CF 相加结果影响标志寄存器的CF、PF、AF、ZF、SF和OF。,2. 算术运算类指令,(1)加法类指令(续) 加“1”指令 格式: INC DEST 执行结果设置标志寄存器中的PF、AF、ZF、SF和OF,但不影响CF。 ASCII加法校正指令 格式: AAA (无操作数) 受影响的标志位有AF、CF 。,2. 算术运算类指令,(1)加法类指令(续) 十进制加法校正指令 格式:DAA (无操作数) 受影响的标志位有AF
7、、CF、SF、ZF和PF。 (2)减法类指令 减法指令 格式:SUB DEST,SRC; 即DEST(DEST)-(SRC)。 受影响的标志位有CF、PF、AF、ZF、SF和OF。,2. 算术运算类指令,(2)减法类指令(续) 带借位减法指令 格式:SBB DEST,SRC 受影响的标志位有CF、PF、AF、ZF、SF和OF 。 减“1”指令 格式:DEC DEST 执行结果设置标志寄存器中的PF、AF、ZF、SF和OF,但不影响CF。,2. 算术运算类指令,(2)减法类指令(续) ASCII减法校正指令 格式:AAS (无操作数) 受影响的标志位有AF、CF 。 十进制减法校正指令 格式:D
8、AS (无操作数) 受影响的标志位有AF、CF、SF、ZF和PF。 求负数指令 格式:NEGDEST 受影响的标志位有PF、AF、ZF、SF、CF和OF。,2. 算术运算类指令,(3)乘法类指令 无符号乘法指令 格式:MUL SRC 受影响的标志位有CF和OF 。 带符号整数乘法指令 格式:IMUL SRC 受影响的标志位有CF和OF 。,2. 算术运算类指令,(4)除法类指令 无符号除法指令 格式:DIV SRC 带符号除法指令 格式:IDIV SRC (5)字节/字扩展指令 格式:CBW (无操作数) 或 CWD (无操作数),第三节 位操作类指令,3. 位操作类指令,(1)逻辑运算指令
9、逻辑与指令:AND DEST,SRC 逻辑或指令:OR DEST,SRC 逻辑异或指令:XOR DEST,SRC 逻辑非指令:NOT,3. 位操作类指令,(2)测试指令 格式:TEST DEST,SRC; 即(DEST)(SRC) 受影响的标志位与AND指令完全相同。 (3)移位/循环移位指令 算术移位 算术左移:SAL DEST,COUNT 算术右移:SAR DEST,COUNT 逻辑移位 逻辑左移:SHL DEST,COUNT 逻辑右移:SHR DEST,COUNT,3. 位操作类指令,(3)移位/循环移位指令(续) 循环移位 循环左移:ROL DEST,COUNT 循环右移:ROR DE
10、ST,COUNT 带进位循环左移:RCL DEST,COUNT 带进位循环右移:RCR DEST,COUNT,3. 位操作类指令,(3)移位/循环移位指令(续) 上述八条指令的操作如图2-3-5所示。,第四节 串操作指令,4. 串操作指令,(1)取串指令 格式:LODS 源串 对标志寄存器无影响 。 (2)存串指令 格式:STOS目的串 对标志寄存器无影响 。 (3)串传送指令 格式:MOVS 目的串,源串 对标志寄存器无影响 。,4. 串操作指令,(4)串比较指令 格式:CMPS 源串,目的串 对标志寄存器无影响 。 (5)串搜索指令 格式:STOS目的串 对标志寄存器有影响,与减法指令相似
11、 。 (6)重复前缀指令 格式:REP 对标志位ZF有影响 。,第五节 循环和转移指令,5. 循环和转移指令,(1)转移指令 无条件转移指令 格式:JMPDEST 段内转移时,JMP指令和要转移的“目标”指令属同一个段。 段间转移是转移到另一个代码段。因此,要修改CS和IP。,5. 循环和转移指令,(1)转移指令(续) 条件转移指令 基本格式:JXX DEST “J”后面的“XX”是指“条件”。这类指令有18条,转移距离只能在-128+127个字节之间。 不影响标志寄存器各位。,5. 循环和转移指令,(1)转移指令(续) 条件转移指令(续) 简单条件转移指令,5. 循环和转移指令,(1)转移指
12、令(续) 条件转移指令 (续) 无符号数条件转移指令 带符号数条件转移指令,5. 循环和转移指令,(2)比较指令 格式:CMP DEST,SRC 受影响的标志位与减法指令相似 。 (3)循环指令 LOOP指令 格式:LOOPDEST LOOPE/LOOPZ指令 格式:LOOPE DEST 或 LOOPZ DEST,5. 循环和转移指令,(3)循环指令(续) LOOPNE/LOOPNZ指令 格式:LOOPNE DEST 或 LOOPNZ DEST JCXZ指令 格式:JCXZDEST,第六节 子程序的调用和返回指令,6. 子程序的调用和返回指令,(1)子程序调用指令 格式:CALL 过程名 不影
13、响标志寄存器各位。 (2)返回指令 一般返回指令 格式:RET 带弹出值的返回指令 格式:RETn ;n总是偶数,第七节 输入输出指令,7. 输入输出指令,(1)输入指令 格式:IN OPRN1,OPRN2 OPRN1是累加器,OPRN2是端口地址。 (2)输出指令 格式:OUT OPRN1,OPRN2 OPRN1是端口地址,OPRN2是累加器。,1. 汇编语言语句的种类及其格式 2. 汇编语言数据 3. 符号定义语句 4. 表达式与运算符 5. 程序的段结构 6. 过程定义伪指令 7. 定位伪指令和当前位置计数器 8. 连接伪指令 9. 标题伪指令,四、汇编语言,第一节 汇编语言语句的种类及
14、格式,1. 汇编语言语句的种类及格式,(1)指令语句 每一条指令语句在汇编时,都要产生一个可供执行的目标代码,所以这种语句又叫可执行语句。格式如图2-4-1所示。 标号,以冒号“:”作为结束符。 指令助记符,不可省略的主要成分。 操作数,可以有多个,用逗号“,” 隔开。 注释,以分号“;”为开始。,1. 汇编语言语句的种类及格式,(2)伪指令语句 伪指令本身不产生目标代码。其格式如图2-4-2所示 符号名,不得用冒号“:” 。 伪指令,不可省略的主要成分。 操作数,可以有多个,用逗号“,” 隔开。 注释,以分号“;”为开始。,1. 汇编语言语句的种类及格式,(3)标识符 指令语句中的标号和伪指
15、令语句中的符号名统称为标识符。其组成规则如下: 字符个数:131。 第一个字符必须是字母、问号“?”、“”、下划线“_”中的一个。 从第二个字符开始,可以是字母、问号“?”、“”、数字或下划线“_”中的一个。 不能使用系统专用保留字。,第二节 汇编语言数据,2. 汇编语言数据,(1)常数 二进制数:以字母B结尾的数字序列。 八进制数:以字母O结尾的数字序列。 十六进制数:以字母H结尾的序列。 十进制数:以字母D结尾的数字序列。 实数:包含整数、小数和指数三个部分, 字符串常数:用引号括起来的一个或多个字符。,2. 汇编语言数据,(2)变量 变量代表存放在存储单元的数据,在程序运行时可修改。变量定义的格式如下:, 变量的属性 段属性(SEG) 偏移量属性(OFFSET) 类型属性(TYPE),2. 汇编语言数据,(2)变量(续) 表达式 数值表达式 ?表达式,表示可预置任何内容 字符串表达式 必须是用单引号括起来,不超过255个字符。例如: STRING