微机原理及应用核心笔记.pdf

上传人:w*** 文档编号:86188015 上传时间:2023-04-14 格式:PDF 页数:159 大小:7.38MB
返回 下载 相关 举报
微机原理及应用核心笔记.pdf_第1页
第1页 / 共159页
微机原理及应用核心笔记.pdf_第2页
第2页 / 共159页
点击查看更多>>
资源描述

《微机原理及应用核心笔记.pdf》由会员分享,可在线阅读,更多相关《微机原理及应用核心笔记.pdf(159页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 第 1 章、微型计算机基础知识 11 微机的一般概念和基本组成(一)冯.诺依曼结构计算机 从第一代电子计算机开始到现代计算机,其制造技术发生了极大的变化,但我们目前使用的各类计算机大都沿用了冯.诺依曼结构。概括起来冯.诺依曼结构有如下要点:1、采用二进制形式表示数据和指令;2、将程序(包括数据和指令序列)事先存储到主计算机内,即:程序顺序存储方式;论文:程序控制、存储程序 3、计算机系统由运算器、控制器、存储器、输入和输出装置等组成。(二)微型机的基本组成 微型计算机系统由计算机硬件系统和软件系统组成。(微机系统、微机、CPU)P3 微型计算机系统的硬件由微型计算机(主机)和外围(输入、输出

2、)设备组成。主机由:CPU(中央处理器:算术、逻辑运算部件;累加器、寄存器;控制部件;内部总线);主存储器(ROM、RAM);输入、输出接口;系统总线组成。微型计算机系统的软件由系统软件、工具软件和应用软件组成。CPU 是计算机的心脏。是一片超大规模集成电路芯片,它的功能直接决定了计算机的性能好坏。CPU 的主要功能:可进行算术、逻辑运算;临时保存数据;能对指令进行译码,并执行规定的动作;能与内存或外设交换数据;能提供整个系统需要的定时和控制;可以响应其它设备的中断请求 CPU 的主要参数有:(1)主频 (2)一次能处理的数据位数。它由 CPU 的数据线条数决定。(3)能带多少存储器和 I/O

3、 口。它由 CPU 的地址线条数决定。如:Pentium 80586 CPU 为 32 位 CPU,主频可为 60MHZ,可带 4GB 存储器。Pentium pCPU 为 32 位 CPU,主频可为 130MHZ。PC/XT 机,CPU 是 Inter 8086,16 位,主频 8MHZ,可 1MB 存储器。存储器用来存储程序和数据。存储器分内存和外存。(1)内存 CPU 用地址线直接访问的存储器称内存,内存又分 RAM 和 ROM。ROM 是只读存储器,其中存放的程序和数据是计算机生产厂用特殊方式写入的,计算机不加电时也不丢失。RAM 叫可读可写存储器,RAM 中一般存放用户开发的程序和数

4、据,只要一掉电,RAM 中的数据全部丢失。人们常说的计算机容量,就是指内存。(2)外存 外存是 CPU 用输入输出方式存取的存储器。一般指软盘和硬盘。它的特点是容量大,速度慢,价格低。目前软盘的容量一般为 1.4MB(兆字节),硬盘一般达到 10GB(10 千 MB)。总线是连接多个装置或功能部件的一组公共信息通道。微机中一般有三种总线:地址总线 其条数,决定了系统能配带多少存储器;每一个存储单元都有一个确定的地址,该地址就是通过地址线描述的。数据总线 其条数,决定了机器的字长;控制总线 如:8086CPU 有 20 条地址线,16 条数据线。直接寻址 1M 字节存储器,一次能处理 16 位二

5、进制数据。12 计算机中的数和码(一)计算机中常用的编码 1、BCD 码 BCD 码是一种用二进制表示的十进制数。从四位二进制数表示的数:0000-1111 中选出 0000-1001 分别表示十进制中的 0-9 这十个数码,它们就是 BCD 码。2、ASCII 码 计算机中的一些符号,如:大小写英文字母,各种专用符号:+、-、*、/、(、)、,汉字,图形符号等等都叫非数值数据。在计算机中非数值数据也要用二进制表示。如人们敲键盘输入计算机中的信息就是二进制数。所有外不设备输入计算机的都是用二进制数。为了使不同生产厂商生产的外部设备如键盘、显示器等能通用,同时人们输入的程序和数据能共享,大家都能

6、看懂,对输入计算机的非数值信息必须采用大家都共识,共同规定的方案去编码。ASCII 码 现在用得最广泛的西文编码方案是 ASCII 码,即美国标准信息交换码。在这种编码方案中,用八位二进制数来表示一个 ASCII 码,其中最高位为 0,余下的七位代表 128 个不同的字符,其中 95 个(编码值大于 31 的)编码代表键盘能敲入并且能显示的,打印机也能打印的 95 个字符。如大小写各 26 个字母,09 这十个数字符,通用的运算符和标点符号+,-,*。/,源;如果 OF 和 SF 相异,则源目。(三)乘法指令 乘法指令有两类:无符号数乘法指令和有符号数乘法指令。(1)无符号乘法指令 MUL 指

7、令格式:MUL 源 指令功能:(AL|AX)*源,其结果放到 AX|DX:AX 规定:#1 源可以是除立即数以外的其它寻址方式操作数。#2 当源是无符号字节操作数时,被乘数必须放在 AL 中;当源是 16 位无符号字操作数时,被乘数必须放在 AX 中。否则将得到不正确的结果。#3 影响 OF 和 CF 标志位,但 AF、PF、SF 和 ZF 无定义(不确定)。当 OF、CF=1 时,说明结果的高半部分有非零的值。(2)有符号乘法指令 IMUL 指令格式:IMUL 源 指令功能:(AL|AX)*源,其结果放到 AX|DX:AX 规定:#1 源可以是除立即数以外的其它寻址方式操作数。#2 当源是有

8、符号字节操作数时,被乘数必须放在 AL 中;当源是 16 位有符号字操作数时,被乘数必须放在 AX 中。否则将得到不正确的结果。#3 影响 OF 和 CF 标志位,但 AF、PF、SF 和 ZF 无定义(不确定)。当 OF、CF=1 时,结果的高半部分有结果的有效值(不是符号的扩展),当 OF、CF=0 时,结果的高半部分是“结果的符号位”的扩展。如:09FFH*(-1)(四)除法指令 8086CPU 的除法指令有两类:无符号数除法指令和有符号数除法指令。它们均是不等长除法指令。即:被除数长度必须是除数长度的两倍。所以,在进行除法运算前应根据除数长度将被除数变成它的两倍长度。(1)无符号数除法

9、指令 DIV 指令格式:DIV 源 指令功能:AX|DX:AX/源,其结果:商放在 AL|AX,余数放在 AH|DX 之中。规定:#1 源可以是除立即数以外的其它寻址方式的操作数。#2 当源是字节操作数时,被除数必须放在 AX 之中;当源是字操作数时,被除数必须放在 DX和 AX 之中,其中 DX 为高半部分。#3 除法指令执行后,标志寄存器的标志位均无定义。#4 商如果是一个字的长度,则除数必须是 16 位的。直接用 DIV 指令,商不能大于 16 位。(2)有符号数除法指令 IDIV 指令格式:IDIV 源 指令功能:AX|DX:AX/源,其结果:商放在 AL|AX,余数放在 AH|DX

10、之中。规定:#1 源可以是除立即数以外的其它寻址方式的操作数。#2 当源是有符号字节操作数时,被除数必须放在 AX 之中;当源是有符号字操作数时,被除数必须放在 DX 和 AX 之中,其中 DX 为高半部分。#3 除法指令执行后,标志寄存器的标志位均无定义。(3)将字节扩展成字的指令 CBW 指令格式:CBW 指令功能:将 AL 中有符号数的符号位扩展到 AH 之中。不影响标志位。用法:一般在两字节有符号数除法前,利用该指令,将符号位进行扩展,以使两数变成不等长数。(4)将字扩展成双字的指令 CWD 指令格式:CWD 指令功能:将 AH 中有符号数的符号位扩展到 DX 之中。不影响标志位。用法

11、:一般在执行两字长有符号数除法前,利用该指令,将符号位进行扩展,以使两数变成不等长数。(五)BCD 码运算指令 BCD 码有两类:组合(压缩)型 BCD 码和未组合(非压缩)型 BCD 码。BCD 码的运算相应也有两种情况。一个字节包含两个 BCD 码的数叫组合型 BCD 码,一个字节只有低四位为 BCD 码的数或数字 0-9 的ASCII 码叫未组合 BCD 码。(1)未组合 BCD 码加法十进制调整指令 AAA 指令格式:AAA 指令功能:对 AL 中的数进行校正:在 AX 中产生未组合十进制数和。用法:#1 先用加法指令进行两个未组合 BCD 码相加,且将结果放在 AL 之中#2 执行该

12、指令 AAA,则在 AX 中将产生未组合十进制数和。显然,该指令只能对9 的两个 BCD 码相加,才能进行调整。如:MOV AL,7 ADD AL,5 AAA 执行前两条后,AL=0CH,经 AAA 调整后,AX=0102H,CF=OF=1。(2)组合 BCD 码加法十进制调整指令 DAA 指令格式:DAA 指令功能:对 AL 中的数进行校正:在 AL 中产生组合十进制数和。用法:#1 先用加法指令进行两个组合 BCD 码相加,且将结果放在 AL 之中#2 执行该指令 DAA,则在 AL 中将产生未组合十进制数和。显然,该指令只能对99 的两个 BCD 码相加,才能进行调整。如:MOV AL,

13、56H(BCD)ADD AL,47H(BCD)DAA 执行前两条后,AL=9DH,经 DAA 调整后,AL=03H,CF=1。例:多字节组合 BCD 码十进制相加 设两数长度均为 8 个字节,分别存放在 1000H 和 2000H 开始的 8 个单元中,要求将两数相加后,结果放在 2000H 开始的内存区域。MOV SI,1000H MOV DI,2000H MOV CX,8 CLC L1:MOV AL,SI ADC AL,DI DAA MOV DI,AL INC SI INC DI LOOP L1 MOV AH,4CH INT 21H (3)未组合 BCD 码减法十进制调整指令 AAS 指令

14、格式:AAS 指令功能:对 AL 中的数进行校正:在 AX 中产生未组合十进制数差。用法:#1 先用减法指令进行两个未组合 BCD 码相减,且将结果放在 AL 之中#2 执行该指令 AAS,则在 AL 中将产生未组合十进制数差。显然,该指令只能对9 的两个 BCD 码相减,才能进行调整。如:MOV AL,7 ;7为 7 的 ASCII 码 SUB AL,5 AAS 执行前两条后,AL=32H,经 AAS 调整后,AL=02H。(4)组合 BCD 码加减十进制调整指令 DAS 指令格式:DAS 指令功能:对 AL 中的数进行校正:在 AL 中产生组合十进制数差。用法:#1 先用减法指令进行两个组

15、合 BCD 码相减,且将结果放在 AL 之中#2 执行该指令 DAS,则在 AL 中将产生未组合十进制数差。显然,该指令只能对99 的两个 BCD 码相减,才能进行调整。如:MOV AL,56H(BCD)SUB AL,47H(BCD)DAS 执行前两条后,AL=0FH,经 DAS 调整后,AL=09H,CF=1。(5)未组合 BCD 码的乘法十进制调整指令 AAM 指令格式:AAM 指令功能:对 AL 中的数进行校正:在 AX 中产生未组合十进制数积。用法:#1 先用乘法指令进行两个未组合 BCD 码相乘,且将结果放在 AL 之中#2 执行该指令 AAM,则在 AL 中将产生未组合十进制数积。

16、规定:BCD 码总是作为无符号数对待,因此,乘法指令只能用 MUL。显然,该指令只能对99 的两个 BCD 码相乘,才能进行调整。如:MOV AL,05H(BCD)MOV BL,06H(BCD)MUL BL AAM 执行前三条后,AX=001EH,经 AAM 调整后,AX=0300H(BCD)。(6)未组合 BCD 码的除法十进制调整指令 AAD 指令格式:AAD 指令功能:对 AX 中的数进行校正:在 AX 中产生未组合十进制数。用法:#1 将被除数存放在 AX 中。执行 AAM,对 AX 中的被除数进行调整。#2,用除法指令进行两个未组合 BCD 码相除,十进制结果的商放在 AL 之中,余

17、数在 AH 中。规定:BCD 码总是作为无符号数对待,因此,除法指令只能用 DIV。显然,该指令只能对被除数99,除数9 的两个 BCD 码相除,才能进行调整。如:MOV AX,0300H(BCD)AAD MOV BL,06H(BCD)DIV BL 执行前两条后,AX=001EH,执行 DIV 指令后,AX=0005H(BCD)。3.逻辑运算(一)逻辑运算指令 逻辑指令有三类:逻辑运算指令:NOT、AND、OR、XOR 及 TEST 移位指令:SHL、SAL、SHR 和 SHR 循环移位指令:ROL、ROR、RCL 和 RCR 1.逻辑运算指令 (1)求反指令 NOT 指令格式:NOT 目 指

18、令功能:将目标内容求反。规定:目标是除立即数以外的所有寻址方式操作数。不影响标志位。(2)逻辑与指令 AND 指令格式:AND 目,源 指令功能:将目标内容同源内容按位进行逻辑与运算。结果放在目标。规定:目标是除立即数以外的所有寻址方式操作数;CF=OF=0,其它标志反映操作结果的特征。用法:该指令常用来屛蔽某些位(使某些位置 0)或使某些位不变。如:AND AX,00FFH 其结果 AH=0(被屛蔽);AL 内容不变。(3)逻辑或指令 OR 指令格式:OR 目,源 指令功能:将目标内容同源内容按位进行逻辑或运算。结果放在目标。规定:目标是除立即数以外的所有寻址方式操作数;CF=OF=0,其它

19、标志反映操作结果的特征。用法:该指令常用来使某些置 1 或使某些位不变。如:OR AX,00FFH 其结果 AH 内容不变;AL=0FFH(所有位为 1)。(4)逻辑 异或指令 XOR 指令格式:XOR 目,源 指令功能:将目标内容同源内容按位进行逻辑异或运算。结果放在目标。规定:目标是除立即数以外的所有寻址方式操作数;CF=OF=0,其它标志反映操作结果的特征。用法:#1 该指令常用来使某些置 0 或使某些位不变。#2 某数与同一数异或两次,该数不变。如:OR AX,AX 其结果 AX 被清 0。(5)测试指令 TEST 指令格式:TEST 目,源 指令功能:将目标内容同源内容按位进行逻辑与

20、运算。结果不放回目标,只影响标志位。规定:目标是除立即数以外的所有寻址方式操作数;CF=OF=0,其它标志反映操作结果的特征。用法:该指令常用来测试某些位是否置 0 或置 1。如:TEST AL,80H 执行后,如果 ZF=0,则 AL 的最高位为 1,反之,最高位为 0。(二)移位指令 (1)算术左移指令和逻辑左移指令 SAL 和 AHL 指令格式:#1 SAL 目,1#2 SAL 目,CL 指令功能:将目标操作数各数位依次左移一次,最高位进入 CF,且最低位补 0。若 CL 内容大于 1 时,重复前面的操作。除 AF 标志位不确定外,影响其它标志位。规定:当移位大于 1 时,只能使用格式

21、2,CL 中事先存放次数。用法:无论有、无符号数,左移一次等于乘 2;(不溢出时)(2)算术右移指令 SAR 指令格式:#1 SAR 目,1#2 SAR 目,CL 指令功能:将目标操作数各数位依次右移一次。最低位进入 CF,且最高位不变。若 CL 内容大于 1 时,重复前面的操作。除 AF 标志位不确定,外影响其它标志位。规定:当移位大于 1 时,只能使用格式 2,CL 中事先存放次数。用法:适用于有符号数。右移一次等于除 2。(3)逻辑右移指令 SHR 指令格式:#1 SHR 目,1#2 SHR 目,CL 指令功能:将目标操作数各数位依次右移一次。最低位进入 CF,最高位补 0。若 CL 内

22、容大于1 时,重复前面的操作。除 AF 标志位不确定,外影响其它标志位。规定:当移位大于 1 时,只能使用格式 2,CL 中事先存放次数。用法:对于无符号数。右移一次等于除 2,若用于有符号数时,右移一次不能认为是除 2。(三)循环移位指令 (1)循环左移指令 指令格式:#1 ROL 目,1#2 ROL 目,CL 指令功能:将目标操作数各数位依次左移一位。最高位进入 CF,同时进入最低位。若 CL 内容大于 1,则重复前面的操作。除 AF 标志位不确定,外影响其它标志位:规定:当移位大于 1 时,只能使用格式 2,CL 中事先存放次数。(2)循环右移指令 指令格式:#1 ROR 目,1#2 R

23、OR 目,CL 指令功能:将目标操作数各数位依次右移一位。最高低进入 CF,同时进入最高位。若 CL 内容大于 1,则重复前面的操作。除 AF 标志位不确定,外影响其它标志位:规定:当移位大于 1 时,只能使用格式 2,CL 中事先存放次数。(3)带进位循环左移指令 指令格式:#1 RCL 目,1#2 RCL 目,CL 指令功能:将目标操作数各数位依次左移一位。最高位进入 CF,CF 进入最低位。若 CL 内容大于 1,则重复前面的操作。除 AF 标志位不确定,外影响其它标志位:规定:当移位大于 1 时,只能使用格式 2,CL 中事先存放次数。(4)带进位循环右移指令 指令格式:#1 RCR

24、目,1#2 RCR 目,CL 指令功能:将目标操作数各数位依次右移一位。最低进入 CF,CF 进入最高位。若 CL 内容大于 1,则重复前面的操作。除 AF 标志位不确定,外影响其它标志位:规定:当移位大于 1 时,只能使用格式 2,CL 中事先存放次数。4.串操作指令(一)串传送指令 所谓串,就是存储在一段连续区域中的一组数据。串操作指令可以实现对一串数据的操作。串操作指令有五类:串传送、串比较、串搜索、取串和存串等。串操作指令的共同点:如果指令操作数中有源串和目标串,则源串首址应存入:DS:SI;目标串首址应存入:ES:DI;在需要的时候,串操作指令前可以加重复前缀 REP|REPE|RE

25、PNE,以实现一次完成所需的串操作。此时串长度应存放在 CX 寄存器中;串操作时,地址指针的修改与方向标志 DF 有关:当 DF=0 时,SI|DI=SI|DI+1|+2;当 DF=1 时,SI|DI=SI|DI-1|-2 (1)串传送 MOVS 指令格式:#1 MOVSB ;字节串传送指令#2 MOVSW ;字串传送指令#3 MOVS 目标串符号首址,源串符号首址 功能:将源串中一个字节(字)传送到目标串。不影响标志位。例:将 100 字节的数据从 3000H:100H,搬到 3000H:200H MOV AX,3000H MOV DS,AX MOV ES,AX MOV SI,0100H M

26、OV DI,0200H MOV CX,50 REP MOVSW MOV AH,4CH INT 21H(二)串比较指令 (2)串比较指令 CMPS 指令格式:#1 CMPSB ;字节串比较指令#2 CMPSW ;字串比较指令#3 CMPS 目标串符号首址,源串符号首址 功能:将源串中一个字节(字)与目标串比较。影响标志位。例:比较两串是否相等,若相等,置 N1 单元为 1,否则置 0。假设:两串分别放在 DS 段的 STR1 和 STR2区域,串长度分别是 L1、L2。分析:该程序须解决两个关键问题:两串长度是否相等?相等才比较串是否相等。两串长度是否相等用CMP 指令;比较串是否相等用 REP

27、E CMPSB 指令。LEA SI,STR1 LEA DI,STR2 MOV CX,L1 CMP CX,L2 JNE UNEQ CLD REPE CMPSB JNE UNEQ MOV M1,0FFH JMP EXIT1 UNEQ:MOV M1,0 EXIT1:MOV AH,4CH INT 21H 请考虑:程序中是否可以不要 JNE UNEQ 语句?(三)取串指令 (3)取串指令 LODS 指令格式:#1 LODSB ;从串中取字节指令#2 LODSW ;从串中取字指令#3 LODS 源串符号首址 功能:将源串中一个字节(字)传送到 AL(AX)中。不影响标志位。(四)存串指令 (4)存串指令

28、STOS 指令格式:#1 STOSB ;存字节于目标串指令#2 STOSW ;存字于目标串指令#3 STOS 目标串符号首址 功能:将 AL(AX)中的一个字节(字)存到目标串中。不影响标志位。例:将 BLOOK1 开始的 100 个字节单元中的内容,传送到 BLOOK2 单元开始的区域中,两区域的相对位置不确定。数据传送过程中遇 0DH 则结束传送。分析:按题义:传送过程中遇 0DH 要结束,因此,传送过程中应不断判断传送的是否是 0DH?所以,不用 MOVS 指令,而用 LODS 和 STOS 指令较方便。另,两区域的相对位置不确定,因此,一进入程序就需要判断哪个地址大,这样才能确定移动方

29、向。程序设计:MOV AX,SEG BLOOK1 ;将 BLOOK1 的段地址送 AX MOV DS,AX MOV ES,AX LEA SI,BLOOK1 ;将 BLOOK1 的偏移地址送 SI LEA DI,BLOOK2 MOV CX,100 ;串长度送 CX CMP SI,DI ;(SI)-(DI)JE DONE ;目标地址与源地址相同,转结束传送 JA DFO ;源目,转“从串头开始搬家”STD ;源AL,并修改 SI CMP AL,0DH JE DONE ;是 0DH 转结束 STOSB ;不是 0DH 则将 AL-目标串,并修改 DI LOOP TRAN ;CX0 返回循环 DONE

30、:MOV AH,4CH INT 21H (五)目标串搜索指令 (5)目标串搜索指令 SCAS 指令格式:#1 SCASB ;从目标串中搜索字节指令#2 SCASW ;从目标串中搜索字指令#3 SCAS 目标串符号首址 功能:将 AL(AX)中的一个字节(字)与目标串中某字节(字)比较,不影响标目标串,只影响标志位。例:确定字符串长度。设:串存放在 DS:STRING 的数据区;串结束符为$;将串长度值存放在 STRLN 单元;如果连续 100字节内无结束符,则在 STRLN 单元填写 0FFH。分析:解决两个主要问题:在串中搜索结束符$;确定串长。在串中搜索结束符$用 REPNE SCASB

31、指令;找着$时,DI 已经指向下一个地址,所以,串长=100-DI-1。LEA DI,STRING MOV AL,$CLD REPNE SCASB JZ DONE1 MOV BL,0FFH JMP DONE2 DONE1:MOV BX,100 SUB BX,CX DEC BX DONE2:MOV STRLN,BL MOV AH,4CH INT 21H 考虑:为什么要 JZ DONE1 语句?5.控制转移指令(一)无条件转移指令及指令寻址 在 8086CPU 的转移指令中,其目标操作数将给出下一条指令到哪儿去找。即给出指令的寻址方式。8086CPU 指令的寻址方式可分成两大类:段内转移寻址方式及

32、段间转移寻址方式。段内和段间均又可分成两种:直接转移和间接转移。下面将通过无条件转移指令作详细分析。无条件转移指令 指令格式:JMP 目 指令功能:程序将转到由目标操作数指明的地址去执行。规定:在 8086 宏汇编中目标操作数只能是标号、存储器操作数和寄存器操作数。即取形式:#1 JMP 标号#2 JMP 寄存器操作数#3 JMP 存储器操作数 其中#1 称作直接转移;#2 和#3 称作间接转移。当标号的定义和引用是在同一程序段中,则叫段内直接转移。如果标号的定义和引用不在同一程序段中,则叫段间直接转移。形式#2 只能是段内转移。当存储器操作数是字操作数时,叫段内间接转移。当存储器操作数是双字

33、时,叫段间间接转移。如:JMP L JMP AX JMP WORD PTR SI JMP DWORD PTRSI (二)条件转移指令 条件转移指令一般是根据标志寄存器中某个标志或几个标志的逻辑关系来决定是否转移。根据依据的条件,可分成三类条件转移指令:单标志条件转移指令;用于判断无符号数大小的条件转移指令;用于判断符号数大小的条件转移指令。条件转移指令形式:J?标号 规定:标号必须是短标号。所谓短标号,是指定义标号的位置与引用该标号的位置之间的偏移量在-128+127 个字节之间。如下例引用是合理的:L:MOV AX,201H ;定义标号 L MOV BX,200H MOV CX,1 MOV

34、DX,0 INT 13H JB L ;引用标号 L INT 3 说明:条件转移指令对应的机器指令由两个字节组成,第一个字节是操作码字节,第二个字节是定义标号的位置(目标位置)相对于 IP(其内容是“下一条要执行指令”的存放地址)的偏移量。以 8 位补码形式出现。(1)单标志条件转移指令 除半进位标志 AF 之外的所有状态标志都有相应的条件转移指令。JZ|JE JNZ|JNE JC JNC JS JNS JO JNO JP JNP (2)判断无符号数大小的条件转移指令 JA ;高于转移 JNA ;不高于转移 JB ;低于转移 JNB (3)判断符号数大小的条件转移指令 JG ;大于转移 JNG

35、JL ;小于转移 JNL 例:求符号数的最大值。设从数据 1000H 开始的区域中存放着 50 个字节的符号数,找出其中最大的一个数并存放到 0FFFH 单元。分析:求符号数的大小必须用 JG、JL、JNG、JNL 中的任意一个。求符号数的最大值的办法:依次比较两数,始终保留大数,并存放在同一(位置)寄存器中。MOV BX,1000H MOV AL,BX MOV CX,50 L1:INC BX CMP AL,BX JNL L2 MOV AL,BX ;保留大数于 AL L2:DEC CX JNZ L1 MOV BX,0FFH MOV BX,AL MOV AH,4CH INT 21H (三)子程序

36、指令 (1)子程序调用指令 CALL 指令格式:CALL 目 规定:目标操作数在 8986 宏汇编程序中只能取以下三种形式:#1 CALL 子程序名#2 CALL 16 位寄存器#3 CALL 16 位存储器或 32 位存储器 功能:执行该指令时,CPU 先将该指令下面一条指令的存放地址压入堆栈(该地址叫返回地址),然后,计算出目标地址的偏移地址并装入 IP,如果是远调用还要将目标地址的段地址装入 CS。其结果,程序将转到目标子程序去执行。(2)返回指令 RET 指令格式:RET|RET N 功能:从堆栈顶弹出两个(近过程调用)或四个(远过程调用)字,装入 IP 和 CS(远过程调用)。其结果

37、是返回到主程序取执行。如果是 RET N,则还要使栈顶指针往上移 N 个字节。一般 N 取偶数值。(四)循环控制指令 循环控制指令用来设计循环程序。此类指令有三条:(1)LOOP 指令 指令格式:LOOP 短标号 功能:该指令执行时,先将 CX 内容减 1,然后判断 CX 中内容是否为 0,若不为 0,则返回到标号处去执行。若为 0,则执行该指令下面一条指令。(2)LOOPZ|LOOPE 指令格式:LOOPZ|LOOPE 短标号 功能:该指令执行时,先将 CX 内容减 1,然后判断 CX 中内容是否为 0 且 ZF 是否为 1,若不同时满足,则返回到标号处去执行,否则执行该指令下面一条指令。(

38、3)LOOPNZ|LOOPNE 指令格式:LOOPNZ|LOOPNE 短标号 功能:该指令执行时,先将 CX 内容减 1,然后判断 CX 中内容是否为 0 且 ZF 是否为 0,若不同时满足,则返回到标号处去执行,否则执行该指令下面一条指令。(4)JCXZ 指令格式:JCXZ 短标号 功能:该指令执行时,只判断 CX 中内容是否为 0,若满足,则返回到标号处去执行,否则执行该指令下面一条指令。(五)中断指令 8086 提供了软中断手段,这就是中断指令 INT 及中断返回指令 IRET。中断指令格式:INT N 规定:N 必须是一字节的数。N 叫中断类型号。N*4 单元为该中断类型的中断向量(即

39、中断服务程序的起始地址)的存放地址。也就是说:N*4 内存单元中的内容就是中断服务程序的起始地址。6.处理器控制指令 处理器控制指令只介绍部分指令及指令功能。(1)标志操作指令 CLC 清 CF STC 置 CF CLD 清 DF STD 置 DF CLI 清 IF CMC CF 取反 (2)CPU 暂停指令性 HLT (3)空操作指令 NOP 三、汇编语言程序设计 机器语言、汇编语言 计算机要完成任何一件工作,都必须执行特定的程序来实现的。程序由一系列指令组成的。CPU 能直接执行的指令只能是机器指令,也就是 CPU 设计者设计的、用二进制代码规定的一些操作。用机器指令设计的程序叫机器语言程

40、序。但是,用机器语言设计的程序不直观,很难编写,修改也很困难。因此,引入了用助记符表示的机器语言,这就是汇编语言。机器语言中的语句与汇编语言的语句一一对应。这样的汇编语句叫可执行语句。为了程序设计的方便,在汇编语言中又增加了一些用来说明程序结构和数据结构、内存分配的语句,这些语句是机器语言中没有的,我们叫伪指令。用汇编语言编写的程序叫汇编语言源程序。CPU 不能直接运行汇编语言源程序,必须经过汇编程序(MASM.exe)解释以后才能执行。这一过程叫汇编。汇编语言源程序结构 1.汇编语言的语句结构 汇编语言中有两种语句,它们的格式不全相同。(1)指令语句的格式 标号:助记符 操作数,操作数 ;注

41、释 说明:#1 标号只能以字母和特殊字符开头,以冒号“:”结束,汇编语言只识别前 31 个符号。#2 合法的字符有:字母、数字和特殊符号:?、.、_、$等。#3 注释必须以分号“;”开头,可以键入任意一个符号。(2)伪指令格式 名字 伪指令 操作数序列 ;注释 说明:#1 名字有:变量名、段名、过程名、组名和域名等。#2 名字只能以字母和特殊字符开头,最后无冒号。#3 操作数序列有一个或多个操作数组成,操作数之间用逗号:“,”分开或用空格分开(依伪指令而定)。如数据伪指令:buffer DB 1,2,3,10 DUP(?),MY WEBS 该语句出现在数据段。它定义了变量 buffer。该变量

42、包含 20 个字节数据,其中头 3 个数是 1,2,3,然后是 10 个随机数,最后是一个占 7 字节的字符串。2.汇编语言源程序结构 汇编语言源程序一般由几个段组成。它们是:数据段、代码段、堆栈段和附加数据段。至少要有一个段,最多只能有四个段。其结构如下:数据段名 SEGMENT 变量 数据伪指令 数据段名 ENDS 堆栈段名 SEGMENT STACK 变量 数据伪指令 堆栈段名 ENDS 附加数据段名 SEGMENT 变量 数据伪指令 附加数据段名 ENDS 代码段名 SEGMENT 过程名 1 PROC ;过程体 过程名 1 ENDP 过程名 2 PROC ;过程体 过程名 2 END

43、P 代码段名 ENDS END 起始标号 由前所述:(1)每一个段均以 SEGMENT 语句开头,以 ENDS 语句结束。(2)只有代码段中才能写 8086CPU 指令,其它段只能写伪指令。(3)代码段中可以包含多个以 PROC 语句开头,以 ENDP 语句结束的过程。(4)整个宏汇编程序最后一个语句是 END。3.标准程序结尾与前奏 汇编语言源程序代码段有两种结尾方式。其目的均是为了使程序能正常结束,并返回 DOS,即将系统的控制权交给 DOS,让 DOS 重新去管理系统,再去执行新程序。否则将会造成死机。DOS 操作系统中安排了几个功能调用能达到此目的。常用的功能调用有 INT 20H 和

44、 INT 21H 中的 4CH调用。但 MAICROSOFT 公司建议不要直接使用 INT 20H 调用。因此,就有了以下两中结尾方式:(1)用指令 RET 结束程序段 如果用户程序的最后一个语句是执行 RET 指令,该指令的功能是从堆栈顶弹出一个字(近过程返回,机器码:C3H)或两个字(远过程返回,机器码:CBH)送入 IP 或 IP、CS。而 IP 或 CS:IP 中的内容就是下一条要执行的程序的地址。为了达到以上目的,程序开头必须包含以下语句:PROC FAR PUSH DS XOR AX,AX PUSH AX 其作用是将先数据段段地址压入堆栈,再将数据 0 压入堆栈。其原因是:DOS

45、要将一个可执行文件从磁盘调入内存运行前,先在内存“用户程序区”中建立一个“程序段前缀”PSP,共 256 个字节。其目的是对将要调入的程序进行管理。如记录调入的文件路径、文件名、长度、所带的参数以及程序出错以后如何处理等等信息。PSP 表的头两个字节内容是:CDH 20H(INT 20H 指令的代码)。DOS 在生成该表以后,将 PSP 的首地址(也就是一条 INT 20H 指令码的存放地址)赋给 DS段寄存器。由此可见:如果在程序的开头写入以上几条语句:定义远过程;将 DS 及 0 压入堆栈,执行 RET时,则将 PSP 首地址送入 IP 与 CS。即程序间接执行 INT 20H,正常结束程

46、序,将系统的控制权交给 DOS。RAM 低端 中断向量表 ROMBIOS 数据区 DOS 常驻部分 DS ES 用 户 PSP 区 DOS 暂驻部分 视频 RAM ROMBIOS (2)用 DOS 的 4CH 功能调用结束 MOV AH,4CH INT 21H 4.汇编结束 汇编语言源程序的最后一条语句必须是伪指令 END。其格式为:END 标号或过程名 它的作用是通知汇编程序(如 MASM.EXE)汇编时,到此为止,即使下面还有语句也不领会。汇编语言的语句及运算符 1.汇编语言源程序的段定义 (1)段定义伪指令 SEGMENT 功能:定义一个段。格式:段名 SEGMENT 定位类型 连接方式

47、 类别 定位类型:指明程序从磁盘加载时,放在内存的什么位置。常用的类型有:PAGE:程序存放的起始位置为 100H 的整数倍(页)地址。PARA:程序存放的起始位置为 10H 的整数倍(小节)地址。WORD:程序存放的起始位置为偶地址。BYTE:程序存放起点在任意位置。连接方式:“连接方式”告诉连接程序(如 LINK.EXE)执行时,本段与其它段存放到内存时应满足的关系。关系有六种:NONE PUBLIC STACK COMMON AT MEMORY 类别:模块连接时才需要。类别名相同的模块连接在一起。比如:各模块的堆栈段类别都用STACK,则各模块调入内存时,各堆栈段将存放在一段连续的存储区

48、内。(2)段结束语句 ENDS 功能:指明一个段到此为止。格式:段名 ENDS (3)指定段寄存器语句 ASSUME 功能:为一个段或多个段指定所对应的段寄存器。格式:ASSUME CS:代码段名,DS:数据段名,SS:堆栈段名,ES:附加数据段名 说明:SEGMENT 语句定义一个段,但并没有说明该段数据段、代码段还是堆栈段。而 ASSUME 为指令则说明谁是代码段,谁是数据段等。ASSUME 伪指令仅仅指定对应的段寄存器名,并不对段寄存器分配内存区域地址。2.汇编语言的过程定义 (1)过程定义语句 PROC 功能:定义一个子过程 格式:过程名 PROC 属性 属性有两种:FAR、NEAR。

49、缺省时为 NEAR。一般主程序属性定义成远过程(FAR),同一模块中的其它过程均为近过程。(2)过程结束语句 ENDP 功能:指明一个段到此为止。格式:段名 ENDP 3.数据定义伪指令语句(一)数据定义伪指令 (1)数据伪指令 DB、DW、DD 格式:变量名 DB 表达式 1 变量名 DW 表达式 2 变量名 DD 表达式 3 变量名 N DUP(表达式 4)其中:N 为十进制或十六进制数 功能:定义变量,并给变量的每一个值(表达式)分配存储单元。由该指令定义的变量具有以下属性:段地址值属性 段内偏移地址属性 数据类型属性:字变量属性、字节变量属性 变量的属性值可以通过属性运算符得到。说明:

50、DB 定义的变量为字节类型。表达式 1 为数值型字节表达式(每个数值之间用逗号分隔开)或字符串表达式。DW 定义的变量为字类型。表达式 2 为字表达式(每个数值之间用逗号分隔开)。DD 定义的变量为双字类型。表达式 3 为双字表达式(每个数值之间用逗号分隔开)。DUP 定义的变量将以表达式 4 形式重复 N 次。表达式 4 可以是数值型字节、字、双字或字符串表达式。变量名可以不要。此时,数据伪指令仅仅只给定义的每一个值分配存储单元。(二)等值伪指令 (2)等值伪指令 EQU 功能:定义一个名字,并对该名字赋予常数或表达式值。格式:名字 EQU 常数或表达式 说明:表达式可以是一个数值表达式;表

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作报告

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁