微机jncl2汇编语言jnc是什么意思思

第一章 计算机基础知识学习目标:1.掌握常用进位计数制及其互相转换; 2.掌握数的原码、反码、补码表示法,并熟练掌握补码加减运算; 3.掌握 BCD、ASCLL 码; 4.掌握软、硬件概念及相互关系; 5.理解数的定点和浮点表示; 6.了解汉字字符集及其编码;了解图信息数字化。教学重点:1.计算机中的数制及其编码; 2.微机的基本组成和工作原理。教学难点:1.机器数和真值; 2.补码的表示方法和补码运算。教学内容:一、 计算机中的运算基础1. 数制及其转换 1)任意进制数的共同特点(n 进制)n=2、8、10、16 ① n 进制数最多是由 n 个数码组成 十进制数的组成数码为:0~9 二进制数的组成数码为:0、1 八进制数的组成数码为:0~7 十六进制数的组成数码为:0~9、A~F 十六进制数和十进制数的对应关系是: 0~9 相同,A-10,B-11,C-12,D-13,C-14,F-15 ② n 进制数的基数或底数为 n,作算术运算时,有如下特点: 低位向相邻高位的进位是逢 n 进 1(加法); 低位向相邻高位的借位是以 1 当本位 n(减法)。 ③ 各位数码在 n 进制数中所处位置的不同,所对应的权也不同 以小数点为分界点: 向左(整数部分):各位数码所对应的权依次是 n0、n1、n2,… 向右(小数部分):各位数码所对应的权依次是 n-1、n-2、n-3,… 例:1 2)数制的转换 ① 非十进制数→十进制数 转换方法:按位权展开求和 例:101.11B = 1*22+1*20+1*2-1+1*2-2 = 4+1+0.5+0.25 = 5.75 F94H = 15*162+9*161+4*160 = 3988 注意点:只有十进制数的下标可以省略,其他进制数不可以省略。 ② 十进制数→非十进制数(K 进制数) 转换方法:分成小数和整数分别转换。 整数部分:除 K 取余,直至商为 0,先得的余数为低位; 小数部分:乘 K 取整,先得的整数为高位。 例:把 3988 转换成 16 进制数十进制数转换为二进制数的另一种:逐次减 2 的最高次幂法。例:将 1539 转换为二进制数表示2 例:,,B 1 2. 模的概念 若 a 和 b 除以 M,余数相等,则称 a 和 b 对于 M 是同余的,则可以写成:a = b(mod M) (mod M) 容器的最大容量称为模。可写成:KM + X = X 3. 有符号数在计算机中的表示方法 在计算机中,一个有符号数可以用原码、补码和反码表示。 1) 共同规律: ① 用 0 表示正号,用 1 表示负号,且摆放在数据的最高位,有符号数和无 符号数表示的根本区别在于无符号数的最高位是数值位, 有符号数的最高位是符 号位; ② 同一正数的原、补、反码都相同。 ③ 定义区间均对模 2n 而言,其中 n 表示有符号数的二进制代码位数。 2)其它规律: ① 任一负数的原码和对应的正数(绝对值相等)的原码仅是符号位不同; ② 任一负数的反码是对应的正数的反码的各位求反,反之亦然; ③ 任一负数的补码是对应的正数的补码的各位求反,然后加 1,反之亦然; ④ 从定义区间上看 原码和反码的定义区间相同,是 –2n-1<X<2n-1; 补码的定义区间是 –2n-1≤X<2n-1; ⑤ 0 的原码、反码有+ 0 和- 0 之分; 0 的补码只有一种表达方式。 例 1:设 X = +97 求[X]原、[X]反、[X]补 (mod 28) 解:97=1100001B [X]原=B; [X]反=[X]补=B。 例 2:设 X = -97, 求[X]原、[X]反、[X]补 解:97=1100001B [X]原=B; [X]反=B; [X]补=B。 例 3:设 X = -137 求[X]原、[X]反、[X]补 解:137=B [X]原=B;3AEDB4H若十六进制数转换为二进制数,则将每一位拆成 4 位。(mod 28)(mod 29) [X]反=B; [X]补=B。 4. 补码、反码加减运算规则: [X+Y]补=[X]补+[Y]补 [X-Y]补=[X]补+[-Y]补 [-Y]补=[[Y]补]补 5. 基本名词 位:BIT,缩写为 b; 字节:BYTE,由 8 位二进制数代码表示,缩写为 B; 字: WORD, 取决于计算机 CPU 的字长, 内部寄存器的位数, 其中 8086CPU 为 16 位,386、486CPU 为 32 位; 千字节:1KB = 1024B = 210B , 吉字节:1GB = 230B=1024MB 6. 带符号数运算时的溢出问题 溢出和进位的区别:进位是指最高位向更高位的进位,而溢出是指运算结果 超出数所能表示的范围。 带符号数所能表示的范围:(若用 n 位二进制数码表示) 原码:-(2n-1-1)≤X≤2n-1-1 补码:-2n-1≤X≤2n-1-1 反码:-(2n-1-1)≤X≤2n-1-1 溢出的判断方法: 设 CD7 是符号位向更高位的进位,CD6 是数值位向符号位的进位,则溢出 可用 V=CD7 CD6 判断,V=1 表示有溢出,V=0 表示无溢出。 对于加减法,也可以这样判断,只有下述 4 中情况有可能产生溢出: 正数+正数,结果应为正,若为正,则无溢出;若为负,则有溢出。 负数+负数,结果应为负,若为负,则无溢出;若为正,则有溢出。 正数-负数,结果应为正,若为正,则无溢出;若为负,则有溢出。 负数-正数,结果应为负,若为负,则无溢出;若为正,则有溢出。 对于乘(除)法,乘积(商)超过了能存放的范围有溢出,否则无溢出。 其它情况肯定无溢出。 注意点:无符号数和带符号数表示方法的区别: 无符号数:无符号位,所有位都是数值位,即最高位也是数值位; 带符号数:有符号数,且在最高位,其余各位才是数值位。 兆字节:1MB = 220B, 太字节:1TB = 240B=1024GB [X+Y]反=[X]反+[Y]反 [X-Y]反=[X]反+[-Y]反 [-Y]反=[[Y]反]反二、 计算机中数据的编码1. 十进制数在计算机中的表示方法4 BCD(Binary Coded Decimal)是用 4 位二进制代码表示一位十进制数,由于 4 位二进制代码表示 16 种状态,而十进制数只取其中 10 种状态。选择不同的对 应规律,可以得到不同形式的 BCD 码。最常用的是 8421BCD 码。 例:59 = ()BCD 465 = (,0101)BCD ()BCD = (,0010)BCD = 682 注意点:BCD 码与二进制数之间不能直接转换,需将 BCD 码先转换成十进 制数, 再由十进制数转换为二进制数。 与十六进制数的区别在于: 组内逢 2 进 1, 组间逢十进 1。 表 1-1 8421 BCD 码 十进制 数 0 1 2 3 4 8421BCD 码 10
十进制 数 5 6 7 8 9 8421BCD 码 11 2. 字符在计算机中的表示方法 由于大、小写英文字母、0~9 数字字符、标点符号、计算机特殊控制符 一共不超过 128 个,所以只要用七位二进制数码来表示,称为 ASCII 码。国际 标准为 ISO-646,我国国家标准为 GB1988。在计算机中,一个字符通常用一个 字节(八位)表示,最高位通常为 0 或用于奇偶校验位。 例: ‘A‘= 41H = B ‘a‘= 61H = B ‘0‘= 30H = B ‘;‘ = 3BH = B5 ISO2022 标准在兼容 ISO646 的基础上扩展成 8 位码,可表示 256 个字符,扩 充了希腊字母、数学符号、非拉丁字符、商用图符,游戏符号等。 3. 机器数和真值 机器数:是摆在计算机寄存器或存储器或 I/O 端口中的数; 真值:描述机器数对应于某一确定的码制就有唯一确定的值。 例:机器数 34H,用原码表示为+52;用反码表示为+52;用补码表示为+52; 用 BCD 码表示为 34;用 ASCII 码表示为 4。 即[+52]原=[+52]反=[+52]补=34H [34]BCD = 34H [4]ASCII = 34H 机器数 97H,用原码表示为-23;用反码表示为-104;用补码表示为-105;用 BCD 码表示为 97;用 ASCII 码表示为 ETB。三、汉字编码计算机系统中汉字在不同应用界面有不同的编码,如输入、存储、传输、交 换、 显示等不同场合同一汉字各有不同的编码,同一应用界面也存在多种汉字代 码。 1. 常用汉字字符集与编码 按使用频度可把汉字分为高频字(约 100 个)、常用字(约 3000 个)、次 常用字(约 4000 个)、罕见字(约 8000 个)和死字(约 45000 个)。6 我国 1981 年公布了―信息交换用汉字字符集· 基本集‖(GB2312-80)。该标 准选取 6763 个常用汉字和 682 个非汉字字符,为每个字符规定了标准代码。该 字符集及其编码称为国标交换码,简称国标码。 GB2312 字符集由三部分组成:第一部分是字母、数字和各种常用符号(拉 丁字母、俄文字母、日文平假名与片假名、希腊字母、制表符等)共 682 个:第 二部分是一级常用汉字 3755 个,按汉语拼音顺序排列:第三部分是二级常用汉 字 3008 个,按偏旁部首排列。 GB2312 国标字符集构成一个二维平面,分成 94 行 94 列,行号称为区号, 列号称为位号, 分别用七位二进制数表示。每个汉字或字符在码表中都有各自确 定的位置,即有一个唯一确定的 14 位编码(7 位区号在左,7 位位号在右),用 区号和位号作为汉字的编码就是汉字的区位码。 GB2312-80 字符集中字符二维分 布如图 1-1 所示。汉字的区位码与国标码不相同。 为了正确无误地进行信息传输, 不于 ASCII 码的控制代码相混淆,在区位码的区号和位号上各自加 32(即 20H),就构成 了该汉字的国标码。 为了存储与处理方便,汉字国际码的高低七位各用一个字节(8 位)来表示, 即用两个字节表示一个汉字。在计算机中双字节汉字与单字节西文字符混合使 用、处理,汉字编码的各个字节若不予以特别标识,就会与单字节的 ASCII 码 混淆不清;为此,将标识汉字的两个字节编码的最高位置为 1,这种最高位为 17 的双字节汉字编码就是中国大陆普遍采用的汉字机内码,简称内码,是计算机内 部存储、处理汉字所使用的代码。内码、国 BIAO 2 码、区位码三者的关系是: 高字节内码=高字节国标码+80H=区码+20H+80H=区码+0A0H=区码+160 低字节内码=低字节国标码+80H=位码+20H+80H=位码+0A0H=位码+160 繁体汉字在一些地区和领域仍在使用,国家又制定出相应的繁体汉字字符 集,国家标准代号是 GB12345-90―信息交换用汉字编码字符集——辅助集‖,包 含了 717 个图形符号和 6866 个繁体汉字。 BIG5 是我国台湾地区计算机系统中使 用的汉字编码字符集, 包含了 420 个图形符号和 13070 个繁体汉字 (不用简体字) 。 2.通用编码字符集 UCS 字符集的基本要素是字汇和代码;字汇应涵盖各个文种,满足已有的和潜在 的应用要求;编码应统一简明,保证不同系统可直接进行信息交换。 ISO/IEC10646,即―通用编码字符集‖UCS(Universal Coded Character Set) 规定了全世界现代书面语言文字所使用的全部字符的标准编码, 用于世界上各种 语言文字、字母符号的数字化表示、存储、传输、交换和处理,真正实现了所有 字符在同一字符集内等长编码、同等使用的多文种信息处理。 1993 年 5 月该标准的第一部分即 ISO/IEC10646.1 正式发布。我国国家标准 GB13000 和 GB13000.1 与上述两个标准相互对应,技术内容完全一致。 UCS 编码字符集的总体结构有组、平面、行、字位构成四维编码空间,即 UCS 有 00--7F 共 128 个组、每个组有 00--FF 共 256 个平面、每个面有 00--FF 共 256 行、每行有 00--FF 共 256 个字(位)每个字位用八位二进制数(一个字节) 表示。这样,UCS 中每一个字符用四个字节编码,对应每个字符在编码空间的 组号、平面号、行号和字位号,称为四八位正则形式,记作 UCS-4。UCS-4 提供 了极大的编码空间,可安排多达 13 亿个字符,充分满足世界上多种民族语言文 字信息处理的需要。 3、汉字的输入 向计算机输入汉字信息的方法很多,众多的汉字输入方法可归纳成三大类: 键盘输入法、 字形识别法和语音识别法。其中语音识别法在一定条件下能达到某 些预期效果(接近实用),字形识别法中的印刷汉字扫描输入自动识别已广泛应 用于文献资料录排存挡, 手写汉字联机识别已达到实用的水平,而普通广泛采用 的汉字输入方法仍是简便的在英文键盘上输入汉字的方法。汉字数量庞大,无法 使每个汉字与键盘上的键一一对应,因此每个汉字须用几个键符编码表示,这就 是汉字的输入编码。 汉字输入编码多达几百种,可归纳为四类:数字编码、字音编码、字形编码 和音形编码。不管采用哪一种输入编码,汉字在计算机中的内码、交换码都是一 样的,由该种输入方法的程序自动完成输入码到内码的转换。 4.汉字的输出8 在计算机内部,只对汉字内码进行处理,不涉及汉字本身的形象——字形。 若汉字处理的结果直接供人使用,则必须把汉字内码还原成汉字字形。一个字符 集的所有字符的形状描述信息集合在一起称为该字符集的字形信息库,简称字 库。不同的字体(如宋、仿、楷、黑等)有不同的字库。每个输出一个汉字,都 必须根据内码到字库中找出该汉字的字形描述信息,再送去显示或打印。 描述字符(包括汉字)字形的方法主要有两种:点阵字型和轮廓字形。 点阵字形由排成方阵(如 16× 16、24× 24、48×48……)的一组二进制数字 表示一个字符,1 表示对应位置是黑点,0 表示对应位置是空白。16× 16 点阵字 形常用于屏幕显示,笔画生硬、细节难以区分:打印输出常用 24× 24、40× 40、 48× 48、等等甚至 96× 96。点阵的数目越多,笔锋越完整,字迹亦清晰美观。 轮廓字行表示比较复杂。该方法用一组直线和曲线来勾画字符(如汉字、字 母、符号、数字等)的笔画轮廓,记下构成字符的每一条直线和曲线的数学描述 (端点和控制点的坐标)。轮廓字符描述的精度高,字形可任意缩放而不变形, 也可按需要任意变化。轮廓字形在输出之前必须通过复杂的处理转换成点阵形 式。Windows True Type 字库就是典型的轮廓字符表示法。四、微机系统的基本组成由硬件系统和软件系统两部分组成,并采用总线结构。 1. 硬件系统 是指构成微机系统的全部物理装置。 通常,计算机硬件系统由五部分组成: 1)存储器:用来存放数据和程序,例如半导体存储器、磁介质存储器; 2)微处理器(包括运算器和控制器):运算器用来完成二进制编码的算术 和逻辑运算; 控制器控制计算机进行各种操作的部件; 3)输入设备及其接口电路:用来输入数据、程序、命令和各种信号,例如 键盘、鼠标器等; 4)输出设备及其接口电路:用来输出计算机处理的结果,例如打印机、CRT 等。 微机硬件系统只不过把运算器和控制器用大规模集成电路工艺技术集成在 一块芯片上,这块芯片称为 CPU(中央处理单元),其余组成部分同上。 5) 网络设备 2. 软件系统 是指计算机所编制的各种程序的集合。可分为两大类:9 1)系统软件 用来实现对计算机资源管理、控制和维护,便于人们使用计算机而配置的软 件,该软件由厂家提供。它包括操作系统(或监控管理程序),各种语言的汇编、 解释、编译程序,数据库管理程序,编辑、调试、装配、故障检查和诊断等工具 软件。 操作系统在系统软件中具有特殊地位。只要计算机处于工作状态,就有操作 系统的有关部分在内存储器中, 负责接受、分析并调度执行用户的程序和各种命 令,DOS 及 WINDOWS 是目前最流行的微机操作系统。 2)应用软件 是指用户利用计算机以及它所提供的各种系统软件编制的解决各种实际问 题的程序。它包括支撑软件和用户自己编制的程序。 支撑软件有: 文字处理软件:Wordstar、Write、Wps、Wode、中文之星等; 表格处理软件:Lotus1-2-3、CCED、Excel 等; 图形处理软件:AutoCAD、TANGO、Powerpoint、PROTEL98 以及 2000 等; 图文排版软件:华光、科印、方正等; 防治病毒软件:SCAN、KILL、CLEAN、MSAV、KV3000; 工具软件:PCTOOLS 等。 套装软件: Microsoft-office, 它基于 Windows, 包括 Word、 Excel、 Powerpoint、 MS Mail 等。 3. 软、硬件的关系 硬件系统是人们操作微机的物理基础,软件系统是人们与微机系统进行信息 交换、通信对话、按人的思维对微机系统进行控制和管理的工具。 关系如下: 用户 各种应用软件 各种系统软件 微机硬件系统 4. 微机的总线结构 1) 总线:是指连接多于两个不见的公共信息通路,或者说是多个部件之间 的公共连线。 2) 按照总线上传送信息内容分类: 数据总线 DB:传送数据信息; 控制总线 CB:传送控制信息,确定数据信息的流向; 地址总线 AB:传送地址信息,确定数据信息的传送地址。10 第二章
微处理器学习目标:1.掌握 CPU 寄存器结构、作用,存储器分段与物理地址形成; 2.了解微处理器的发展。 3.掌握 CPU 引脚功能,理解存储器读/写时序;最小/最大模式的概念。教学重点:1. 8086 微处理器结构: CPU 内部结构:总线接口部件 BIU,执行部件 EU; CPU 寄存器结构:通用寄存器,段寄存器,标志寄存器,指令指针寄存器; 2. 8086 微机系统存储器结构: 存储器地址空间与数据存储格式; 存储器组成;存储器分段。 3. CPU 引脚及其功能:公用引脚,最小模式控制信号引脚,最大模式控制 信号引脚; 4. 存储器读/写时序。教学难点:1.存储器的地址表达方式。 2.引脚功能,最小/最大模式系统形成; 3.存储器读/写时序。教学内容:一、CPU 的结构 CPU 的内部结构11
CPU 的内部是由两个独立的工作部件构成,分别是总线接口部件 BIU(Bus Interface Unit)和执行部件 EU(Execution Unit)。图中虚线右半部分是 BIU,左半部分是 EU。两者并行操作,提高了 CPU 的运行效率。 1)指令执行部件 指令执行部件 EU 主要由算术逻辑运算单元 ALU、标志寄存器 FR、通用寄 存器组和 EU 控制器等四个部件组成。其主要功能是执行命令。一般情况下指令 顺序执行,EU 可不断地从 BIU 指令队列缓冲器中取得执行的指令,连续执行指 令, 而省去了访问存储器取指令所需的时间。如果指令执行过程中需要访问存储 器存取数据时,只需将要访问的地址送给 BIU,等待操作数到来后再继续执行。 遇到转移类指令时则将指令队列中的后续指令作废,等待 BIU 重新从存储器中 取出新的指令代码进入指令队列缓冲器后, EU 才能继续执行指令。 这种情况下, EU 和 BIU 的并行操作回受到一定的影响,但只要转移类指令出现的频率不是很 高,两者的并行操作仍然能取得较好的效果。 EU 中的算术逻辑运算部件 ALU 可完成 16 位或 8 位二进制数的运算,运算 结果一方面通过内部总线送到通用寄存器组或 BIU 的内部寄存器中以等待写到 存储器;另一方面影响状态标志寄存器 FR 的状态标志位。16 位暂存器用于暂时 存放参加运算的操作数。 EU 控制器则负责从 BIU 的指令队列缓冲器中取指令、分析指令(即对指令 译码),然后根据译码结果向 EU 内部各部件发出控制命令以完成指令的功能。12 2)总线接口部件 BIU 总线接口部件 BIU 主要有地址加法器、专用寄存器组、指令队列缓冲器以及 总线控制电路等四个部件组成。其主要功能是负责完成 CPU 与存储器或 I/O 设 备之间的数据传送。BIU 中地址加法器将来自于段寄存器的 16 位地址段首地址 左移 4 位后与来自于 IP 寄存器或 EU 提供的 16 位偏移地址相加(通常将―段首 地址: 偏移地址‖称为逻辑地址) , 形成一个 20 位的实际地址 (又称为物理地址) , 以对 1MB 的存储空间进行寻址。具体讲:当 CPU 执行指令时,BIU 根据指令的 寻址方式通过地址加法器形成指令在存储器中的物理地址, 然后访问该物理地址 所对应的存储单元, 从中取出指令代码送到指令队列缓冲器中等待执行。指令队 列一共 6 个字节 (8088 的指令队列为 4 个字节) , 一旦指令队列中空出 2 个 (8086 中)或一个(8088 中)字节,BIU 将自动进入读指令操作以填满指令队列;遇 到转移类指令时,BIU 将指令队列中的已有指令作废,重新从新的目标地址中取 指令送到指令队列中;当 EU 需要读写数据时,BIU 将根据 EU 送来的操作数地 址形成操作数的物理地址, 从中读取操作数或者将指令的执行结果传送到该物理 地址所指定的内存单元或外设端口中。 BIU 的总线控制电路将 CPU 的内部总线与外部总线相连,是 CPU 与外部交 换数据的通路。对于 8086 而言,BIU 的总线控制电路包括 16 条数据总线、20 条地址总线和若干条控制总线;而 8088 的总线控制电路与外部交换数据的总线 宽度是 8 位,总线控制电路与通用寄存器组之间的数据总线宽度也是 8 位,而 EU 内部总线仍是 16 位,这也是将 8088 称为准 16 位的微处理器的原因。 3) CPU 寄存器阵列(寄存器组)
CPU 中有 14 个 16 位的寄存器,按用途分为四类: ① 通用寄存器:8 个,分为两组: 数据寄存器:累加器 AX、基址寄存器 BX、计数寄存器 CX、数据寄存器 DX,每个数据寄存器可存放 16 位操作数,也可拆成两个 8 位寄存器,用来存 放 8 位操作数,AX、BX、CX、DX 分别可拆成 AH、AL、BH、BL、CH、CL、 DH、DL,其中 AH、BH、CH、DH 为高八位,AL、BL、CL、DL 为低八位; 指针和变址寄存器:堆栈指针 SP、基址指针 BP、源变址寄存器 SI、目的变 址寄存器 DI,可用来存放数据和地址,但只能按 16 位进行存取操作。 通用寄存器的特定用法见表 2.1。 ② 段寄存器:4 个 代码段寄存器 CS:用于存放当前代码段的段地址; 数据段寄存器 DS:用于存放当前数据段的段地址; 附加段寄存器 ES:用于存放当前附加段的段地址; 堆栈段寄存器 SS:用于存放当前堆栈段的段地址。 ③ 专用寄存器:两个13 标志寄存器 FR: 仅定义了 9 位, 其中 6 位用作状态标志, 3 位用作控制标志。 a. 状态标志位用来反映 EU 执行算术或逻辑运算的结果特征,6 个状态位如 下: 进位标志 CF:当加法运算有进位,减法运算有借位时,CF=1,否则 CF=0;辅助进位标志 AF:在字节操作时,低 4 位向高 4 位有进位(加法)或有借位(减法); 在字操作时,低字节向高字节有进位(加法)或有借位(减法)时,则 AF=1, 否则 AF=0。 奇偶校验标志 PF:当运算结果低 8 位―1‖的个数为偶数时,PF=1,否则 PF=0; 零标志 ZF:当运算结果位 0 时,ZF=1,否则 ZF=0; 溢出标志 OF:在有符号数的算术运算时,当运算结果有溢出时,OF=1,否则 OF=0; 符号标志 SF: 在有符号数的算术运算时, 当运算结果为负时, SF=1, 否则 SF=0; b. 控制标志位用来控制 CPU 的操作,3 个标志位如下: 方向标志 DF:当 DF=0 时,在串操作指令中,进行自动增址操作;当 DF=1 时, 在串操作指令中,进行自动减址操作; 中断允许标志 IF:当 IF=0 时,禁止 CPU 响应可屏蔽中断;当 IF=1 时,允许 CPU 响应可屏蔽中断; 单步陷阱标志 TF:当 IF=1 时,表示 CPU 进入单步工作方式;当 IF=0 时,表示 CPU 正常执行程序。
CPU 寄存器结构见图 2.1。 指令指针 IP:用来存放要取的下一条指令在当前代码段中的偏移地址,程序 不能直接访问 IP,在程序运行过程中,BIU 可修改 IP 中内容。二、
存储器的结构1. 存储器地址空间与数据存储格式 1)地址空间:1MB,地址范围:00000H~FFFFFH 2)数据存储格式: 每个存储单元存储一个字节的数据,存取一个字节的数据需一个总线周期。 两个相邻的字节定义为一个字。 每一个字的低字节存放在低地址中,高字节存放 在高地址中,并以低字节的地址作为字地址。若字地址为偶地址,则称为对准字14 存放,存取一个字也只需要一个总线周期;若字地址为奇地址,则称为非对准字 存放,存取一个非对准字需要两个总线周期。见表 2.4。表 2. 4 操 作 0 1 0 0 1 读或写偶地址的一个字 读或写偶地址的一个字节 读或写奇地址的一个字节 读或写奇地址的一个字 BHE 和 AD0 的不同组合状态 AD0 0 0 1 1 0 节) AD7~AD0(第二个总线周期放高位数据字 节) 使用的数据引脚 AD15~AD0 AD7~AD0 AD15~AD8 AD15~AD8(第一个总线周期放低位数据字2. 存储器的组成 1MB 存储空间分成两个 512KB 存储器,即: 偶地址存储器: (A0=0) , 其数据线与 8086CPU 系统的 D7~D0 相连, A0=0 用于片选; 奇地址存储器:(A0=1),其数据线与 8086CPU 系统的 D15~D8 相连, =0 用于片选; 3. 存储器分段 由于 CPU 内部寄存器是 16 位,只能寻址 64KB,故把 1MB 存储空间划分 为四个逻辑段,逻辑段彼此独立,但可紧密相连,也可重叠,在整个 1MB 存储 空间浮动,仅需改变段寄存器内容。一般把存储器划分为:程序区、数据区和堆 栈区。这样,就可以在 程序区中存储程序的指令代码,在数据区中存储原始数 据、中间结果和最后结果,在堆栈区中存储压入堆栈的数据或状态信息。 CPU 通常按信息特征区分段寄存器的作用,如 CS 提供程序存储区的 段地址, DS 和 ES 提供存储源和目的数据区的段地址, SS 提供堆栈区的段地址。 由于系统中只设有 4 个段寄存器,任何时候 CPU 只能识别当前可寻址的 4 个逻辑段。如果程序量或数据量很大,超过 64K 字节,那么可定义多个代码段、 数据段、 附加段和堆栈段, 但 4 个段寄存器中必须是当前正在使用的逻辑段的基 地址,需要时可修改这些段寄存器的内容,以扩大程序的规模。 段地址:每个逻辑段起始地址的高 16 位,即段寄存器的内容,无符号数; 段基地址:每个逻辑段起始地址; 逻辑地址:段地址:偏移地址,在程序中使用; 物理地址:存储单元的实际地址,物理地址=段地址*16+偏移地址; 偏移地址:相对段基地址的偏移量,无符号数,也称有效地址 EA。 四、堆栈段 堆栈是以 “后进先出”的原则暂存一批需要保护的 h 数据或地址的一个特定 存储区。15 堆栈段段地址由 SS 提供,偏移地址由 SP 提供,SP 始终指向栈顶。堆栈操 作有压栈(PUSH)和出栈(POP)两种,均以字为单位。 压栈过程:例 PUSH AX ① SP←SP-1 ② (SP)←AH ③ SP←SP-1 ④ (SP)←AL 出栈过程:例 POP BX ① BL←(SP) ② SP←SP+1 ③ BH←(SP) ④ SP←SP+1三、微处理器的发展随着 VLSI 大规模集成电路和计算机技术的飞速发展,微处理器的面貌日新 月异,从单片集成上升到系统集成,性能价格比不断提高,微处理器字长从 4 位→8 位→16 位→32 位→64 位,工作频率从不到 1MHz 到目前的 1.3GHz,发展 之快,匪夷所思。 1.80286 微处理器 80286 芯片内含 13.5 万个晶体管,集成了存储管理和存储保护机构,80286 将 8086 中 BIU 的 EU 两个处理单元进一步分离成四个处理单元,它们分别是总 线单元 BU、地址单元 AU、指令单元 IU 和执行单元 EU。BU 和 AU 的操作基本 上和 8086 的 BIU 一样,AU 专门用来计算物理地址,BU 根据 AU 算出的物理地 址预取指令(可多达 6 个字节)和读写操作数。 80286 内部有 15 个 16 位寄存器,其中 14 个与 8086 寄存器的名称和功能完 全相同。不同之处有二:其一标志寄存器增设了 2 个新标志,一个为 I/O 特权层 标志 IOPL(I/O Privilege),占 D13D12 两位,有 00、01、10、11 四级特权层: 其二增加了一个 16 位的机器状态字(MSW)寄存器,但只用了低 4 位,D3 为 任务转换位 TS,D2 为协处理器仿真位 EM,D1 为监督协处理器位 MP,D0 为保 护允许位 PE;其余位都空着未用。 80286 有 24 根地址线, 16 根数据线, 16 根控制线 (其中输出的状态线 8 根, 输入的控制线 8 根),地址线和数据线、状态线不再分时复用。80286 封装在 68 条引脚的正方形管壳中,管壳四面引脚。68 根引脚中有 5 条引脚未编码(NC), Vcc 有 2 条,Vss 有 3 条,各引脚的符号和名称如表 2.5 所示。表 2.5 80286 引脚符号和名称 符号 CLK I/O I 名称 系统时钟 符号 INTR I/O I 名称 中断请求16 D15~D0 A23~A0I/O O O O数据总线 地址总线 总线高字节有效 总线周期状态NMI PEREQ O I I RESET Vss Vcc CAPI 不可屏蔽中断请求 I 协处理器操作数请求 协处理器操作数响应 协处理器忙 协处理器出错 I I I I 系统总清 系统地 +5V 电源 衬底滤波电容器M/ COD/ :O O O I存储器/IO 选择 代码/中断响应 总线封锁 总线准备就绪 I O 总线保持请求 总线保持响应HOLD HLDA80286 对 8086 基本指令集进行了扩展。 2.80386 微处理 80386CPU 内部结构由 6 个逻辑单元组成,它们分别是:总线接口部件 BIU (Bus Interface Unit)、指令预取部件 IPU(Instruction Prefetch Unit)、指令译 码部件 IDU(Instruction表 2.6 80386 引脚名称和功能 信号名称 CLK2 D31~D0 ~ A31~A0 W/ D/ M/ 信号功能 时钟 数据总线 字节使能 地址总线 写读指示 数据-控制指示 存储器-I/O 指示 总线封锁指示 地址状态 下地址请求 总线宽度 16 位 传送认可(准备好) HOLD HLDA PEREQ 总线占用请求 总线占用认可 协处理器请求 协处理器忙 协处理器出错 INTR NMI RESET 可屏蔽中断请求 不可屏蔽中断请求 复位 有效状态 低 低 低 低 低 低 高 高 高 低 低 高 高 高 输入/输出 I IO O O O O O O O I I I I O I I I I I IDecode unit)、执行部件 EU(Execution Unit)、段管理部件 SU(Segment Unit) 和页管理部件 PU(Paging Unit)。CPU 采用流水线方式,可并行地运行取指令、17 译码、 执行指令、 存储管理、 总线与外部接口等功能, 达到四级并行流水操作 (取 指令、指令译码、操作数地址生成和执行指令操作)。 80386 采用 PGA(管脚栅格阵列)封装技术,芯片封装在正方形管壳内,管 壳每边三排引脚,共 132 根。80386 管脚名称和功能见表 2.6。 3.80486 微处理器 Intel 公司于 1989 年推出了第二代 32 位微处理器 80486。集成度是 386 的 4 倍以上,168 个引脚,PGA 封装,体系结构与 386 几乎相同,但在相同的工作频 率下处理速度比 386 提高了 2~4 倍,80486 的工作频率最低为 25MHz,最高达 到 132MHz。其主要特点如下: (1)采用精简指令系统计算机 RISC(Reduced Instruction Set Computer)技 术,减少不规则的控制部分,从而缩减了指令的译码时间,使微处理器的平均处 理速度达到 1.2 条指令/时钟。 (2)内含 8KB 的高速缓存(Cache),用于对频繁访问的指令和数据实现 快速的存取。如果 CPU 所需要的指令或数据在高速缓存中(即命中),则勿需 插入等待状态便直接把指令或数据从 Cache 中取到;相反,如果未命中,CPU 便从主存中读取指令或数据。由于存储访问的局部性,高速缓存的“命中”率一 般很高,使得插入的等待状态很少,同时高“命中率”必然降低外部总线的使用 频率,提高了系统的性能。 (3)80486 芯片内包含有与独立的 80387 完全兼容且功能又有所扩充的片 内 80387 协处理器,称作浮点运算部件(FPU)。 (4)80486 采用了猝发式总线(Burst Bus)技术,系统取得一个地址后, 与该地址相关的一组数据都可以进行输入/输出,有效地解决了 CPU 与存储器之 间的数据交换问题。 (5)80486CPU 与
的兼容性是以实地址方式来保证的。其保护地 址方式和 80386 指标一样,80486 也继承了虚拟 8086 方式。 (6)80486CPU 的开发目标是实现高集成化,并支持多处理机系统。可以 使用 N 个 80486 构成多处理机的结构。 4.Pentium 微处理器 1993 年 3 月 Intel 公司推出 Pentium 微处理器,后又相继推出了高能奔腾 Pentium Pro、多能奔腾 Pentium MMX 以及奔腾第二代(PⅡ)、第三代(PⅢ) 和 P4。 奔腾机主频也从最初的 60MHz 提高到 1GHz 以上。 Pentium 芯片内含 310 万个晶体管, 原来被置于片外的单元如数学协助处理器和 Cache 等,被集成到片 内,速度得到显著的提高。Pentium 的设计中采用了新的体系结构,大大提高了 CPU 的主体性能。第一代奔腾芯片内置 32 位地址总线和 64 位数据总线以及浮 点运算单元、存储管理单元和两个 8KB 的 Cache(分别用于指令和数据),还 有一个 SMM(System Management Mode)系统管理模式。18 Pentium 新型体系结构可以归纳为以下四个方面: (1)超标量流水线 超标量流水线(Superscalar)设计是 Pentium 处理器技术的核心,它由 u 与 v 两条指令流水线构成。每条流水线都拥有自己的 ALU、地址生成电路和数据 Cache 接口。 这种流水线结构允许 Pentium 在单个时钟周期内执行两条整数指令, 比相同频率的 80486CPU 性能提高了一倍。与 80486 流水线相类似,Pentium 的 每一条流水线也分为 5 个步骤:指令预取、指令译码、地址生成、指令执行、回 写。当一条指令完成预取步骤,流水线就可以开始对另一条指令的操作。但与 80486 不同的是,由于 Pentium 的双流水线结构,它可以一次执行两条指令,每 条流水线中执行一条。这个过程称为“指令并行”。在这种情况下,要求指令必 须是简单指令, 且 v 流水线总是接受 u 流水线的下一条指令。但如果两条指令同 时操作产生的结果发生冲突时, 则要求 Pentium 还必须借助与适用的编译工具产 生尽量不冲突的指令序列,以保证其有效使用。 (2)独立的指令 Cache 和数据 Cache 80486 片内有 8KB 的 Cache,而 Pentium 有 2 个 8KB 的 Cache,指令和数据 各使用一个 Cache,使 Pentium 的性能大大超过 80486 微处理器。例如,流水线 的第一步骤为指令预取,在这一步中,指令从指令 Cache 中取出来,如果指令和 数据合用 Cache,则指令预取和数据操作之间将很可能发生冲突。而提供两个独 立 Cache 将可避免这种冲突并允许两个操作同时进行。 (3)重新设计的浮点运算单元 Pentium 的浮点单元在 80486 的基础上进行了彻底的改进, 每个时钟周期能 完成一个或两个浮点运算。 (4)分支预测 循环操作在软件设计中使用十分普通, 而且每次在循环中对循环条件的判断 占用了大量的 CPU 时间,为此,Pentium 提供一个称为分支目标缓冲器 BTB (Branch Target Buffer)的小 Cache 来动态地预测程序分支,提高循环程序运行 速度。四、 CPU 芯片的引脚及其功能 CPU 具有 40 条引脚,双列直插式封装,采用分时复用地址数据 总线,从而使
CPU 用 40 条引脚实现 20 位地址、16 位数据、 控制信号及状态信号的传输。19
CPU 芯片可以在两种模式下工作,即最大模式和最小模式。 最大模式:指系统中通常含有两个或多个微处理器(即多微处理器系统) , 其中一个主处理器就是
CPU,另外的处理器可以是协处理器 I/O 处理 器。 最小模式:在系统中只有
一个微处理器。 1. 两种模式公用的引脚的定义 AD0~AD15(Address/Data Bus) :分时复用的地址数据线。双向。 在了解分时复用的概念之前必须先了解总线周期概念: 总线周期: CPU 对存储单元或 I/O 端口每读/写一次数据 (一个字节或一个字) 所需的时间称为一个总线周期。通常情况下,一个总线周期分为 4 个时钟周期, 即 T1、T2、T3、T4。 下面讲解 AD15~AD0 的具体分时复用的问题: (8088 只有 AD7~AD0) 在 T1 期间作地址线 A15~A0 用,此时是输出的(是存储单元的低十六位地 址或 I/O 端口的十六位地址) ; 在 T2~T4 期间作数据线 D15~D0 用,此时是双向的。 A19/S6~A16/S3:分时复用,输出引脚。 在 T1 期间,作地址线 A19~A16 用,对存储单元进行读写时,高四位地址 线由 A19~A16 给出; 在 T2~T4 期间作为 S6~S3 状态线用。 状态线的特征如下:20 S5:用来表示中断允许状态位 IF 的当前设置。 S6:恒为“0”,以表示 CPU 当前连在总线上。 /S7: 三态输出, 高 8 位数据总线有效/状态复用引脚。 (8088 是 在 T1 状态:作 在 T2~T4 状态:输出状态信号 S7,未定义。 GND :地线(两个),分别为引脚 1 和 20; : 读, 三态输出, 当 =0 时, 表示 CPU 当前正在读存储器或 I/O 接口。 READY:准备就绪,输入。当 CPU 要访问的存储器或 I/O 端口已准备好传 送数据时,存储器或 I/O 端口置 READY=1,否则置 READY=0,CPU 在 T3 状态采样 READY,若 READY=0,则插入 Tw,然后在插入 Tw 状态继续采样 READY,直至 READY=1 为止,才进入 T4。 :输入,测试信号。当 CPU 执行 WAIT 指令时,CPU 每隔 5 个 T 对 TEST 进行一次测试, 当测试到 CPU 继续执行后续指令。 INTR:输入,可屏蔽中断请求,高电平有效,当外设向 CPU 提出中断请求 时,置 INTR=1,若此时 IF=1,则 CPU 响应中断。 NMI:输入,非可屏蔽中断请求,上升沿有效。只要 CPU 采样到 NMI 由低 电平到高电平的跳变,不管 IF 的状态如何,CPU 都会响应。 RESET:输入,复位。该引脚保持 4T 状态以上时间高电平,则可复位,复 位后,CPU 停止当前操作,且对 F、IP、DS、SS、ES 及指令队列缓冲 器清零,而 CS 置为 FFFFH。复位后,CPU 从 FFFF0H 开始执行程序。 CLK:输入,时钟,它提供了处理器和总线控制器的定时操作,典型值为 8MHz。 Vcc:电源,+5V。 2)最小模式控制信号引脚(当 MN/MX 接 Vcc 时) 系统控制线全部由 8086CPU 发出。 HOLD:输入,总线请求。用于其它主控器(其它处理器、DMA 等)向本 CPU 请求占用总线。 HLDA:总线请求响应,输出。CPU 一旦检测到 HOLD=1 时,则在当前总 线周期结束后,输出 HLDA=1,表示响应总线请求,并让出总线使用权21/S7)用,该引脚为 0 时,表示高 8 位数据线上的数据有效;=1, 则 CPU 重复执行 WAIT 指令, =0 时,等待状态结束,即 CPU 处于空闲等待状态,直到测试到 给其它主控器, 直至其它主控器用完总线后, HOLD 变为低电平, HLDA 才输出为低,本 CPU 重新占用总线。在总线响应期间,凡是三态的总 线均处于高阻状态。 :输出、三态,写。当 端口。 M/ DT/ :三态、输出,存储器/IO 端口。当 M/ 访问存储器,当 M/ =1 时,表示 CPU 当前正在 =0 时,表示 CPU 当前正在访问 I/O 端口。 控制数据收发器的数 =0 =0 时,表示 CPU 当前正在写存储器或 I/O:三态、输出,数据发送/接收控制信号。为提高 CPU 数据总线驱动 能力,常常使用数据收发器(),DT/ 据传送方向。若 DT/ 时,表示 CPU 输入(接收)数据。 :三态、输出,数据允许信号,DEN 通常作为数据收发器的选通信号, 仅当 DEN=0 时,才允许收发器收发数据。 =1,表示 CPU 输出(发送)数据;当 DT/ALE:输出,地址锁存允许,在任一总线周期的 T1 期间输出一个正脉冲用 于 AD15~AD0 输出的地址信息送外部地址锁存器锁存。 :输出,中断响应。当 CPU 响应 INTR 时,置 3) 最大模式控制信号引脚(当 MN/ 系统时,采用最大模式。 、 、 :三态、输出,总线周期状态,用于和总线控制器 8288 的 S2、 S1、S0 相连接,使得 8288 对它们译码,以产生相应的控制信号,见表 2.2。 接 GND 时) =0,表示响应中断。系统控制线通过总线控制器 8288 产生,一般情况,当用多个微处理器组建:三态、输出,总线封锁。当 / 、 /=0 时,表示本 CPU 不允许其它主 =0。 / 比 /控器占用总线;当 CPU 执行加有 LOCK 前缀的指令期间, 输出时作总线请求响应,均为低电平有效,三态,其中 有较高优先级。:双向,总线请求/总线请求允许,输入时作总线请求,QS1、QS0:输出,指令队列状态。以便外部主控设备对 CPU 内部的指令队 列进行跟踪。状态含义。 4. 8086 和 8088CPU 在外部引脚上的区别:22 ① 8086 有 16 根数据线,与地址线 A15~A0 分时复用,而 8088 只有 8 根数据 线,与地址线 A7~A0 分时复用。 ② 8086 有 出。 , 一次可读 8 位或 16 位, 而 8088 没有 , 有状态线 输五、总线周期1. 总线系统结构 1)最大/最小模式系统的形成 系统总线是指微机系统所采用的总线,一般是由 CPU 总线经过驱动器、总 线控制器等芯片的变换而形成的,有了系统总线,CPU 才能外接不同容量的存 储器和不同容量的 I/O 端口,组成不同规模的微机系统。。 (1)最小模式系统总线的形成 应用于单一的微机处理系统,CPU 引脚 MN/ 接 Vcc。见图 2.3。图中,3 片 8282 锁存 20 位地址信息和 AD0、A19~A16/S6~S3、 收发器, 由 CPU 的控制信号,之所以要锁存是鉴于 AD15~/S7 都是分时复用线,在 T1 状态 ALE 作用下将 和 DT/ 分别控制 8286 工作和数据传送方向。这些信息锁存以备用,还可以提高地址总线驱动能力。2 片 8286 作为 16 位数据 系统控制线由 CPU 直接提供。 (1) 最大模式系统总线的形成23 应用于多微机处理系统, 通常以 CPU 为中心, 增设总线控制器 8288, 一个总线仲裁器 8289,还包含其它微处理器(如 8287 数值协处理器和 8289I/O 处理机)CPU 引脚 MN/ 接 GND。见图 2.4。① 与最小模式系统相同处: 3 片 8282 锁存 20 位地址信息和 ② 不同处: 用 8288 总线控制器,对 CPU 提供的状态信号 均由 8288 提供。 (1)8288 总线控制器 状态信号与总线命令信号的对应关系见表 2.2。 命令信号: :读存储器命令,此命令有效时,把被选中的存储单元之中的数据读到 DB 上。 :读 I/O 端口命令,此命令有效时,把被选中的 I/O 端口之中的数据输入 到 DB 上。 :写存储器命令,此命令有效时,把 DB 上的数据写到所选中的存储单 元中。 :写 I/O 端口命令,此命令有效时,把 DB 上的数据写到所选中的 I/O 端 口中。24,2 片 8286 作为 16 位数据收发器。 、 、 译码,产生各种 和 DEN命令信号和控制信号,而不是由 CPU 提供控制信号,包括 ALE、DT/ :超前写存储器命令,功能与 出现。 :超前写 I/O 端口命令,功能与 出现。相同,只是提前 相同,只是提前 相同。一个 T 状态 一个 T 状态:中断响应信号,与最小模式 CPU 提供的 控制信号 ALE、DT/ 性相反。 2. 总线周期时序、DEN:与最小模式中 CPU 发出的相同,仅 DEN 极时钟信号 CLK:时钟信号的周期也称为状态周期 T,它是微处理器的最小动 作单位时间; 指令周期:执行一条指令所需时间,有若干总线周期组成; 总线周期:CPU 访问 存储器或 I/O 端口一次所需时间,至少 4 个 T 状态。 以最小模式系统中 CPU 读总线周期为例:见图 2.5。T1 状态:CPU 发存储单元 20 位或 I/O 端口 16/8 位地址信息和 地址锁存允许 ALE,将地址信息和 M/ 信号确定是读存储器还是读 I/O 端口。 T2 状态:AD15~AD0 高阻,S7~S3 状态信息输出,同时发 选中的存储单元或 I/O 端口。信号,并发信号锁存到外部 8282 中。CPU 通过发 =0,启动所T3 状态前沿(下降沿):CPU 采样 READY,若所选中的存储单元或 I/O 端 口能在 T3 期间准备好数据, 则 READY=1; 否则置 READY=0, T3 过后插入 Tw, CPU 再在插入 Tw 下降沿采样 READY,直至 READY=1 为止。选中的存储单元 或 I/O 端口把数据送到 DB 上。25 T3 状态后沿或插入 Tw 后沿(上升沿):CPU 在发 DT/ 况下,读数据总线。 T4 状态:结束总线周期。=0 和=0 的情26 第三章 8086 指令系统内容提要:1.寻址方式: 立即寻址,寄存器寻址,直接寻址,寄存器间接寻址,基址寻址,变址寻 址,基址加变址寻址,串寻址,端口寻址,隐含寻址。 2.8086 指令系统: 数据传送指令,算术运算指令,移位指令,程序控制指令,串操作指令, 处理器控制指令,I/O 指令,中断指令。教学重点:1.掌握寻址方式; 2.掌握常用指令的功能和用法。教学难点:区别指令的正确与错误。教学内容:一、8086 指令的一般格式概述 指令:是计算机用以控制各部件协调动作的命令; 指令系统:CPU 可执行的指令的集合; 机器指令:是 CPU 仅能识别的指令的二进制代码,也称机器码; 指令格式:由操作码和操作数两部分组成,有些指令无操作数。操作码规定 了指令的操作性质,用助记符表示;操作数规定了指令的操作对象。 指令可分为无操作数指令、单操作数指令、双操作数指令。 例:HLT DAA 无操作数 约定或隐含操作数 双操作数,其中逗号前的操作数 AL 为目的操作数,INC AL 单操作数 MOV AL,BL 逗号后的操作数 BL 为源操作数。 操作数类型有三种:立即数:出现在指令中的常数; 寄存器操作数:操作数在寄存器中; 存储器操作数:操作数在存储器中。二、8086 寻址方式寻址方式是指 CPU 在执行指令时寻找操作数或操作数地址的方式。27 1. 立即寻址:直接放在指令中的常数称为立即数,立即数只能是源操作数, 立即数存放在指令操作码之后的存储单元中。 例:MOV AL,50H 2. 寄存器寻址: 存放在寄存器中的数据为操作数,寄存器操作数可以是源操 作数,也可以是目的操作数。 例:MOV AL,BL 以下寻址方式 3~8,操作数都在存储器中。存储器操作数具有类型属性, 如字节(BYTE)、字(WORD)、双字(DWORD)等,反映了数据占 用存储单元的字节数, 指令书写中, 约定用方括号内容表示存储器操作数 的偏移地址; 用类型名 PTR 偏移地址的形式说明指令中存储器操作数的 类型,例:WORD PTR 10H,20H。 3. 存储器寻址 (1) 直接寻址: 存储器操作数的 16 位偏移地址直接包含在指令的方括号 中。 例:MOV AL,[1000H] 约定由 DS 提供段地址 ;段超越,由 CS 提供段地址 ;段超越,由 SS 提供段地址 MOV AL,CS:[1000H] MOV AL,SS:[1000H] [1000H];用变量名 DB/DW/DD 数据序列的形 DB 式分别定义具有 “变量名” 的字节、 字或双字存储器操作数, 如 BUF(2)寄存器间接寻址:操作数所在的存储单元的偏移地址放在指令给出 的寄存器中。可用于这种寻址方式的寄存器只能是 SI、DI、BP 和 BX。其中,SI、DI、BX 约定的段寄存器是 DS,而 BP 约定的段寄 存器 SS。 例:MOV AX,[SI] MOV [BX],AX ;AX←DS:[SI] ;DS:[BX]←AX(3)基址寻址:操作数的有效地址是指令给定的位移量(8 位或 16 位) 与 BX、BP 内容之和,段寄存器约定同寄存器间接寻址,允许段超 越。 例:MOV AX,[BX+3AH] ;AX←DS:[BX+3AH] MOV [BP+4EB3H],AX;SS:[BP+4EB3H]←AX (4)变址寻址:操作数的有效地址是指令给定的位移量与寄存器 SI 或 DI 内容之和,段寄存器约定在 DS 中,允许段超越。 例:MOV [DI+12H],AX ;DS:[DI+12H] ←AX MOV BX,SS:[DI+45H] ;BX←SS:[DI+45H] (5)基址变址寻址:操作数的有效地址是指令给定的位移量和一个基址 寄存器(BX 或 BP)及一个变址寄存器(SI 或 DI)的内容之和,段28 寄存器约定由基址寄存器决定,若为 BX,段寄存器约定为 DS;若 为 BP,段寄存器约定为 SS,允许段超越。 例:MOV BX,[DI+BP+45H] ;BX←SS:[DI+BP+45H] MOV AX,ES:[SI+BX+76H];AX←ES:[SI+BX+76H] 注意:基址寄存器 BX 和 BP 不能同时出现在一个方括号内,变 址寄存器 DI 和 SI 亦如此。 (6)串寻址:用于数据串操作指令,它隐含地运用:SI 指出源串偏移地 址,DI 指出目的串偏移地址,指令执行后,SI 和 DI 的内容自动加 1 或减 1(操作数为字节类型时)、加 2 或减 2(操作数为字类型时); 约定源串段地址在 DS 中,目的串段地址在 ES 中。不允许段超越。 例:MOVSB 1 MOVSW 2 (7)端口寻址:操作数在外设端口中。 直接端口寻址:指令中直接给出的 8 位常数是外设端口地址。 例:IN AL,34H ;AL←[34H] ;[34H]←AL OUT 34H,AL 例:MOV DX,280H IN AL,DX ;AL←[280H] ;[280H]←AL OUT DX,AL ;ES:[DI] ←DS:[SI],SI←SI 2,DI←DI ;ES:[DI] ←DS:[SI],SI←SI 1,DI←DI间接端口寻址:指令中外设端口的 16 位地址在 DX 中。(8)隐含寻址:指令中没有给出操作数,但却隐含在固定对象中。 例:AAA ;隐含对 AL 操作,三、数据传送指令1. 通用数据传送指令 ① MOV dst,src 指令功能:dst←src, 标志寄存器:不影响, 操作数:src:通用寄存器、段寄存器、存储器操作数、立即数; dst:通用寄存器、段寄存器、存储器操作数。29 注意点:src 和 dst 必须类型一致(都是 8 位或者是 16 位); dst 不能是立即数; 当操作数不是立即数时,两个操作数不能都是存储器操作数; 源操作数是立即数时,目的操作数不能是段寄存器; CS 不得作目的操作数。 例:MOV BX,CX ① XCHG dst,src 指令功能:dst←→src 标志寄存器:不影响, 操作数:两操作数可以是通用寄存器和存储器。 注意点:两操作数不能都是存储器操作数; 两操作数类型必须一致。 例:XCHG AX,BX ② PUSH src 指令功能:SP←SP-1,[SP]←srcH,SP←SP-1,[SP]←srcL 标志寄存器:不影响 操作数:寄存器(IP 除外)或存储单元。 注意点:源操作数只能是 16 位,而不能是 8 位的。 ③ POP dst 指令功能:dstL←[SP],SP←SP+1,dstH←[SP],SP←SP+1 标志寄存器:不影响,POPF 除外 操作数:同 PUSH 指令,但 CS 不能作为目的操作数。 注意点:目的操作数只能是 16 位的,而不能是 8 位的。 ④ XLAT(查表指令)30;BX←CXMOV [2000H],BL ;DS:[2000H]←BL;AX ←→BX 指令功能:AL←DS:[BX+AL]; 标志寄存器:不影响; 用途:用于查表,表首地址的偏移地址在 BX 中,表长度可达 256 字节。 2. 地址传送指令:用来传送操作数的地址。 ① LEA reg16,src 取偏移地址指令 指令功能:将源操作数的偏移地址送 16 位通用寄存器; 标志寄存器:不影响; 操作数:目的操作数是 16 位通用寄存器,源操作数是存储器操作数。 ② LDS reg16,src 和 LES reg16,src 取地址指针指令 指令功能:将源操作数的有效地址所对应的双字存储单元的高 16 位内容送 入 DS(LES 指令送入 ES),低 16 位内容送入指令指定的 16 位通用寄存器; 标志寄存器:不影响。 例:设某双字存储单元偏移地址为 3000H,双字数据为 H,则 LDS LES SI,[3000H] DI,[3000H] ;DS=1234H,SI=5678H ;ES=1234H,DI=5678H3. 标志传送指令专门用于对标志寄存器进行操作① LAHF ;AH ←FL ,标志寄存器低 8 位送 AH ② SAHF ;FL←AH,AH 的内容送标志寄存器低 8 位 ③ PUSHF ;标志寄存器内容压栈 ④ POPF ;栈顶内容送标志寄存器 注意点:SAHF 和 POPF 指令将直接影响标志位,而其他传送均不会对标志 位产生影响。 4. 输入/输出指令 IN AL,n; IN 用于主机与外设端口间的数据传送。 AL,DX; IN AX,n; IN AX,DX指令功能:从端口(地址为 n 或在 DX 中)输入 8 位数据到 AL 中或输入 16 位数据到 AX 中; 标志寄存器:不影响。 OUT n,AL; OUT DX,AL; OUT n,AX; OUT DX,AX 指令功能:从 AL 中输出 8 位数据到端口(地址为 n 或在 DX 中)或从 AX 中输出 16 位数据到端口(地址为 n 或在 DX 中)。 标志寄存器:不影响。四、算术运算指令1. 加法指令 ① ADD dst,src31 指令功能:dst←src+dst 标志寄存器:影响 AF、CF、PF、OF、ZF、SF 操作数:目的操作数:通用寄存器、存储器; 源操作数:通用寄存器、存储器、立即数; 注意点:两操作数必须类型一致; 两操作数不能同时为存储器操作数。 例:ADD AX,BX ② ADC dst,src 指令功能:dst←dst+src+CF 其余同 ADD 指令。 ③ INC dst 指令功能:dst←dst+1 标志寄存器:影响 OF、SF、ZF、AF、PF; 操作数:8 位/16 位通用寄存器或存储器; 注意点:不影响 CF。 2. 减法指令 ① SUB dst,src 指令功能:dst←dst-src; 其余同 ADD 指令。 例:SUB BX,CX ;BX←BX-CX ② SBB dst,src 指令功能:dst←dst-src-CF; 其余同 SUB 指令。 例:SBB [BX+SI],AL ;[BX+SI] ←[BX+SI]-AL-CF ③ DEC dst 指令功能:dst←dst-1 其余同 INC 指令。 ④ NEG dst 指令功能:dst←0-dst 或 det← +1 标志寄存器:影响 AF、CF、PF、OF、ZF、SF; 操作数:8 位/16 位通用寄存器或存储器。 例:MOV AH,5 NEG AH MOV AX,-6 ;AH=B,是-5(补码) ;AX←AX+BX ADD [BX+DI+64H],AX ;[BX+DI+64H]←AX32 NEG AX ⑤ CMP dst,src 指令功能:dst-src 其余同 SUB 指令;;AX=0006H,是+6注意点:指令执行后,目的操作数保持原值不变。 3. 乘法指令 ① MUL src 无符号数乘法指令 指令功能:AX←AL*src(字节乘法) DXAX←AX*src(字乘法) 标志寄存器:字节乘:若乘积高 8 位 AH 字乘: 若乘积高 16 位 DX 0,则 CF=1,OF=1, 0,则 CF=1,OF=1, 若乘积高 8 位 AH=0,则 CF=0,OF=0; 若乘积高 16 位 DX=0,则 CF=0,OF=0; 操作数:可以是通用寄存器、存储器,不能是立即数。 例:MUL BX MUL BYTE PTR [SI] ② IMUL src 指令功能:同 MUL 指令; 标志寄存器:若乘法结果 AH 或 DX 包含有效值,则 OF=1、CF=1, 若乘法结果 AH 或 DX 只是低半部分的符号扩展,则 OF=0、 CF=0 操作数:同 MUL 指令。 例:IMUL WORD PTR [DI] 4. 除法指令 ① DIV src 无符号除法指令 AX←DXAX/src,余数在 DX 中。 指令功能:字节除:AL←AX/src,余数在 AH 中, 字除: 若商超过 AL(字节除)或 AX(字除)所能存放的最大值(FFH 或 FFFFH)时,系统会自动产生 0 类中断,且商和余数都不确定。 操作数的规定与乘法指令相同。 例:DIV BX ② IDIV src ;DX,AX←DXAX/BX,DX←余数,AX←商 带符号数除法指令 ;DXAX←AX*(DS:[DI]) ;DXAX←AX*BX ;AX←AL*(DS:[SI]) 带符号数乘法指令需强调的是余数的符号必须和被除数的符号相同。当商超过 AL 或 AX 所能 存放的最大值+127 (字节除) 或+32767 (字除) , 以及所能存放的最小值-127 (字节除)或-32767(字除)时,系统会自动产生 0 类中断。操作数的规定 与乘法指令相同。33 5. 符号扩展指令 ① CBW扩展带符号数的字节数指令功能:将 AL 中数的符号位扩展到整个 AH 中。 ② CWD 指令功能:将 AX 中数的符号位扩展到整个 DX 中。 例:MOV AL,-16 CBW CWD IDIV BX 6. BCD 数调整指令 压缩型 BCD 数(也称组合 BCD 数):一个字节表示两位 BCD 数; 非压缩型 BCD 数(也称非组合 BCD 数):一个字节表示一位 BCD 数,有 效位在低 4 位,高 4 位为零。 ① 加法的 BCD 数调整 a.AAA:加法的非压缩型 BCD 数调整指令 指令功能:对在 AL 中两个非压缩型 BCD 数相加的结果,调整成非压缩型 BCD 数在 AL 中;若 AL 低 4 位大于 9 或 AF=1,则 AL+6,AH+1,CF 和 AF 置 1,AL 高 4 位清 0;否则 AL 高 4 位清 0,CF 和 AF 置 0, 标志寄存器:该指令不影响 PF、ZF、SF、OF。 注意点:必须紧跟在加法指令之后且只能对 AL 中的内容进行调整。 b. DAA:压缩型 BCD 数调整指令 指令功能:对在 AL 中两个压缩型 BCD 数相加的结果,调整成压缩型 BCD 数在 AL 中; 标志寄存器:影响 CF、PF、AF、ZF、SF,其中 CF=1 说明结果大于 99。 注意点:必须紧跟在加法指令之后且只能对 AL 中的内容进行调整。 例:MOV BL,35H MOV AL,85H ADD BL,AL DAA 结果 AL=20H,CF=1,AF=1,PF=0,ZF=0,SF=0 ② 减法的 BCD 数调整 a.AAS:减法的非压缩型 BCD 数调整指令 指令功能:对在 AL 中两个非压缩型 BCD 数相减的结果,调整成非压缩型 BCD 数在 AL 中; 标志寄存器:影响 AF、CF; 注意点:必须紧跟在减法指令之后且只能对 AL 中的内容进行调整。34;AL=0F0H(-16) ;AX=0FFF0H(-16) ;DXAX=0FFFFFFF0H(-16) ;DX←余数,AX←商 例:SUB AL,BL AAS;AL 和 BL 中的非压缩 BCD 数相减 ;调整 AL 为正确的非压缩 BCD 数b.DAS:减法的压缩型 BCD 数调整指令 指令功能:对在 AL 中两个压缩型 BCD 数相减的结果,调整成压缩型 BCD 数在 AL 中; 标志寄存器:同 DAA 指令。 注意点:必须紧跟在减法指令之后且只能对 AL 中的内容进行调整。 ③ 乘法的 BCD 数调整 AAM;非压缩型 BCD 数调整 指令功能:对 AX 中两个非压缩型 BCD 数在相乘的结果调整成两位非压缩 型 BCD 数,高位非压缩型 BCD 数在 AH 中,低位非压缩型 BCD 数在 AL 中; 标志寄存器:影响 PF、SF、ZF。 注意点:必须紧跟在乘法指令之后。 ④ 除法的 BCD 数调整 AAD;非压缩型 BCD 数调整 指令功能:用在两位非压缩型 BCD 数在相除之前进行调整,对 AX 内容进 行调整,使两个未组合的十进制数相除之后可得到非组合的 BCD 数结果,商在 AL 中,余数在 AH 中; 标志寄存器:影响 PF、SF、ZF。 注意点:必须紧跟在除法指令之前。五、逻辑运算指令1. 逻辑运算指令 ① AND dst,src 指令功能:dst←dst∩src 标志寄存器:影响 SF、ZF、PF,OF=0、CF=0,AF 不确定 操作数:目的操作数:通用寄存器、存储器; 源操作数:通用寄存器、存储器、立即数; 注意点:两操作数不能都是存储器操作数。 例:MOV BX,0F56H AND BL,BH ② OR dst,src 指令功能:dst←dst∪src 其余同 AND 指令。35;BL=06H ③NOT dst指令功能:dst← 标志寄存器:不影响; 操作数:通用寄存器、存储器。 例:MOV AL,05H NOT AL ④ XOR dst,src src 指令功能:dst←dst 其余同 AND 指令。 ⑤ TEST dst,src 指令功能:dst∩src 其余同 AND 指令 注意点:指令执行后,目的操作数的值保持不变。 2. 移位指令 移位次数 cnt 可以是 1, 若移位次数大于 1 时, 必须放在 CL 中, 移位结束后, CL 值不变。影响 AF 以外的各标志位,而 AF 不定;当 cnt=1 时,OF 才有意义, 当移位前操作数的最高两位相同时, 移位后 OF=0, 当操作数的最高两位不同时, OF=1。 ① SAL dst,cnt SHL dst,cnt 指令功能: 操作数:通用寄存器或存储器的 8 位或 16 位内容。 ② SAR dst,cnt 指令功能: 操作数:通用寄存器或存储器的 8 位或 16 位内容。 ③ SHR dst,cnt 指令功能: 操作数:通用寄存器或存储器的 8 位或 16 位内容。 3. 循环移位指令 只影响 CF 和 OF,同样只有当 cnt=1 时,OF 才有意义。操作数同移位指令 ① ROL dsr,cnt 指令功能: ② ROR dst,cnt 循环右移指令36;AL=0FAH算术左移指令 逻辑左移指令算术右移指令逻辑右移指令循环左移指令 指令功能: ③ RCL dst,cnt 指令功能: ④ RCR dst,cnt 带进位循环右移指令 带进位循环左移指令指令功能:六、串操作指令约定:SI 指向源数据串偏移地址,源段地址为 DS; DI 指向目的数据串偏移地址,目的段地址为 ES; 地址指针是自动增量(当 DF=0 时)或自动减量(当 DF=1 时); 地址指针是增(减)量 1 为字节操作;地址指针是增(减)量 2 为字 操作。 串操作指令可加重复前缀,并约定用 CX 存放重复次数,每重复执行一次, CX 内容减 1。未使用重复前缀的串指令,在执行时,只执行一次。在任何串操 作指令之前均可加重复前缀。需注意的是,执行带有重复前缀的指令时,对 CX 的检测是在执行指令前进行的。 使用重复前缀, 能重复执行多达 64KB 的串操作。 1. 重复前缀 ① REP 指令功能:若 CX ② REPE/REPZ 指令功能:若 CX 若 CX=0 ③ REPNE/REPNZ 指令功能:若 CX 若 CX=0 2. 串传送:不影响标志 ① MOVSB 指令功能:ES:[DI] ←DS:[SI],DI←DI ② MOVSW 指令功能:ES:[DI] ←DS:[SI],DI←DI 3. 串取出:不影响标志370,重复执行,CX←CX-1,若 CX=0,执行下一条指令。 0 且 ZF=1,重复执行,CX←CX-1, ZF=0,执行下一条指令。 0 且 ZF=0,重复执行,CX←CX-1, ZF=1,执行下一条指令。1,SI←SI 2,SI←SI1。 2。 ① LODSB 指令功能:AL ←DS:[SI],SI←SI ② LODSW 指令功能:AX←DS:[SI],SI←SI 4. 串存入:不影响标志 ① STOSB 指令功能:ES:[DI] ←AL,DI←DI ② STOSW 指令功能:ES:[DI] ←AX,DI←DI ① CMPSB 指令功能:DS:[SI]—ES:[DI],SI←SI ② CMPSW 指令功能:DS:[SI]—ES:[DI],SI←SI ① SCASB 指令功能:AL—ES:[DI],DI←DI ② SCASW 指令功能:AX—ES:[DI],DI←DI 2。 1。 2, DI←DI 2。 6. 串搜索:影响 OF、SF、ZF、AF、PF、CF 1, DI←DI 1。 2。 5. 串比较:影响 OF、SF、ZF、AF、PF、CF 1。 2。 1。七、控制传送指令用来控制程序的执行顺序。程序的执行顺序是由 CS 和 IP 确定的 转移指令可分为: 段间转移(也称远转移):目标属性为 FAR,同时改变 CS 和 IP; 段内转移(也称近转移):目标属性为 NEAR,仅改变 IP。 无论是段间转移还是段内转移都有直接转移和间接转移之分: 直接转移:在转移指令中直接指明目标地址; 间接转移:转移的目标地址间接存储于某一寄存器或存储单元中,若用寄存 器间接转移,只能完成段内间接转移。 转移还有绝对转移和相对转移之分: 段内相对转移:目标地址是 IP 当前值加一个偏移量; 段内绝对转移:以新的值代替当前值。 在 8086 指令系统中,段内直接转移都是相对转移; 段内间接转移都是绝对转移; 段间转移都是绝对转移。38 8086 提供了四种程序控制指令,即: 无条件转移指令、条件转移指令、循环控制指令和中断指令。 除中断指令外,其它转移指令都不影响状态标志。 1. 无条件转移指令 ① JMP target 指令功能:无条件转移指令到目标地址 target 去执行程序。 目标地址的形式有五种: 短标号:段内直接转移,范围不超过-128~+127 字节,属相对转移; 近标号:段内直接转移,范围是段内任何地方,属相对转移; 远标号:段间直接转移,范围是存储器任何地方,属绝对转移; 通用寄存器:段内间接转移,范围是段内任何地方,属绝对转移; 存储器变量:当是字类型时,为段内间接转移,,属绝对转移; 当是双字类型时,为段间间接转移,,属绝对转移。 ② CALL proc-name 指令功能:保护程序断点: 段内调用:当前 IP 内容压栈; 段间调用:先把 CS 内容压栈,再把 IP 内容压栈。 无条件转移到目标地址: 段内调用:IP←目标地址偏移地址或寄存器内容; 段间调用:IP←目标地址偏移地址或 DS:[寄存器]低字; CS←目标地址的段地址或 DS:[寄存器]高字。 目标地址的形式只是没有段内直接短调用, 其余同 JMP 指令, 但子程序名 (过 程名)必须定义类型名(近过程还是远过程)。 ③ RET pop-val 指令功能:执行与 CALL 指令相反的操作,从子程序返回到主程序。 若该指令不带操作数: 段内返回:IP←栈顶字,SP←SP+2; 短间返回:IP←栈顶字,SP←SP+2;CS←栈顶字,SP←SP+2。 若该指令带有立即操作数: 在上述功能完成后,再 SP←SP+立即数。 2. 条件转移指令 是以标志位的状态或者以标志位的逻辑运算结果作为转移条件,如果满足转 移条件,则转移到指定的目标地址,如果不满足转移条件,则继续执行下一条指 令。 全部条件转移指令都是段内直接转移,转移地址的偏移量限制在-128~+127 范围内。39 指令中,条件缩写字母的含义是: A:Above 高于 G:Greater 大于 S:Sign 3.1表 3. 1 分类 无条 件转 移 指令格式 JMP target CALL proc-name RET pop-val JZ/JE short-label JNZ/JNE short-label JP/JPE short-label JNP/JPO short-label JO short-label JNO short-label JC short-label JNC short-label JS short-label JNS short-label JB/JNAE short-label JNB/JAE short-label JA/JNBE short-label JNA/JBE short-label JL/JNGE short-label JNL/JGE short-label JG/JNLE short-label JNG/JLE short-label 功能 无条件转移 调用子程序 返回主程序 相等转移 不相等转移 结果为偶转移 结果为奇转移 溢出转移 无溢出转移 有进(借)位转移 无进(借)位转移 符号位为 1 转 符号位为 0 转 低于/不高于等于转 不低于/高于等于转 高于/不低于等于转 不高于/低于等于转 小于/不大于等于转 不小于/大于等于转 大于/不小于等于转 不大于/小于等于转 循 环 控 制 中 断 LOOP short-label LOOPE/LOOPZ short-label LOOPNE/LOOPNZ short-label JCXZ short-label INT n INTO IRET CX≠0 循环 ZF=1 且 CX≠0 循环 ZF=0 且 CX≠0 循环 CX=0 转移 中断调用 溢出产生 4 号中断 中断返回 CX≠0 ZF=1 且 CX≠0 ZF=0 且 CX≠0 CX=0 CX←CX-1 CX← CX-1 CX ←CX-1 CX←CX(不减 1 ) n=0,1,2,?,255 ZF=1 ZF=0 PF=1 PF=0 OF=1 OF=0 CF=1 CF=0 SF=1 SF=0 CF=1 且 ZF=0 CF=0 或 ZF=1 CF=0 且 ZF=0 CF=1 或 ZF=1 (SF⊕OF)=1 且 ZF=0 (SF⊕OF)=0 或 ZF=1 (SF⊕OF)=0 且 ZF=0 (SF⊕OF)=1 或 ZF=1 无符号数 无符号数 无符号数 无符号数 带符号数 带符号数 带符号数 带符号数 程序控制指令 条件 说明B:Below L:Less低于 小于C:Carry 进位 N:Not 无E:Equal O:Over等于 溢出符号PE:Parity Even奇偶性偶PO:Parity Odd奇偶性奇分为单个状态条件转移,无符号数条件转移,有符号数条件转移三种。见表条件转移3. 循环控制指令 是段内短距离相对转移指令,可用来控制程序段的循环执行,循环次数都由 CX 内容指定。 ① LOOP short-lavel 若 CX 0,则转移到目标地址;40指令功能:CX←CX-1 若 CX=0,则执行下一条指令。 ② LOOPE/LOOPZ short-lavel 指令功能:CX←CX-1 若 CX 0 且 ZF=1,则转移到目标地址;否则执行下一条指令。 ③ LOOPNE/LOOPNZ short-lavel 指令功能:CX←CX-1 若 CX 0 且 ZF=0,则转移到目标地址;否则执行下一条指令。 ④ JCXZ short-lavel 指令功能:若 CX=0,则转移到目标地址;否则执行下一条指令。 4. 中断指令 可引起 CPU 中断,这种由指令引起 CPU 中断,称为软中断。 中断除保护程序断点外,还将标志寄存器内容压栈,中断服务程序入口地址 由中断向量表获得。 ① INT n ;n=0~FFH SP←SP-2,SS:[SP]←CS,CS←0:[n*4+2] SP←SP-2,SS:[SP]←IP,IP←0:[n*4] ① INT0 (n=4) 若运算结果有溢出,则 OF=1,产生溢出中断, 若运算结果无溢出,则 OF=0,不产生溢出中断。 除 n=4 以外,其余同 INT n 指令。 ② IRET 指令功能:除同 RET 指令外,还弹出第三个字送 FR,最后 SP←SP+2 指令功能:放在算术运算指令之后, 指令功能:SP←SP-2,SS:[SP]←F,IF←0,TF←0八、处理器控制指令控制处理器的某些功能分为三类: 1. 标志位操作指令表 3. 2 分类 标 志 位 操 作 指令格式 STC CLC CMC STD CLD STI CLI 处理器控制指令 功 能 操作内容 CF←1 CF←0 CF← DF←1 DF←0 IF←1 IF←0 进位标志置 1 进位标志置 0 进位标志取反 方向标志置 1 方向标志置 0 中断允许标志置 1 中断允许标志置 041 外 部 同 步 空操作 ESCHLT WAIT ext-opcode,src LOCK NOP暂停 等待 信号有效交权给外部协处理器 封锁总线 空操作参见表 3.2 2. 外部同步指令 主要用于 CPU 与外部事件同步,参见表 3.2 3. 空操作指令 NOP 指令功能:空操作。42 第四章学习目标:汇编语言程序设计了解汇编语言特点、汇编程序功能、汇编语言结构; 掌握汇编语言中的表达式、伪指令、宏定义的含义和用法; 掌握 DOS 功能调用基本 I/O,返回 DOS 方法,了解文件管理; 理解顺序程序、分支程序、循环程序、含子程序的程序设计的基本方法,能 编写、运行、调试简单的汇编语言程序。教学重点:1.概述: 汇编语言特点,汇编程序功能 2.汇编语言结构: 语句类别与结构、源程序结构 3.汇编语言中的表达式: 常量、变量、标号、运算符 4.伪指令: 符号定义伪指令、变量定义伪指令、段定义伪指令、过程定义伪指令、模块 定义与通信伪指令 5.宏指令: 宏定义、红调用、宏扩展、用于宏定义的其它伪指令 6.DOS 功能调用简介: 基本 I/O,文件管理,其它 7.汇编语言程序设计举例 顺序结构、分支结构、循环结构、子程序、多模块程序 8.编程实验教学难点:1.伪指令、宏定义的用法; 2.程序设计。教学内容:一、程序设计语言概述1. 汇编语言特点: 使用助记符表示指令;能用标识符代替地址、常量和变量;借助伪指令和汇 编程序,程序员不必具体安排程序和数据在存储器中存放。43 2. 汇编语言源程序:用汇编语言编写的程序。 3. 汇编程序: 是系统软件中的一种程序,它的作用是把汇编语言源程序自动 翻译成机器能识别的机器语言目标程序。它有两种类型: 1)行汇编:对汇编语言源程序逐条汇编,特点是小型、方便; 2)宏汇编:对汇编语言源程序按模块汇编,特点是功能强,开发和调试手 段较完善。 二、8086 汇编语言的基本语法 1. 汇编语言结构 1)标识符 用来对程序中的变量、常量、段、过程等进行命名,它是组成语句的一个常 用成分,它的命名应符合下列规定: ① ② ③ 标识符是一个字符串,第一个字符必须是字母、“?”、“@”、或下 划线“—”这四种字符中的一个; 从第二个开始,可以是字母、数字、“?”、“@”、“—”; 一个标识符的长度可以由 1~31 个字符组成。注意点: 不能使用系统中已经定义过的符号, 如寄存器名、 分支条件用标志、 助记符、定义等等。 2. 语句类型与结构 有三种类型: 指令性语句: 是机器指令的符号表示,经汇编程序汇编后能产生对应的机器 指令代码,在形成执行文件时执行; 指示性语句(也称伪指令语句):知识给汇编程序提供一些控制信息,帮助 汇编程序正确汇编指令性语句,在汇编时被执行,没有对应的机器码; 宏指令语句:是指令性语句和指示性语句的复合体,是按照一定规则,根据 用户需要定义的新指令;在汇编时被展开,在形成执行文件时执行其展开体。 1)指令性语句结构 [标号:][前缀] 指令助记符 [操作数][;注释] 说明: ① 方括号表示的成分可以选用或缺省; ② 标号是后面紧跟“:”的一个标识符,标号代表该行指令在存储器中的 首地址,标号可作为转移指令和调用指令的一个操作数; ③ 前缀如重复前缀、总线封锁前缀等; ④ 指令助记符44 ⑤ 操作数可以是一个、两个或没有,由指令类型决定,若有两个操作数, 前面为目的操作数,后面为源操作数,中间用逗号隔开; ⑥ 注释是以“;”开始的字符串,不影响程序的汇编与执行,仅用于增加 源程序的可读性。 2)指示性语句结构 [名字] 伪指令助记符 [操作数][;注释] 说明: ① ② 名字可以是符号常量名、 变量名、 过程名、 段名等, 名字后面不能有 “: ” ; 伪指令命令助记符共有 40 多个,按功能不同分成八类,本章介绍的常用五类共 20 多个; ③ 操作数可少到一个没有,多到两个以上,操作数之间须用逗号分隔; 3)宏指令语句结构 [宏名] 宏操作助记符 [操作数][;注释] 说明: ① 宏名即宏指令名,是一标识符,宏名后面不能有“:”; ② 宏操作助记符共有 8 个,分别是 MACRO、ENDM、EXITM、LOCAL、 REPT、IRPC、IRP、PURGE; ③ 其余同指示性语句。 3. 汇编语言源程序结构 汇编语言源程序是以模块为单位独立汇编的。一个完整的源程序,至少由一 个模块组成。 较大的应用程序可由多个模块组成,每个模块具有不同的功能,把这些模块 分别汇编成目标代码后,再用连接程序把它们连接成一个可执行程序。 一个源程序模块又分成若干个段。 三、汇编语言中的表达式 表达式可以在汇编语言的语句中含有。 表达式的组成: 运算对象:可以是常量、变量、标号; 运算符:算术运算符、逻辑运算符、关系运算符。 表达式的分类: 数值表达式:只产生一个数值结果; 地址表达式:产生一个存储器地址,若地址中存放的是数据,则这 个地址为变量,若地址中存放的是指令,则这个地址为标号。 表达式的运算:45 由汇编程序汇编时完成,运算所得结果再作为语句操作数使 用。 1. 表达式中的常量、变量和标号 均能被汇编程序识别。 1)常量:是在汇编时已经确定的常数值,常量可以是数据和字符。 常量分为“数值常量”和“符号常量”两种。 例:ONE EQU 1 DATA=2*12H MOV AX,DATA+ONE 执行上述程序后,即把 25H 送到 AX 中。 2)变量:常以变量名的形式出现在程序中,可以看作是存放数据的存储单 元的符号地址,它用来定义存储器中的数据。 变量具有三种属性: ① ② ③ 段属性:变量所在段的段地址; 偏移地址属性:变量所在段的段内偏移地址; 类型属性:变量占用存储单元的字节数: BYTE:字节型,一字节 WORD:字型,两字节 DWORD:双字型,四字节 QWORD:四字型,八字节 TBYTE:五字型,十字节 变量名可以使用伪指令 DB、DW、DD、DQ、DT 定义。 例:Y DW 数据,Y=4981H Z DD 10 DUP(0) ;变量 Z 是双字类型,该变量存储区有 10 个值 为 0 的双字数据 3)标号 是给指令性语句所在单元地址取的名字,它表明该指令在存储器中的位置, 可作为转移类指令的操作数。它有三种属性: ① 段属性:标号所在段的段地址; ② 偏移地址属性:标号所在段的段内偏移地址; NEAR:近标号,表示该标号在段内使用; FAR:远标号,表示该标号在段间使用。 2. 表达式中的各类运算符 1)算术运算符 共七种464981H ,1234H ;变量 Y 是字类型,该变量存储区有两个字③ 类型属性:(也称距离属性) +(加)、-(减)、*(乘)、/(除)、MOD(模除)、SHL(左移)、SHR (右移)。 注意点:除(/)只取商,模除(MOD)只取余,SHL 一次相当于*2,SHR 一次相当于/2。 例:MOV AX,15*4/7 ADD AX,60 MOD 7 MOV CX,-2*30-10 2)逻辑运算符 AND、OR、XOR、NOT 四种。 逻辑运算符:只出现在语句的操作数部分,运算在汇编时完成; 逻辑操作指令:只出现在指令的操作码部分,运算在执行指令时完成。 例: MOV AL, NOTB XOR AX,0FA0H XOR 0F00AH ; 等效于 MOV AL, B ;等效于 XOR AX,0FFAAH OR AL,B OR B ;等效于 OR AL,)关系运算符 EQ(等于)、NE(不等)、LT(小于)、GT(大于)、LE(小于等于)、 GE(大于等于)共六种。 它们对两个运算对象进行比较操作,若满足条件,表示运算结果为真 “TRUE”,输出结果为全“1”;若比较后不满足条件为假“FALSE”,输出 结果为全“0”。 例:MOV AX,5 EQU 101B ;等效于 MOV AX,0FFFFH MOV AL,64H GE 100 MOV BH,10H GT 16 4)取值运算符 取值运算符的操作对象:必须是存储器操作数,即变量、标号或过程名。 使用格式为: 取值运算符 ① SEG 运算符 ;BX←变量 BUF 的段地址 变量或标号 返回的结果是一个数值常量。 取段地址运算符,该运算返回变量或标号所在段的段地址(字常量)。 例:MOV BX,SEG BUF ② OFFSET 运算符 ;AX←标号 START 的偏移地址 ;等效于 MOV AL,0FFH ;等效于 MOV BH,00H ;AX=0008H ;AX=8+4=12 ;CX=-70取段内偏移地址符,该运算返回变量或标号所在段的段内偏移地址。 例:MOV AX,OFFSET START ③ TYPE 运算符47 取类型属性运算符,该运算返回变量或标号的类型值。若运算对象是标号, 则返回标号的距离属性值,若运算对象是变量,则返回变量类型所占字节数。 例: N1 DB 30H,31H,32H N2 DW 4142H,4344H N3 DD N2 ALD:MOV AL,TYPE N1 ;AL←1 ADD AH,TYPE N2 MOV BL,TYPE N3 ;AH←AH+2 ;BL←4MOV BH,TYPE ALD ;BH←-1(0FFH) 变量和标号的类型值对应关系如下: 类 变 量 型 BYTE WORD DWOR D 8 QWOR D 10 TWOR D NEAR FAR 类型值 1 2 4标 号 ④-1 -2LENGTH 运算符取数组变量元素个数运算符,如果变量是用重复数据操作符 DUP 说明的, 则返回 DUP 前面的数值 (即重复次数) ; 如果没有 DUP 说明, 则返回值总是 “1” 。 例:KA DB 10H DUP(0) KB DB 10H,20H,30H KC DW 20H DUP(0,1,2DUP(2)) ;AL←10H ;BL←1 ;CX←20H ;DX←1 KD DB ’ABCDEFGH’ MOV AL,LENGTH KA MOV BL,LENGTH KB MOV CX,LENGTH KC MOV DX,LENGTH KD ⑤ SIZE 运算符48 取数组变量总字节数运算符,该运算符返回数组变量所占的总字节数,相当 于 LENGTH 和 TYPE 两个运算符返回值的乘积。 ⑥ HIGH 运算符 取地址表达式或 16 位绝对值高 8 位。 例:CONST EQU 0ABCDH 则:MOV AH,HIGH CONST ⑦ LOW 运算符 取地址表达式或 16 位绝对值低 8 位。 在上例中,MOV AL,LOW 5)设置属性运算符 ① “:”运算符 用来临时给变量、标号或地址表达式指定一个段属性。 例:MOV AX,ES:[BX] ② PTR 运算符 PTR 运算符赋予“表达式”指定的“类型”,新的类型只在所处的指令内有 效。 PTR 的格式为:类型 PTR ③ THIS 运算符 该运算符和“=”(或 EQU)伪指令连用,把它后面指定的类型属性或距离 属性赋给当前的变量或标号。 常用的格式为: 变量或标号=THIS 属性 例:GAMA=THIS BYTE ST=THIS 6)其他运算符 ① SHORT 运算符 当转移指令的目标地址与该指令之间的距离在-128~+127 字节范围内,可 用 SHORT 运算符进行说明,以保证汇编程序能为该指令生成最短的机器码,从 而提高运行效率。 例:L1:JMP L2:MOV SHORT L2 ┆ AX,BX 标号 L1、L2 之间的字节距离小于 127 字节,称为短转移。 ② 圆括号“( )”运算符 用来改变被括运算符的优先级别。 ③ 方括号“[ ]”运算符 多用在存储器操作数的表达式中49将汇编成:MOV AH,0ABH0ABCDH将汇编成:MOV AL,0CDH;表示不用 DS,而用 ES 来形成段地址。表达式;变量 GAMA 的类型属性定义为字节FAR;标号 ST 赋予远标号属性 运算规则: a. 方括号的内容表示存储器操作数的偏移地址; b. 有多对方括号顺序排列时,操作数的偏移地址等于各方括号内容之和; c. 一个常量后面跟有方括号时,偏移地址等于该常量与方括号内容之和; d.一个变量后面跟有方括号时,偏移地址等于该变量的偏移地址与方括号内 容之和。 带方括号的地址表达式遵循的规则: a.只有 BX、BP、SI、DI 可在方括号中出现; b.不允许 BX、BP 同时出现在同一个地址表达式中; c.不允许 SI、DI 同时出现在同一个地址表达式中; d.当多个寄存器出现在方括号中时,只能作加运算; e. 当方括号中包含 BP,则隐含使用 SS 提供段地址,否则均隐含使用 DS 提 供段地址。四、伪指令语句伪指令语句格式为: [名字] 伪操作指令 [操作数][;注释] 1. 符号定义伪指令 在汇编语言中,所有符号常量、变量名、标号、过程名、记录名、指令助记 符、 寄存器名等都称为符号, 这些符号可以通过伪指令重新命名或定义新的类型 属性。 1)EQU 伪指令 使用格式: 名字 EQU 表达式 功能:是将数值或字符序列与一个指定的名字等价; 注意点:EQU 定义过的名字不能重新定义。 ① 为常量定义一个符号,以便在程序中使用符号来表示常量。 格式为:符号常量名 例:ONE EQU 1 TWO EQU 2 SUM EQU ONE+TWO ② 给变量或标号定义新的类型属性并起一个新的名字。 格式为: 变量名或标号名 EQU [类型 PTR] 变量或标号 例:FIRSTW EQU WORD PTR BYTES;给变量 BYTES 重新定义为 字类型属性,并赋予新变量名 FIRSTW ③ 可以给由地址表达式指出的任意存储单元定义一个名字。50EQU 数值表达式 格式为: 符号名 A PEQU 地址表达式 ;基址引用赋予符号名 XYZ ;加段前缀的直接寻址引用符号名 P例:XYZ EQU [BP+3] EQU ES:ALPHA EQU 原符号名EQU ARRAY[BX][SI] ;基址加变址引用赋予符号名 A④ 用来为汇编语言中的任何符号定义一个新的名字。 格式:新的名字 LD 例:COUNT EQU CX 2)“=”伪指令 “=”伪指令与 EQU 具有相同的功能,区别仅在于“=”伪指令定义的符号 允许重新定义,使用更灵活方便。 例:EMP=60 ;定义 EMP 等于常数 60 EMP=EMP+1;又定义 EMP 等于常数 61 3)LABEL 伪指令 格式为:变量或标号名 LABEL 类型 功能:为当前存储单元定义一个指定类型的变量名或标号。 下面的例子是 LABEL 伪指令的常见用法: ① 用法一: DA_BYTE 变量名 DA_BYTE DA_WORD DW H 量名 DA_WORD MOV AX,DA_WORD[0] MOV BL,DA_BYTE[0] ② 用法二: LOPF LABEL FAR AX,[BX+DI] ;为当前存储单元定义一个 FAR ; 当前存储单元另定义一个 NEAR ;段间转移使用标号 LOPF,段内则使 属性的标号 LOPF LOPN: MOV 属性的标号 LOPN ┇ 用 LOPN 2. 变量定义伪指令 常用的变量定义伪指令有 DB、DW、DD、DQ、DT,分别用来定义字节、 单字、双字、四字及十字节类型变量。 基本应用格式如下:51;为寄存器 CX 定义新的符号名 COUNTEQU MOV ;为指令助记符 MOV 定义新的符号名 LDLABEL BYTE;为当前存储单元定义一个字节 ;当前存储器单元另有一个字变 ;AX←4142H ;BL←42H [变量名]{DB│DW│DD│DQ│DT} 〈表达式〉 其中,变量名是可选的;{ }中的伪操作指令必须选用一种,表达式有以下集 中几种方式: 1)数值表达式 这种形式定义的变量具有表达式给定的数值初值。 例:BETA DW 2)ASCII 字符串 字符串必须用单引号括起来。 特点:DB 伪指令为串中每一个字符分配一个字节单元,且自左到右按地址 递增的顺序依次存放,字符个数不得超过 255 个。 例:MSG DB ’STUDENT’ 3)地址表达式 地址表达式运算结果是一个地址,因此只能用 DW 或 DD 定义。 如果用 DW 定义,则将原变量或标号的偏移地址定义为新变量; 如果用 DD 定义,则将原变量或标号的偏移地址和段地址分别置入新变量的 低位和高位字中。 例如: BETA PBETAW 偏移地址 MOV AX, SEG BETA MOV BX,PBETAW MOV DX,PBETAW[2] MOV CX,PBETAW[0] 址 4)? 问号表示所定义的变量未指定初值。 例:BUF DW ? ;定义一个字变量 BUF,初值为一随机数 5)〈 n 〉DUP 〈表达式〉 用于定义重复变量,DUP 是重复数据操作符,n 表示重复次数,括号内的表 达式表示要重复的内容。 例:TAB DB 100 DUP(0) ;数组变量 TAB 有 100 个初值为 0 的字节 元素 DUP 操作符可以嵌套使用, 即圆括号中的表达式又是一个带 DUP 的表达式。 例:TAB DW 2 DUP(5DUP(4),7)524*10H;BETA 为字类型,初值为 64DW3254H,5678H BETA ; 变量的初值为 BETA 的段地址和LABEL WORDPBETAD DD;BX←BETA 的偏移地址 ;DX=AX, 为 BETA 的段地址 ;CX=BX, 为 BETA 的偏移地 数据序列为:4,4,4,4,4,7,4,4,4,4,4,7 共占 24 个字。 3. 段定义伪指令 8086 利用存储器分段技术管理存储器信息, 而段定义伪指令可使我们按段来 组织程序和使用存储器。 涉及分段的伪指令主要有 SEGMENT、ENDS、ORG、GROUP 和 ASSUME。 1)SEGMENT 和 ENDS 伪指令 ① 语句格式 〈段名〉SEGMENT [定位方式][组合方式][分类名] ┆ 语句 〈段名〉ENDS 段名是为该段起的名字; 定位方式、组合方式和分类名是可选的,若选两个以上时,书写时顺序必须 与格式中的顺序一致。 注意点:当某段作为堆栈段使用时,必须至少有组合方式 STACK。 ② 组合方式 指出如何链接不同模块中的同名段,把不同模块中的同名段按照指定的方式 组合起来。既便于程序运行,又可以达到有效使用存储空间的目的。 组合方式有六种: a.PUBLIC:表示该段与其他模块中说明为 PUBLIC 的同名同类别的段链接 起来共用一个段地址,形成一个物理段。 b.STACK:与 PUBLIC 类型同样处理,只是组合后的这个段专门用作堆栈 段。 c.COMMON:表示该段与其他模块中被说明成 COMMON 的同名同类别段 共用一个段起始 地址,且相互覆盖。组合后,段的长度是各模块同名段中最大的 COMMON 段长度。 d. MEMORY:表示该段定位在其他段之上,即地址较大区域。如果各模块 中不止一个段选用该方式, 则把第一个遇到的段作 MEMOR 处理, 而其它段 均作 COMMON 方式处理。 e. AT〈数值表达式〉:表示该段应按绝对地址定位,段地址为数值表达式的 值,位移量为 0。 例:AT 1234H 表示该段段基址为 12340H。 f. NONE:即不指定方式,链接时它将是一个独立的段。 ;段内所有53 如何链接参见图 4.1。 ③ 定位方式 定位方式通过汇编告知 LINK 程序如何将组合后的新段定位到存储器中。 定位方式有四种: a.PARA 定位方式:规定段从 16 的整数被地址(指物理地址)开始,称为 段边界。它使得段间留有 1 到 15 个字节的间隙,这也是一种缺省方式。 b.BYTE 方式:规定段可以从任何地址开始,它使得段间不留有任何间隙。 c.WORD 方式:规定段只能从偶地址开始,称为字边界,它使得段间可能 留有一个字节的间隙。 d.PAGE 方式:规定段从 256 的整数倍地址开始,称为页边界,它使得段 间可能留有 1 到 255 个字节的间隙。 ④ 分类名 指令对分类名相同的各模块中的所有段如何处理,LINK 程序把各模块中分 类名相同的所有段 (段名未必相同) 放在连续的存储区域内, 但仍然是不同的段。 分类名相同的各个段在链接时,先出现的在前,后出现的在后。 注意点:分类名应用单引号括起来。 ⑤ 使用段定义语句的两点说明:54 a.源程序模块中的某一段,可使用一对 SEGMENT 和 ENDS 编写完毕,也 可以分为多对 SEGMENT 和 ENDS 编写,只要使用相同的段名即可。但 这些段的 SEGMENT 语句的组合方式、定义方式、分类名应相同,不得 相互矛盾,或者以先出现 SEGMENT 语句为准,其余均省略不写。 b.LINK 程序链接时,先处理组合方式,后处理定位方式,再处理分类名。 2)ORG 伪指令 格式:ORG 〈表达式〉 功能:该指令后生成的目标代码,从表达式提供的偏移地址开始存}

我要回帖

更多关于 q/jnc0003s什么意思 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信