微机原理与接口技术知识点总结4
参考图书:《微机原理与接口技术(第三版)》洪永强
内容都是手打的,主要是对书内的知识点进行一个快速的浏览。
主要是8086的汇编
第四章
一、概念
1):汇编语言:介于机器语言和高级语言之间的计算机语言。是一种用符号表示的面向机器的程序设计语言。
2):汇编语言程序/源程序:用汇编语言编写的程序
3):目标程序:源程序对应的机器语言程序
4):汇编:将一个汇编语言程序转换成相应目标程序的翻译过程
5):汇编程序:具有汇编功能的应用程序
6):指令语句:是可执行语句,在汇编中要产生相应的目标代码,CPU根据这些代码才能执行相应的操作。每一条指令语句表示计算机具有的一个基本能力,而这种能力是在目标程序运行时完成的
7):伪指令语句:是不可执行语句,在汇编中不产生目标代码,用于指示汇编程序如何汇编源程序,利用它定义和说明常量和变量的属性及存储器单元的分配等。伪指令的功能是由汇编程序在汇编源程序时,通过执行一段程序来完成的,而不是在运行目标程序时实现的。
8):宏定义语句:是以一个宏名定义的一段指令序列,在汇编中凡是出现宏指令语句的地方,对会有相应的指令语句序列的目标代码插入。宏指令语句可以看作是指令语句的扩展。相当于多条指令语句的集合,它包括宏定义、宏调用、宏扩展三部分。
9):常量:程序运行过程中不变的量,没有任何属性。
10):符号常量:常量用符号名来代替。如:COUNT EQU 8/COUNT=8
11):变量:在程序运行期间随时可以修改的数据。
12):标号:一条指令的符号地址
13):伪指令:用来指示汇编程序应该如何去处理汇编语言的源程序。
二、知识点
1):源程序的结构特点
①:汇编程序通常由若干段组成,段由伪指令SEGMENT和ENDS定义,各段顺序任意,段的数目依需要确定,原则上不受限制。数据段通常在代码段前面定义。程序代码段部分开始要设置段寄存器,要初始化DS内容
②:段由若干语句组成,语句以指令为主体而构成。一条语句写在一行上,书写时语句的各部分应尽量对齐
③:汇编语言程序中至少要有一个启动标号,作为程序开始执行时目标代码的入口地址。启动标号常用START、BEGIN、MAIN等命名
④:为增加程序的可读性,可在;后加上注释
2):指令的标号表示一条指令的符号地址,后面必须带有一个冒号。
3):汇编语言能识别的数据有:常量、变量、标号
4):变量的三个属性
①:段属性:段基地址
②偏移属性:偏移地址
③:类型属性:表示变量占用的存储单元的字节数。DB、DW、DD
5):标号的三个属性
①:段属性:段基地址
②偏移属性:偏移地址
③:距离属性:分为 远(FAR):段间 近(NEAR):段内
6):算术运算符(七种)、逻辑运算符(四种)、关系运算符(六种)
7):数值返回运算符:SEG、OFFSET、TYPE、LENGTH、SIZE
8):CS和ES不能被跨越,堆栈操作时SS也不能被跨越
9):临时指定数据类型(强制类型转换):类型 PTR 地址表达式
10):指定新类型运算符 THIS 类型或属性
11):取高位字节/低位字节 HIGH/LOW
12):?表示预留,即原来存储空间的内容不变
13):用DW或DD位操作把变量或标号的便宜地址(DW)或整个地址(DD)存入存储器。用DD位操作存入地址时,第一个字为偏移地址,第二个字为段地址。(P99)
14):n DUP(?)
15):定位类型:表示某段装入内存时,对段的起始边界有何要求
①:BYTE:表示本段起始单元可以从任一地址开始
②:WORD:表示本段起始单元从一个偶字节地址开始
③:PARA:这是隐含选择,表示本段起始地址从一个节的边界开始。一节为16字节。
④:PAGE:表示本段起始地址从一个页的边界开始。一页为256字节。
16):组合类型:表示多个程序模块连接时,本模块与其他模块的同名段如何组合。
①:NONE
②:PUBLIC
③:COMMON
④:STACK
⑤:MEMORY
⑥:AT表达式
17):类别名可以是任何合法的名字,必须用单引号括起来。
18):ASSUME伪指令语句只是建立当前定义的段名与段寄存器之间的联系,不能把各个段的段基地址装入相应的段寄存器中。
19):DS、ES、SS的装入可以通过寄存器赋初值的指令来完成。但是段寄存器不能用立即数寻址方式直接传送,装入段基址必须借助通用寄存器进行间接传送。
20):CS、IP的装入通常是按照结束伪指令指定的地址来完成的(自动赋值)。
21):过程名实际上是过程入口的符号地址。过程可以嵌套,也可以递归。
22):$表示位置计数器的现行值。表示本条指令(不一定要在运行)目标代码的首字节偏移量(P105)
23):PC指针是指向当前运行的指令的地址
24):ORG是对位置计数器的控制命令。指定程序从哪里开始
25):宏定义
ADDM MACRO OPR1,OPR2,RESULT
(宏名)MOV AL,OPR1
ADD AL,OPR2
MOV RESULT,AL
ENDM
宏调用:ADDM 88,36,SUM
26):宏指令和过程的区别
①:宏调用语句由宏汇编程序识别,并完成响应的处理
调用过程的CALL语句是在执行程序时完成的
②:宏是一种替换,汇编过程中,要将宏指令所代替的程序段汇编成相应的机器代码,并插入到源程序的目标代码中。每调用一次宏,就要插入一次,所以宏调用不能缩短目标代码长度
子程序(过程)汇编后的机器代码与主程序分开独立存在,目标代码在存储器中只保存一份,因此子程序(过程调用)能有效缩短代码长度(节省内存空间)。
③:过程调用需要保护断点和现场,执行完成后还要恢复现场和断点,这些操作需要耗费CPU时间。
宏调用不需要这些操作
④:宏允许修改参数,过程不便于修改参数
27):总结:宏是编译时进行替换的规则,子程序是CP指针的跳转。宏是空间换时间,子程序是时间换空间。宏可以修改参数,子程序不变修改参数。
28):当需要多次执行的程序段较长,对速度要求不高,并不要求修改参数的情况下用过程调用(子程序)。否则采用宏调用。
29):程序设计步骤:
①分析问题
②:建立数学模型
③:确定算法
④:绘制流程图
⑤:分配内存空间
⑥:编制程序与静态检查
⑦:上机调试
⑧:试运行和分析结果
⑨:整理资料投入运行
30):分支程序设计注意点:
①:选择合适的转移指令,否则可能不能转移到预定的程序分支
②:要为每个分支安排出口,否则将导致程序运行混乱
③:应把各分支的公共部分尽可能集中到分支前或分支后的程序段中
④:程序中分支出现顺序必须与流程图中一致
⑤:无条件转移指令的转移范围不受限制,条件转移指令只能在-128~+127字节范围内转移
⑥:JMP指令类似于高级语言中的GOTO语句,能不用就不用
⑦:调试程序时,应尽可能对每个分支进行测试
31):子程序定义 PORC ENDP
32):子程序设计注意点:
①:现场保护和返回
②:子程序的嵌套和递归调用
③:参数传递(通过寄存器、变量、地址表、堆栈等)
④:编写子程序调用方法说明
33):混编:被调用的过程或函数应预先说明为外部变量。调用程序则要说明要引用的外部模块名。参数传递一般通过堆栈。
34):C语言嵌入汇编:以ASM声明一个嵌入汇编指令。如:ASM ADD AX,BX