800 likes | 977 Vues
第一章 8086 程序设计 第二章 MCS-51 程序设计 第三章 微机基本系统的设计 第四章 存贮器与接口 第五章 并行接口 第六章 计数器、定时器与接口 第七章 显示器与键盘接口 第八章 串行通信及接口 第九章 数模转换器和模数转换器接口. 本章知识点. 8086 程序设计的实验平台 8086 程序设计 8086/8088 宏汇编语言程序 PC 机的基本硬件和调用 软中断. 本章知识点. 8086 程序设计的实验平台 8086 程序设计 8086/8088 宏汇编语言程序 PC 机的基本硬件和调用 软中断.
E N D
第一章 8086程序设计 第二章 MCS-51程序设计 第三章 微机基本系统的设计 第四章 存贮器与接口 第五章 并行接口 第六章 计数器、定时器与接口 第七章 显示器与键盘接口 第八章 串行通信及接口 第九章 数模转换器和模数转换器接口
本章知识点 • 8086程序设计的实验平台 • 8086程序设计 • 8086/8088宏汇编语言程序 • PC 机的基本硬件和调用 • 软中断
本章知识点 • 8086程序设计的实验平台 • 8086程序设计 • 8086/8088宏汇编语言程序 • PC 机的基本硬件和调用 • 软中断
8086程序设计的实验平台 • PC机的基本配置 • 动态调试程序DEBUG
PC机的基本配置 • INTEL 8086是标准十六位微处理器,具有十六位内部结构和十六位外部数据总线。 • INTEL 8088是8086的八位外部数据总线版本,具有十六位内部结构和八位外部数据总线。处理外部总线上信息时,每次处理八位。采用相同指令系统。 • INTEL 80286(简称286)是标准十六位微处理器,比8086更先进,与8086,8088向上兼容。
PC机的基本配置 • IBM PC以及PC兼容机以8088为CPU • 8088可寻址存储器空间1M字节 • PC机: - RAM为640K字节,地址00000H~9FFFFH - ROM为64K字节,地址F0000H~FFFFFH,其中存有基本输入输出系统BIOS。
PC机的基本配置 存储器的其余空间为外部设备所需的存储器扩展或输入输出程序, • A0000H~BFFFFH为显示器RAM缓冲区; • C0000H~DFFFFH为系统外部设备的输入输出程序; • E0000H~EFFFFH为保留的64K字节,扩展功能用。
PC机的基本配置 640K字节的RAM中: • 00000H~003FFH为系统的中断矢量区; • 00400H以后为IBM BIOS、IBM DOS以及由DOS操作系统装入的程序区; • 用户区在其之后。
PC机的基本配置 • PC/AT以及兼容机(PC 286)以80286为CPU。 • 80286CPU实地址寻址的存储器空间为1M字节。在PC 286中,RAM及ROM的安排与PC机兼容。 • PC或PC 286的基本配置为显示器、键盘、软盘驱动器、并行打印机接口、异步通讯接口。
动态调试程序DEBUG • 显示、修改寄存器和存储器内容 • 跟踪程序的运行 • 支持汇编与反汇编,易于修改程序 • 通过读、写命令可读写磁盘文件 • 利用输入、输出指令直接对接口进行调试
动态调试程序DEBUG • 检查和修改寄存器 Register - R ;显示所有寄存器内容 - R 寄存器 ;仅显示该寄存器内容,可修改其内容
动态调试程序DEBUG • 检查和修改存储器内容 Memory - D ;显示存储器内容 - E ;显示和修改存储器内容 - F ;修改存储器内容
动态调试程序DEBUG • 汇编与反汇编 Assembly and Un-assembly • - A • ;输入汇编语句 • - U • ;显示机器码及汇编语句
动态调试程序DEBUG • 运行和测试程序 Go and Test - G ;从当前地址开始执行,地址由CS及IP决定 - G = 起始地址 断点地址 ;程序从该地址开始执行,停在断点处 - T ;程序从当前地址开始执行一条 - T = 地址 跟踪条数 ;程序从该地址开始执行以上条数
动态调试程序DEBUG • 文件的写入和读出Writing and Loading • 存盘(写出) - R BX;使BX内容为0 - R CX;程序长度(字节数) - N ×××.ASM;给程序命名 - W〔地址〕 ;〔程序首地址〕 文件名由N命名,长度由BX、CX值决定。 W后无地址则将CS:100H开始的数据写入磁盘。
动态调试程序DEBUG • 文件的写入和读出Writing and Loading • 读盘(读入) - N ×××.ASM - L 〔地址〕 - U 〔地址〕 ;用反汇编查看文件 L后无地址则装入以CS:100H为起始地址的内存中,否则装入规定地址。
动态调试程序DEBUG • 输入、输出命令 Input & Output • - I 端口地址 • ;从该端口输入一个字节的内容 • - O 端口地址 字节值 • ;向该端口输出一个字节内容
本章知识点 • 8086程序设计的实验平台 • 8086程序设计 • 8086/8088宏汇编语言程序 • PC 机的基本硬件和调用 • 软中断
8086程序设计 • 程序设计方法 • 8086程序设计
程序设计方法 1.作程序流程图 根据题意,找出最合理、简便的解决方法并作程序流程图。粗略流程图给出大致步骤,详细流程图则给出每一步骤细节。对一些大问题,先给出粗略流程图以得出总体概念,再作详细流程图对每一步骤作具体描述。
程序设计方法 2.存贮单元分配 根据题意合理分配程序和数据在存贮器中地址。存贮单元分配合理,可使编程简单和避免程序出错。应避免程序区与数据区相互混合、交叉。 3.源程序编制 将流程图中每步所规定的操作用程序语言实现,各人所编程序选用指令可能不同。程序质量衡量标准:程序短,占用存贮单元少,运行时间短,而且程序结构合理。
程序设计方法 4.译为机器码 计算机执行的是机器码,根据不同计算机环境,将源程序译为机器码后送入计算机可由人工进行,也可通过计算机软件自动转换为机器码。 通常先作程序流程图再编源程序,流程图在: 复杂问题中:帮助设计者寻找最佳方案,减少源程序编写过程中的错误。 调试过程中:帮助寻找错误。
8086 程序设计 • 简单程序 • 8086指令系统中存储器采用分段方法,每个存储单元地址都用段地址和偏移量方法表示。 • 注意存储器寻址方法,特别是段寄存器用法。段替换时,替换命令只对本指令有效,而其余指令仍用约定的段寄存器表示段地址。
8086 程序设计 MOV AX, 7000H MOV DS, AX MOV SI, 00H MOV AX, 8000H MOV ES, AX MOV DI, 00H MOV AL, [SI] MOV BL, [SI+1] MUL BL MOV ES:[DI], AX EX2D: JMP EX2D • 简单程序 例:将存储器70000H单元和70001H单元的内容相乘,其积存放在80000H(低字节)及800001H(高字节)中。
8086 程序设计 • 分支程序 转移指令来实现分支程序。8086指令系统的转移指令分为条件转移和无条件转移。 • 条件转移指令均为相对转移指令,目的地址必须在现行程序段(CS)内,以下一条指令地址为基准,范围为-128-+127。 • 无条件转移指令JMP转移的目的地址可以在段内,也可以在段间。
8086 程序设计 • 分支程序--条件转移指令
8086 程序设计 • 分支程序--条件转移指令
8086 程序设计 • 分支程序--条件转移指令
8086 程序设计 • 分支程序 ORG 1500H TABLE DW 2000H, 2400H DW 2800H, 2C00H ORG 1520H ADD AX, AX MOV SI, 1500H ADD SI, AX JMP CS:[SI] 例:设检索号(0~3)在累加器AX中,根据此检索号将当前程序转移到当前程序段内2000H,2400H,2800H,2C00H的程序中去。
8086 程序设计 • 循环程序 • 可用条件转移指令也可用LOOP指令实现循环程序。LOOP指令以CX为循环变量,执行此指令时,CX值自动减一。 • LOOP指令有下述三种: (1) LOOP;CX不为零时继续循环 (2)LOOPE(LOOPZ);CX不为零且ZF=1时继续循环 (3)LOOPNE(LOOPNZ);CX不为零且ZF=0时继续循环。
8086 程序设计 • 循环程序 • 另一个实现方法是利用串操作处理的重复指令REP。REP指令以CX为重复次数,当指令被重复执行一次,CX值自动减一 • REP指令有三种: (1) REP (2) REPE(REPZ) (3) REPNE(REPNZ) • REP指令与串操作指令MOVS、STOS配合使用,将这两条指令重复执行CX遍
8086 程序设计 • 循环程序 MOV AX, 7000H MOV DS, AX MOV AX, 7200H MOV ES, AX MOV SI, 00H MOV DI, 00H MOV CX, 400H CLD REP MOVSW EXD:JMP EXD 例:在地址70000H开始的存储器中存有400H个字的数据(十六位数),将其传送到地址72000H开始的存储器单元中去。
8086 程序设计 • 子程序 用CALL指令来调用子程序 程序调用: - 段内调用 - 段间调用
8086 程序设计 • 子程序 段内调用的子程序入口地址表示法: (1) 入口地址以十六位偏移量表示。执行此指令时,将指令指针寄存器IP的内容与其相加产生新的目的地址。 (2) 入口地址以数据存储器寻址方式读取一个十六位数据,或由寄存器提供一个十六位数据,装入指令指针寄存器IP,指令以此数据作为目的地址。
8086 程序设计 • 子程序 段间调用的子程序入口地址表示法: (1) 指令以立即数形式提供两个十六位地址作为入口地址的偏移量与段地址。第一个十六位数装入指令指针寄存器IP,第二个十六位数装入段寄存器CS。 (2)指令中提供一存储器地址,利用数据存储器寻址方式从该地址读取两个十六位数据作为入口地址的偏移量与段地址,分别装入指令指针寄存器IP和段寄存器CS。
8086 程序设计 • 子程序 MOV CX, 5 PUSH CX MOV CX, 7 PUSH CX CALL ADD POP CX POP CX EXD: JMP EXD ADD: MOV BP, SP MOV AX, [BP+2] ADD [BP+4], AX RET 例:用调用子程序的方法做两个数的加法,利用将数据压入堆栈的方法传递参数。
8086 程序设计 • 查表程序 根据检索号来求出相应结果。 8086指令系统中,用XLAT指令实现查表程序。数据表格放在数据段中,以DS为段地址,BX寄存器内为数据表格首地址的偏移量,AL寄存器内为检索号。此指令被执行时将BX的内容与AL的内容相加,其结果为数据地址的偏移量。 XLAT指令每次只读出一个字节数据,如数据表中每个数据的长度大于一个字节,则要分几次读出。
8086 程序设计 • 查表程序 查表程序还可用寄存器寻址、变址寻址、基址寻址等方法实现。其指令分别为: MOV AX,[DX] MOV AL,[SI] MOV AX,[BX] (仅适用于查表程序的数据表放在数据段DS内 ) 这种方法应将数据表首地址加上偏移量后传送到此寄存器。偏移量应是检索号乘以数据表内数据的字节长度。这种方法每次能根据需要读出一个或两个字节。
8086 程序设计 ORG 1000H DB 00H,00H,01H,00H DB 08H,00H,27H,00H DB 81H,00H,25H,01H DB 16H,02H,43H,03H DB 12H,05H,29H,07H ORG 2000H MOV SI, 1000H MOV AH, 0 ADD AX, AX ADD SI, AX MOV AX, CS:[SI] EXD: JMP EXD • 查表程序 例:设寄存器AL中的数为0~9,试将此数的立方以BCD码的形式存于AX寄存器内。
本章知识点 • 8086程序设计的实验平台 • 8086程序设计 • 8086/8088宏汇编语言程序 • PC 机的基本硬件和调用 • 软中断
8086/8088 宏汇编语言程序 • 宏汇编语言的基本语法 • 源程序的结构 • 宏汇编程序的运行与调试 • 程序的返回 • 参数传递
宏汇编语言的基本语法 宏汇编语言语句的构成 [名称/标号:] 操作符 [操作数] [;注释] X DW 7 START: MOV AX,DAT RET ; 只有操作符 * 名称是给指令或存储单元起的名字 * 标号表示这条指令的开始地址 * 每个语句必须有操作符
宏汇编语言的基本语法 操作符 MUL CX MOV AH,20H • 指令助记符 • 伪指令 * 8086指令系统 * 一个或两个操作数 DB 28H,0AH,9FH,55H * 对汇编程序进行控制 * 可以有多个操作数
宏汇编语言的基本语法 段定义伪指令 段名 SEGMENT [定位类型] [组合类型] [类别] : 段主体 : 段名 ENDS * 堆栈段、数据段、附加段、代码段都用该伪指令定义!
宏汇编语言的基本语法 段定义中的可选项 • 定位类型缺省为节型(PARA),表示该段起始位置位于最后四位地址为零处 • 组合类型缺省为NONE,表示该段与其他模块中的逻辑段无关;STACK表示连接时将所有类别为STACK的同名段连一起,形成一个大堆栈;AT+地址表明该段的段地址 • 类别是单引号括起的字符串,可任意取,通常用STACK,DATA,EXTA和CODE
宏汇编语言的基本语法 过程定义伪指令 段名 PROC 过程类型 : 段主体 : RET 段名 ENDP 过程类型: NEAR;FAR (说明该子程序属于段内还是段间调用)
宏汇编语言的基本语法 段名、段地址与段寄存器 • ASSUME指令 仅将段寄存器名字与逻辑段名字联系起来 • MOV指令 对段寄存器赋值 * DOS操作系统装入执行文件时,对代码段和堆栈段的值作了规定,不必用赋值语句
宏汇编语言的基本语法 取值运算符 • SEG 给出一个变量或标号的段地址 • OFFSET 给出一个变量或标号的段地址 例:FIVE EQU 5 MOV AX,FIVE ;AX=5 MOV AX,SEG FIVE ;AX=5 所在地址的段地址 MOV AX,OFFSET FIVE ; AX=5 所在地址的偏移量地址
源程序的结构 • 代码段 • 堆栈段 • 数据段 • 附加段 : 各种指令构成的程序及数据常量 : 为堆栈保留空间 :数据常量、变量及为程序所保留的工作单元