1、汇编语言程序设计汇编语言程序设计 主讲:主讲: 青岛理工大学计算机学院青岛理工大学计算机学院 刘淑霞刘淑霞 Email: 手机:手机: 13964881800 2009.3 纪律要求 o 不能迟到不能迟到 o 讲课时不能有交头接耳、吃东西等影响课讲课时不能有交头接耳、吃东西等影响课 堂的动作堂的动作 o 手机关机手机关机 o 认真完成作业,不要拿到课堂来做认真完成作业,不要拿到课堂来做 第一章 概述 o第一节 计算机语言 o第二节 为什么要学习汇编语言 第一节 计算机语言 o一、通用语言(高级语言)一、通用语言(高级语言) o二、汇编语言二、汇编语言 o三、机器语言三、机器语言 o 通用语言是
2、用来对计算机操作步骤进行描述 的一整套标记符号、表达格式、结构及其使 用的语法规则。 o 种类:Pascal, BASIC, C, C+, Java等等 o 例子(C): o 执行过程: 一、通用语言(高级语言) int i,j,k; k=i+j; 编译程序计算机 源程序 目标程序 连接程序 可执行程序 用户编辑程序 一、通用语言(高级语言) 优点: (1) 程序容易编制、出错机会少、容易调试; (2) 容易表达算法; (3) 通用性强。 缺点: (1) 计算机不能直接认识、执行,必须经过编译变 为机器语言程序; (2) 编译后生成的机器语言程序冗长、占用内存空 间多、执行速度低; (3) 不
3、能充分发挥计算机的硬件功能。 例子: 二、汇编语言 DSEG SEGMENT ;数据段开始 DATA0 DB 15H DATA1 DB 26H RLT DB 0 DSEG ENDS ;数据段结束 CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG START: MOV AX,DSEG ;设置数据段基址 MOV DS,AX MOV AL,DATA0 ;取第一个数据 MOV AH,DATA1 ;取第二个数据 ADD AL,AH ;求和 MOV RLT,AL ;保存结果 HLT ;停机 CSEG ENDS ;代码段结束 END START o 使用助记符表示指令的操作码和操作数,
4、用标 号和符号来代替地址、常量和变量 o 汇编程序不能直接执行,必须翻译成由机器代 码组成的目标程序,这个过程叫做汇编 o 种类:8086汇编,8051汇编等 o 执行过程: 二、汇编语言 汇编程序计算机 源程序 目标程序 连接程序 可执行程序 用户编辑程序 二、汇编语言 优点: (1) 程序容易编制、出错机会少、容易调试; (2) 算法刻画细致; (3) 程序紧凑、占用内存空间少、执行速度高; (4) 能充分发挥计算机的硬件功能。 缺点: (1) 计算机不能直接认识、执行,必须经过汇编变为 机器语言程序; (2) 通用性差。 o 种类:8086机器语言,8051机器语言等等 o 执行过程:直
5、接执行 o 例子: 三、机器语言 1010 0000 ;0号单元内容取入AL寄存器 0000 0000 0000 0000 1000 1010 ;1号单元内容取入AH寄存器 0010 0110 0000 0001 0000 0000 0000 0010 ;AL的内容与AH的内容相加,结 1100 0100 ;果存入AL中 1010 0010 ;AL的内容送入2号单元 0000 0010 0000 0000 1111 0100 ;停机 三、机器语言 缺点: (1) 机器语言难记,程序难编,易错,调试困难; (2) 机器语言通用性差。 优点: (1) 计算机能直接认识、执行; (2) 算法刻画细致
6、; (3) 程序紧凑,占用内存空间少,执行速度高; (4) 能充分发挥计算机的硬件功能。 汇编语言的用途 为什么学习8086/8088的汇编语言 第二节 为什么必须学习汇编语言 汇编语言的用途 o 汇编语言能干什么? 驱动程序, 系统程序、实时 通信程序、实时控制程序 o 汇编语言与C: 许多用汇编语言能做的工作也可 以用C语言来完成, 但是没有汇编语言作基础, 仍 然无法用C来编程 o 学习汇编语言对于理解CPU、存储原理是相当有 用的,而且可以使学习者在较深的理论层次上了 解计算机硬软件问题,对于从事软硬件开发的人 员来说,汇编语言可以说是基本功。 为什么学习8086/8088的汇编语言
7、从微处理器的发展讲 o Intel 4004 o Intel 8008 o Intel 8080 o Intel 8086/8088 o Intel 80186/80188 o Intel 80286 o Intel 80386(DX/SX) o Intel 80486 (DX/SX) o Intel Pentium (MMX) o Intel PII (Celeron) o Intel PIII(Celeron II) o Intel PIV 指令系统向下兼容 参考教材 o 齐志儒,高福祥 主编,东北大学 出版社出版汇汇 编语言程序设计编语言程序设计 2005年1月第3 版。 o 配套习题集
8、 第二章 计算机运算基础 2.1 进位计数制进位计数制 2.2 数制之间的转换数制之间的转换 2.3 二进制编码二进制编码 2.4 带符号数的机内表示带符号数的机内表示 2.5 二进制运算二进制运算 2.1 进位计数制进位计数制 o 按按进位进位的方法进行计数的方法进行计数,称为进位计数制称为进位计数制. o 数据无论使用哪种进位制都涉及到数据无论使用哪种进位制都涉及到基数基数 (Radix)与各数位的与各数位的“权权” (Weight)。 n 基数:基数:该进位制中允许的该进位制中允许的基本数码的个数基本数码的个数 n 权:权:以基数为底,数码所在位置序号的指数次幂以基数为底,数码所在位置序
9、号的指数次幂 o 例:例: 543.2D5102+4101+3100+210-1 二进制的基数为二进制的基数为2,有两个记数符号,有两个记数符号0和和1 例如:例如:10110.11B 124+023+122+1101+0100+1 10-1+110-2 22.75D 八进制的基数为八进制的基数为8,有,有8个记数符号个记数符号0到到7 例如:例如: 35.71Q 3 81 +5 80 +7 8-1 +1 8-2 D 64 57 29 十六进制的基数为十六进制的基数为16,可用数字符为,可用数字符为0到到9十个数字十个数字 符,另外从符,另外从A到到F表示表示10到到15这这6个数值,个数值,
10、十六进制十六进制 实际上是二进制的简化形式实际上是二进制的简化形式。 例如:例如: 4CF1.0DEH 4 163 +12 162 +15 161 +1 160 +0 16-1+1316-2+1516-3 D 4096 222 19697 2.2 数制之间的转换数制之间的转换 o十进制十进制o非十进制非十进制 o非十进制非十进制 o十进十进 制制 o二进制二进制o八、十六进制八、十六进制 o八、十六进制八、十六进制o二进制二进制 o十进制与非十进制间的转换十进制与非十进制间的转换 o非十进制间的转换非十进制间的转换 整数部分的转换整数部分的转换 o除基取余法除基取余法:用目标数制的:用目标数制
11、的基数基数(R=2R=2,8 8,1616)去除)去除 十进制数十进制数,第一次第一次相除所得余数为目的数的相除所得余数为目的数的最低位最低位 K K0 0, 将所得将所得商商再除以再除以基数基数,反复执行上述过程,反复执行上述过程,直到商为直到商为 “0”0”,所得余数为目的数的所得余数为目的数的最高位最高位 K Kn-1 n-1。 。 o例:(例:(81)10=(?)(?)2 o得:(得:(8181)10 10 = =(10100011010001)2 2 o8 1 o40o20o10o5o2o0 o 2o 2o 2o 2o 2o 2o 2 o1 oK0 o0 oK1 o0 oK2 o0
12、oK3 o1 oK4 o0 oK5 o1 oK6 o1 小数部分的转换小数部分的转换 o乘基取整法乘基取整法:小数小数乘以目标数制的乘以目标数制的基数基数(R=2,8, 16),),第一次第一次相乘结果的相乘结果的整数整数部分为目的数的部分为目的数的最高位最高位K-1, 将其小数部分再乘基数依次记下整数部分,反复进行下去,将其小数部分再乘基数依次记下整数部分,反复进行下去, 直到小数部分为直到小数部分为“0”,或满足要求的或满足要求的精度精度为止(即根据设备为止(即根据设备 字长限制,取有限位的近似值)。字长限制,取有限位的近似值)。 o0.65 o 2 oK-1 o1 o0.3 o 2 oK
13、-2 o0 o0.6 o 2 oK-3 o1 o0.2 o 2 oK-4 o0 o0.4 o 2 oK-5 o0 o0.8 o例:例: (0.650.65)10 10 =( ? ) =( ? )2 2 要求精度为小数五位。要求精度为小数五位。 o由此得:由此得:(0.65)10=(0.10100)2 o方法方法: o将相应进制的数按权展成将相应进制的数按权展成 多项式,按十进制求和多项式,按十进制求和 o(0F8C.B)(0F8C.B)16 16 o= = F F16162 2+8+816161 1+C+C16160 0+B+B1616- - 1 1 o= = 3840+128+12+0.68
14、753840+128+12+0.6875 o=3980.6875=3980.6875 o例: o从从小数点小数点开始,将二进制数的整数和小数部分开始,将二进制数的整数和小数部分 每四位每四位分为分为一组一组,不足不足四位的分别在整数的最高四位的分别在整数的最高 位前和小数的最低位后位前和小数的最低位后加加“0 0”补足,然后每组用补足,然后每组用 等值的十六进制码替代,即得目的数等值的十六进制码替代,即得目的数。 o例:例: 111011.10101 B = ? H111011.10101 B = ? H o 111011.10101 B = 3B.A8 H111011.10101 B = 3
15、B.A8 H o111011.10101 o小数点为界小数点为界 o00o000 oBo3oAo8 注意:注意:如果十六进制数最高位为如果十六进制数最高位为A-F,前面加,前面加0, 如如0A3.45H o从从小数点小数点开始,将二进制数的整数和小数部分开始,将二进制数的整数和小数部分 每三位每三位分为分为一组一组,不足不足三位的分别在整数的最高三位的分别在整数的最高 位前和小数的最低位后位前和小数的最低位后加加“0 0”补足,然后每组用补足,然后每组用 等值的八进制码替代,即得目的数等值的八进制码替代,即得目的数。 o例:例: 11010111.0100111 B = ? Q11010111
16、.0100111 B = ? Qo 11010111.0100111 B = 327.234 Q11010111.0100111 B = 327.234 Q o11010111.01001 11 o小数点为界小数点为界 o0o00 o7 o2o3 o2 o3 o4 2.3 二进制编码二进制编码 o 二进制编码的十进制数(BCD,Binary coded Decimal) o 字符编码 BCD 编码表 BCDBCD 码码十进制数十进制数BCDBCD 码码十进制数十进制数 0000010008 0001110019 001021010 001131011 010041100 010151101 0
17、11061110 011171111 这 6 种情 况在 BCD 码中不允 许出现 oASCII码 oUnicode 编码 (UCS2) ASCII码表 Unicode o Unicode 是一个16位的字符集,它包括了 几乎所有常见的信息交换用的字符(英、法、 德、中(简、繁)、朝鲜、日等),其64K 的编码空间有大约1/3尚未分配。 o “A” 的 Unicode 是4100 o “爱”的 Unicode 是3172 o “愛”的 Unicode 是1B61 2.4 带符号数的机内表示带符号数的机内表示 o 机器数与真值 o 原码表示法 o 反码表示法 o 补码表示法 o 过余码表示法 o
18、 计算机在处理实际问题时遇到的带符数,数据 的“+”号和“-”号在计算机内也是用二进制位 表示, “0”表示正, “1”表示负。 o 例如:N1=+1011011 N2=-1011011 o 机内表示:N1=01011011 N2=11011011 o 定义:将已经数值化了的带符号数称为机器数, 而把原来的数称为机器数的真值。 o 数据的最高位用来表示符号,称为符号位,符号位 为0表示正数,符号位为1表示负数,其余位为数值 位,用数据的绝对值表示。 o 例:(1) X=+85, X原=01010101 o (2) X=-85, X原=11010101 o (3)对于零: 0有两种表示形式 +0
19、原=00000000 -0原=10000000 o 在反码表示中,仍用0表示正数,1表示负数。 对于正数,其反码表示与其原码表示完全相 同;对于负数,符号位为1,其余用数值的反 码表示。 o 例:(1) X=+85, X反=01010101 o (2) X=-85, X反=10101010 o (3)对于零: 0有两种表示形式 +0反=00000000 -0反=11111111 o 在补码表示中,仍用0表示正数,1表示负数。 对于正数,其补码表示与其原码表示完全相 同;对于负数,符号位为1,其余各位按位 取反加1。 o 例:(1) X=+85, X补=01010101 o (2) X=-85,
20、 X补=10101011 o (3)对于零: 0只有一种表示形式 0补=00000000 o 在过余码表示中,是将数据的真值直接与一个 过余量相加,结果就是其过余码表示。过余量 通常为64、128、1024等。 o 举例: (1) X=+85, X过余128=128+85=11010101 (2) X=-85, X过余128=128-85=00101011 (3)对于零: 只有一种表示形式 +0过余128=128+0=10000000 2.5 二进制运算二进制运算 o 补码加减运算 o 逻辑运算 o两个正数相加: o 45 00101101(45的补码) o + 22 +00010110(22
21、的补码) o 67 01000011(67的补码) o正数加负数(负数绝对值小): o 45 00101101(45的补码) o+(-22)+11101010(-22的补码) o 23 00010111(23的补码) o负数加正数(负数绝对值大): o (-45) 11010011(-45的补码) o +22 +00010110(22的补码) o -23 11101001(-23的补码) o两个负数相加: o (-45) 11010011(-45的补码) o (-22)+11101010(-22的补码) o (-67) 10111101(-67的补码) o结论:结论: o 用补码表示的数据进行
22、加减运算 时可以不考虑符号位,直接运算,即与 不带符号的数据的运算完全相同。 o 该结论是否完全正确呢?请看下 面的例子: o两个正数相加: o 126 01111110(126的补码) o + 4 +00000100(4的补码) o 130 10000010(-126的补码) o o溢溢 出出 o为什么会出现错误的结果呢? 溢出: o 运算结果超出了目标所能容纳的范围, 称发 生了溢出。 o 例如:8位所能表示的补码数据的范围是: -128+127。 o 同号相加,异号相减时才可能发生溢出。 o 与运算 o 或运算 o 异或运算 o 非运算 P21 2.1-2.6 2.11 2.14 2.1
23、5 单号题 做双号小题,双号题做单号小题 2.7 2.8 48 第三章 微型计算机的结构 o 3.1 微型处理机的结构(8086/8088) o 3.2 存储器(组织) o 3.3 寻址方式 o 3.4 8086/8088指令系统(概括) o第三章 微型计算机的结构 49 3.1微型处理机的结构(8086/8088) o1、8086/8088CPU的内部结构 o2、8086/8088的寄存器和标志 50 1、8086/8088 CPU的内部结构 51 CPU执行程序的过程 o从内存取指 令 o执行指令 o从内存取指 令 o执行指令o从内存取指 令 o执行指令 o传统CPU执行指 令的过程 o现
24、代CPU执行指 令的过程 52 CPU执行程序的过程 o 指令队列 EU控制逻辑(判断指令类型) ALU相应动作 o 以 MOV AX,SI 为例 53 2、8086/8088的寄存器和标志 o 8086/8088的寄存器分为4种类型: o (1)通用寄存器 o (2)指针和变址寄存器 o (3)段寄存器 o (4)标志寄存器 54 (1)通用寄存器 o 通用寄存器的主要功能:保存CPU分析和执行 时产生的中间结果。 o 访问内存速度远远低于CPU的运算速度。 55 (2)指针与变址寄存器 56 (3)段寄存器 o15 0 57 (4)标志寄存器 o 标志寄存器长度为16位,其中9个位有定义。
25、 58 oCF, Carry Flag, 进位标志, 两 数相加,最高位向前的进位; 或两 数相减最高位向前的借位, 举例: o1000 0001 o1000 0000 o0000 0001 o+ o1 o1000 0000 o1000 0001 o1111 1111 o o1 59 oAF, Auxiliary Carry Flag, 辅助 进位标志, 两数相加,第3位向前 的进位; 或两数相减第3位向前 的借位, 举例: o0000 1001 o0001 1000 o0001 0001 o+ o0000 0000 o0000 0001 o1111 1111 o 60 oPF, Parity
26、 Flag, 奇偶标志, 两 数操作(算术或逻辑),结果的低8 位中含有1的位数是偶还是奇. 举例: o1000 0101 1010 1100 o1001 1101 1001 0111 o1000 0101 1000 0100 oAN D o结果: PF=1 61 oZF, Zero Flag, 零标志, 操作结 果的为0则ZF为1. 举例: o1111 1111 o0000 0001 o0000 0000 o+ o进位1 o操作结果为0, ZF=1 62 oSF, Sign Flag, 符号标志, 操作 结果的符号位(即最高位的状态). 举例: o1000 0101 1010 1100 o1
27、001 1101 1001 0111 o1000 0101 1000 0100 oAN D o结果: SF=1 63 oOF, Overflow Flag, 溢出标志, 算术操作,结果超过目标所能容 纳的范围. 举例: o0111 1110 (+126) o0000 0011 (+3) o1000 0001 (-127) o+ o如何判断运算 结果是否溢出? o00111 1110 (+126) o00000 0011 (+3) o01000 0001 (- 127) o+ o采用双符号位 64 o 还有三个标志位: IF, DF, TF暂时不讲,等用到时再讲. o 标志位在汇编语言程序设 计
28、中非常重要,必须掌握好. 65 3.2 存储器 o1、存储器的分段结构 o2、实际地址的产生 66 1、存储器的分段结构 67 o 逻辑地址:逻辑地址:由段基址和段内偏移地址组成的地址,由段基址和段内偏移地址组成的地址, 段基址和段内偏移地址都是段基址和段内偏移地址都是16位的无符号二进制数,位的无符号二进制数, 在程序设计时使用。在程序设计时使用。如如 CS=9482H,IP=2350H, 可以表示为可以表示为9482:2350。 o 实际地址(物理地址):实际地址(物理地址):存储器的绝对地址(存储器的绝对地址(20位位 的实际地址)的实际地址),范围从范围从00000HFFFFFH ,
29、是由是由 CPU访问存储器时由地址总线发出的地址。访问存储器时由地址总线发出的地址。实际地实际地 址址=段基址段基址10H(16)偏移地址)偏移地址 2、实际地址的产生 68 o举例: oCS=9482H, IP=2350H, 实际地址 为: o1001 0100 1000 0010 o 0010 0011 0101 0000 o1001 0110 1011 0111 0000 o一个实际地 址可以对应多 个逻辑地址. 69 操作类型操作类型正常使用(隐正常使用(隐 含)段基址含)段基址 可替换可替换 段地址段地址 偏移偏移 地址地址 物理地址计算物理地址计算 取指令取指令CS无无IP(CS)
30、 16d+(IP) 堆栈操作堆栈操作SS无无SP(SS) 16d+(SP) BP间址间址SSCS,DS,ES有效地址有效地址 EA (SS) 16d+EA 存取变量存取变量DSCS,ES,SS有效地址有效地址 EA (DS ) 16d+EA 源字符串源字符串DSCS,ES,SSSI(DS) 16d+(SI) 目标字符目标字符 串串 ES无无DI(ES) 16d+(DI) 70 3.3 寻址方式 o 3.3.1 操作数的种类 o 3.3.2 寻址方式 o 3.3.4 段更换和段跨越 o 3.3.5 有效地址的计算时间 71 3.3.1 操作数的种类 o (1) 立即操作数: 指令要操作的数据在指
31、令代码 中, MOV AL,10H ;指令码B010. o (2) 存储器操作数:指令要操作的数据在存储器 (内存)中, MOV AL,1234H; 指令码A03412. o (3)寄存器操作数:指令要操作的数据在CPU的寄 存器中, MOV AL,BL; 指令码88D8. o (4)I/O端口操作数, IN AL,20H; 指令码E420. 72 3.3.2 寻址方式 o 1. 固定寻址 o 2. 立即寻址 o 3. 寄存器直接寻址 o 4. 存储器寻址(存储器直接寻址,寄存器间接 寻址,基址寻址,变址寻址,基址变址寻址) o 5. 数据串寻址(暂不讲) 73 1. 固定寻址 o 指令要操作
32、的数据在指令中并没有明确给出, 但隐含在指令中. 例: o MUL BL ; AL*BL=AX o 在该指令中, AL和AX并未给出. 74 2.立即寻址 o 指令要操作的数据包含在指令码中.例: MOV AX,1234H 其指令码为B83412. 75 3.寄存器直接寻址 o 在指令(码)给出寄存器的名字(编码), 要操 作的数据在该寄存器中. o INC CX ; 指令码 41 o INC DX ; 指令码 42 o INC BX ; 指令码 43 o INC SP ; 指令码 44 o INC BP ; 指令码 45 76 4. 存储器寻址 o 在存储器寻址方式中, 要寻址的数据位于 存
33、储器(内存)中, 指令中直接或间接地给出 存储器操作数的地址.存储器寻址包括: 存储器直接寻址 寄存器间接寻址 基址寻址 变址寻址 基址变址寻址 77 存储器直接寻址 o 指令中直接给出操作数所处的存储单元的偏 移地址. 这个地址即有效地址。 例如: MOV AL,1000H; 指令码: A00010 MOV BX,1000H; 指令码: 8B1E0010 执行结果? AL=34H BX=1234H 78 寄存器间接寻址(1) o 操作数位于位于内存中, 操作数的有效地址 位于某个寄存器中, 在指令(码)中给出的是 该寄存器的名字(编码). 举例: MOV AL,BX ;指令码:8A07 MO
34、V AX,SI ;指令码:8B04 o 假定 BX=1001H, SI=1000H 则: 结果, AL=12H, AX=1234H 79 寄存器间接寻址(2) o 可以用于寄存器间接寻址的寄存器有: o BX BX o SI SI o DI DI 80 o 在基址寻址中, 操作数位于位于内存中, 操作 数的有效地址由基址寄存器BX或BP与一个位 移量相加给出, 在指令(码)中给出的是该基址 寄存器的名字(编码)及位移量. 举例: MOV AL,BX+1234H ;指令码:8A873412 o 假定 BX=1000H 则: 结果, AL=78H o基址寻址(1) 81 基址寻址(2) o 基址寻
35、址的格式: o BX+位移量 o BP+位移量 o 位移量的范围: 补码表示的8位或16位 o (-128+127,-32768+32767) 82 o o变址寻址(1) o 在变址寻址中, 操作数位于位于内存中, 操作 数的有效地址由变址寄存器SI或DI与一个位 移量相加给出, 在指令(码)中给出的是该变 址寄存器的名字(编码)及位移量. 举例: o MOV AL,SI+1234H ;指令 码:8A843412 o 假定 SI=1000H o 则: 结果, AL=78H 83 变址寻址(2) o 变址寻址的格式: o SI+位移量 o DI+位移量 o 位移量的范围: 补码表示的8位或16位
36、 o (-128+127,-32768+32767) 84 基址变址寻址(1) o 在基址变址寻址中, 操作数位于位于内存中, 操作数的有效地址由基址寄存器BX或BP与 变址寄存器SI或DI及一个位移量相加给出, 在指令(码)中给出的是寄存器的名字(编码) 及位移量. 举例: o MOV AL,BX+SI+1234H ; 指令 码:8A803412 o 假定:BX=1000H,SI=2000H o 则: 结果, AL=78H 85 基址变址寻址(2) o 基址变址寻址的格式: o BX+SI+位移量 BX+DI+位移量 o BP+SI+位移量 BP+DI+位移量 o BX+SI BX+DI B
37、P+SI BP+DI o 错误的写法: BX+BP SI+DI o 位移量的范围: 补码表示的8位或16位 o (-128+127,-32768+32767) 86 需要注意的问题 o 存储器寻址方式中的段地址 o 寻址方式中不能出现的情况 87 存储器寻址方式中的段地址 o 在存储器寻址方式中只给出了偏移地址, 其 段地址是隐含的, 一般情况下, 是DS, 只有 特殊情况下是SS. o 特殊情况: 在基址寻址和基址变址寻址方式 下, 基址寄存器是BP. o 请看下面的例子: 88 o 假定 DS=1000H, SS=2000H, BP=0100H, BX=0100H, 如下指令在执行完 后的
38、结果分别是什么? o MOV AX,BX+100H o MOV AX,BP+100H 89 寻址方式中不能出现的情况 o 立即数只能用于源操作数寻址 o 除源操作数为立即寻址方式外,其中一个操 作数的寻址方式必须是寄存器直接寻址,即 两个操作数不能同时为存储器操作数 o 例如 MOV data1,12h MOV data1,data2 错 90 3.3.4 段更换和段跨越(1) o 当要操作的数据不在隐含段中时, 就需要段 更换或段跨越.要寻址的数据在2000H段的 0100H单元,而目前没有一个段寄存的值是 2000H, 就需要将2000H装入某个段寄存 器,如DS,这就是段更换. o MO
39、V AX,2000H o MOV DS,AX o MOV BX,0100H o MOV AL,BX 91 o 当要操作的数据不在隐含段中时, 就需 要段更换或段跨越.要寻址的数据在2000H段的 0100H单元,而目前CS段寄存的值是2000H,可 在寻址操作数加一段跨越前缀,如CS:,这就是段 跨越. o MOV BX,0100H o MOV AL,CS:BX o3.3.4 段更换和段跨越(2) 92 3.3.5 有效地址的计算时间 93 3.4 指令系统 共分为14类92种指令. (1)数据传送 (8)循环控制 (2)算术运算 (9)调用与返回 (3)逻辑运算 (10)BCD调整 (4)移
40、位 (11)输入输出 (5)标志位操作 (12)中断处理 (6)转移 (13)外同步 (7)数据串操作 (14)空操作 94 作 业 o 3.1 3.2 3.6 3.8 3.11 3.15 95 3.3 寻址方式 o 3.3.1 操作数的种类 o 3.3.2 寻址方式 o 3.3.4 段更换和段跨越 o 3.3.5 有效地址的计算时间 96 3.3.1 操作数的种类 (1) 立即操作数: 指令要操作的数据在指令代码中, MOV AL,10H ;指令码B010. (2) 存储器操作数:指令要操作的数据在存储器(内 存)中, MOV AL,1234H; 指令码A03412. (3)寄存器操作数:指
41、令要操作的数据在CPU的寄存 器中, MOV AL,BL; 指令码88D8. (4)I/O端口操作数, IN AL,20H; 指令码E420. 97 3.3.2 寻址方式 o 1. 固定寻址 o 2. 立即寻址 o 3. 寄存器直接寻址 o 4. 存储器寻址(存储器直接寻址,寄存器间接 寻址,基址寻址,变址寻址,基址变址寻址) o 5. 数据串寻址(暂不讲) 98 1. 固定寻址 o 指令要操作的数据在指令中并没有明确给出, 但隐含在指令中. 例: MUL BL ; AL*BL=AX 在该指令中, AL和AX并未给出. 99 2.立即寻址 o 指令要操作的数据包含在指令码中.例: MOV AX
42、,1234H 其指令码为B83412. 100 3.寄存器直接寻址 o 在指令(码)给出寄存器的名字(编码), 要操 作的数据在该寄存器中. o INC CX ; 指令码 41 o INC DX ; 指令码 42 o INC BX ; 指令码 43 o INC SP ; 指令码 44 o INC BP ; 指令码 45 101 4. 存储器寻址 o 在存储器寻址方式中, 要寻址的数据位于 存储器(内存)中, 指令中直接或间接地给出 存储器操作数的地址.存储器寻址包括: 存储器直接寻址 寄存器间接寻址 基址寻址 变址寻址 基址变址寻址 102 存储器直接寻址 o 指令中直接给出操作数所处的存储单
43、元的偏 移地址. 这个地址即有效地址。 例如: MOV AL,1000H; 指令码: A00010 MOV BX,1000H; 指令码: 8B1E0010 执行结果? AL=34H BX=1234H 103 寄存器间接寻址(1) o 操作数位于位于内存中, 操作数的有效地址 位于某个寄存器中, 在指令(码)中给出的是 该寄存器的名字(编码). 举例: MOV AL,BX ;指令码:8A07 MOV AX,SI ;指令码:8B04 o 假定 BX=1001H, SI=1000H 则: 结果, AL=12H, AX=1234H 104 寄存器间接寻址(2) 可以用于寄存器间接寻址的寄存器有: BX
44、 BX SI SI DI DI 105 o 在基址寻址中, 操作数位于位于内存中, 操作 数的有效地址由基址寄存器BX或BP与一个位 移量相加给出, 在指令(码)中给出的是该基址 寄存器的名字(编码)及位移量. 举例: MOV AL,BX+1234H ;指令码:8A873412 o 假定 BX=1000H 则: 结果, AL=78H o基址寻址(1) 106 基址寻址(2) o 基址寻址的格式: BX+位移量 BP+位移量 o 位移量的范围: 补码表示的8位或16位 (-128+127,-32768+32767) 107 o o变址寻址(1) o 在变址寻址中, 操作数位于位于内存中, 操作
45、数的有效地址由变址寄存器SI或DI与一个位 移量相加给出, 在指令(码)中给出的是该变 址寄存器的名字(编码)及位移量. 举例: o MOV AL,SI+1234H ;指令 码:8A843412 o 假定 SI=1000H o 则: 结果, AL=78H 108 变址寻址(2) o 变址寻址的格式: SI+位移量 DI+位移量 o 位移量的范围: 补码表示的8位或16位 (-128+127,-32768+32767) 109 基址变址寻址(1) o 在基址变址寻址中, 操作数位于位于内存中, 操作数的有效地址由基址寄存器BX或BP与 变址寄存器SI或DI及一个位移量相加给出, 在指令(码)中给
46、出的是寄存器的名字(编码) 及位移量. 举例: o MOV AL,BX+SI+1234H ; 指令 码:8A803412 o 假定:BX=1000H,SI=2000H o 则: 结果, AL=78H 110 基址变址寻址(2) o 基址变址寻址的格式: BX+SI+位移量 BX+DI+位移量 BP+SI+位移量 BP+DI+位移量 BX+SI BX+DI BP+SI BP+DI o 错误的写法: BX+BP SI+DI o 位移量的范围: 补码表示的8位或16位 (-128+127,-32768+32767) 111 需要注意的问题 o 存储器寻址方式中的段地址 o 寻址方式中不能出现的情况
47、112 存储器寻址方式中的段地址 o 在存储器寻址方式中只给出了偏移地址, 其 段地址是隐含的, 一般情况下, 是DS, 只有 特殊情况下是SS. o 特殊情况: 在基址寻址和基址变址寻址方式 下, 基址寄存器是BP. o 请看下面的例子: 113 o 假定 DS=1000H, SS=2000H, BP=0100H, BX=0100H, 如下指令在执行完 后的结果分别是什么? o MOV AX,BX+100H o MOV AX,BP+100H 114 寻址方式中不能出现的情况 o 立即数只能用于源操作数寻址 o 除源操作数为立即寻址方式外,其中一个操 作数的寻址方式必须是寄存器直接寻址,即 两
48、个操作数不能同时为存储器操作数 o 例如 MOV data1,12h MOV data1,data2 错 115 3.3.4 段更换和段跨越(1) o 当要操作的数据不在隐含段中时, 就需要段 更换或段跨越.要寻址的数据在2000H段的 0100H单元,而目前没有一个段寄存的值是 2000H, 就需要将2000H装入某个段寄存 器,如DS,这就是段更换. MOV AX,2000H MOV DS,AX MOV BX,0100H MOV AL,BX 116 o 当要操作的数据不在隐含段中时, 就需 要段更换或段跨越.要寻址的数据在2000H段的 0100H单元,而目前CS段寄存的值是2000H,可
49、 在寻址操作数加一段跨越前缀,如CS:,这就是段 跨越. o MOV BX,0100H o MOV AL,CS:BX o3.3.4 段更换和段跨越(2) 117 3.3.5 有效地址的计算时间 118 3.4 指令系统 共分为14类92种指令. (1)数据传送 (8)循环控制 (2)算术运算 (9)调用与返回 (3)逻辑运算 (10)BCD调整 (4)移位 (11)输入输出 (5)标志位操作 (12)中断处理 (6)转移 (13)外同步 (7)数据串操作 (14)空操作 119 作 业 o 3.1 3.2 3.6 3.8 3.11 3.15 120 第四章 汇编语言 4.1 汇编语句格式 4.
50、2 汇编语言中数据的表示方法 4.3 运算符号 4.4 伪指令 4.5 汇编语言的上机过程 121 4.1 汇编语句格式 4.1.1 字符集 4.1.2 汇编语句格式 122 oMicrosoft的宏汇编语言由下列字符组成: o(1)英文字母:AZ和az。 o(2)数字字符:09。 o(3)算术运算符:+,-,*,/。 o(4)关系运算符:。 o(5)分隔符:,:,;,(,), (空格),TAB(制表符)。 o(6)控制符:CR(回车),LF(换行),FF(换页)。 o(7)其它字符:,_(下划线),.,%,!。 o4.1.1 字符集 123 o4 .1. 2 汇 编 语 句 格 式 oDSE