微机原理汇编语言程序设计基础知识点总结
本文为对微机原理汇编语言部分的知识点总结
1、汇编语言概述
1.1 汇编语言的三种语句
汇编语言的三种语句 | 介绍 |
---|---|
指令语句 | 可以翻译成机器码 |
伪指令语句 | 指示、引导汇编程序在汇编过程中完成某些操作 |
宏指令语句 | 若干条指令语句可用一条宏指令语句代替 |
1.2 汇编语句的格式
1 |
|
各项字段介绍:
字段 | 是否可舍(带[]可根据需要舍去) | 含义 | 写法的注意事项 |
---|---|---|---|
[名字项] | 可 | 一个符号,可以是变量、标号、符号常数、段名、子程序名等 | 可大写字母、小写字母、阿拉伯数字、特殊符号,但是第一个符号必须是字母 |
操作码项 | 不可 | 各类指令的助记符,表明要执行的操作 | |
[操作数项] | 可 | 对伪指令和宏指令:给出参数。 对指令语句:给出常数、寄存器、标号、变量、表达式、类型说明符等等。 |
可由一项或多项组成,多个操作数之间用“,”间隔 |
[;注释项] | 可 | 用于说明 | 一定要用";"隔开 |
2、伪指令语句
伪指令语句简介:
本身不产生相应的机器码,但会指示编译器如何编译
2.1 数据定义语句
(1)数据定义语句格式
1 |
|
(2)变量的属性
变量的属性 | 含义 | |
---|---|---|
偏移属性 | 其偏移地址为16位无符号数,代表从起始地址(0000H)到变量的位置之间的字节数 | |
段属性 | 代表变量所表示的偏移地址在哪个段,一般在数据段,若在其它段,可用段前缀或者段定义语句来指明 | |
类型属性 | 代表该语句中每一个参数的长度(单位:字节) |
(3)数据定义语句中的助记符
数据定义语句中的助记符 | 功能 | 解释 | |
---|---|---|---|
DB | 定义字节(Byte) | 代表其后每个操作数都占1Byte | |
DW | 定义字 | 代表其后每个操作数都占1个字,1个字的低8位存在第1个Byte的低地址中,字的高8位存在第2个Byte的高地址中 | |
DD | 定义双字 | 代表其后每个操作数都占两个字 | |
DQ | 定义4字 | 代表其后每个操作数都占4个字 | |
DT | 定义5字 | 代表其后每个操作数都占5个字 |
(4)参数表
书写注意:多个参数之间用","隔开,存入存储单元之后,为了便于阅读,在画示意图的时候都应该写成16进制(补码)
参数的类型 | 解释 | |
---|---|---|
常数或表达式 | 汇编时,汇编程序将这些参数的数据存放到相应存储单元 | |
字符串 | 字符汇编后应用ASCII码表示,注意区分DB和DW两种定义方式(用DW定义时,写在前8位的是数据的高字节,应该在高地址) | |
预留空单元 | 写法:用“?”表示 | |
复制操作符DUP | 写法: 数量 DUP(要复制的内容) | |
偏移地址(标号、变量) | 将标号或者变量的偏移地址装入对应的存储单元 |
2.2 符号定义语句(等值语句)
符号:汇编语言中所有的变量名、标号名、子程序名、助记符
(1)符号定义语句的格式
1 |
|
(2)符号定义语句的作用
可用于下列情况(EQU语句不占用内存单元) |
---|
为常量或表达式定义一个符号名,定义后,涉及该常量或表达式的地方均可用此符号名代替 |
给变量或标量定义一个新的类型名并起一个新名 |
给地址表达式指出的任意存储单元定义一个名字 |
与“=”指令的区别 |
---|
EQU伪指令中的符号名在同一程序中不允许重复定义 |
“=”伪指令允许符号重复定义 |
2.2 段定义语句
一共三类,分别是分段伪指令、设定伪指令、开始伪指令
(1)分段伪指令
a 分段伪指令格式:
1 |
|
b 分段伪指令格式的解释和注意事项
对应部分 | 是否可省略 | 解释和注意事项 |
---|---|---|
段名 | 不可省略 | 同一段的段名要一致 |
SEGMENT、ENDS | 不可省略,要成对出现 | 其中间是段体,由汇编语句组成 |
[定位类型] | 可选 | 有四种类型(若省略了该项,则隐含为PARA): PARA: (1)指定段的起始地址必须从小段边界开始; (2)地址的最低4位必须是0。 BYTE: 指定段的起始地址可以从任何地址开始。 WORD: (1)指定段的起始地址从字的边界开始; (2)段地址必须是偶数; (3)地址的最低位必为0 PAGE: (1)指定段的起始地址从页的边界开始; (2)地址的最低8位必须是0 |
[组合类型] | 可选 | 一共6种(若省略该项,则隐含为NONE) NONE: 表示该段在连接时与其它段在逻辑上不发生任何关系。 PUBLIC: 表示该段与其他段中用PUBLIC说明的同名同类型的段连接成一个逻辑段 STACK: 表示连接时将具有STACK类型的同名段连接成一个大堆栈,由各模块共享 COMMON: 表示连接时与其他同名段有相同的起始地址,连接长度是各段中最大长度 MEMORY: 表示该段在连接时,被放在所有段的最后(高地址段) AT 表达式: 表达式计算出来的16位值为该段的起始地址 |
['类别'] | 可选 | 单引号括起来的字符串,表示该段的类别,在连接时只与同类别的段发生关联 |
(2)设定伪指令
a 设定伪指令格式
一般在代码段的最前面
1 |
|
b 设定伪指令功能
规定段属性,即指出段寄存器CS、DS、ES、SS被设定为内存中哪一段的段寄存器
c 注意事项
使用之后,还需使用MOV指令为DS、ES、SS段寄存器赋值(CS段寄存器不能赋值,因为它是系统初始化时自动设置的)
例如:假设DATA是一个数据段的段名,为DS寄存器赋值的代码示例如下:
1 |
|
(3)开始伪指令
a 开始伪指令的格式
1 |
|
b 开始伪指令的格式
用于指出其后的程序段或数据段存放起始数据的偏移地址
(4)符号$
表示地址计数器的当前值
2.4 过程定义语句
过程也称子程序,过程被定义后可以用CALL指令调用
(1)过程定义语句的格式
1 |
|
(2)过程类型介绍
类型属性 | 作用 | 注意事项 |
---|---|---|
NEAR | 指出过程是段内调用 | 若不指定属性,默认为NEAR |
FAR | 指出过程是段间调用 | 过程被定义为FAR,必须使用段间调用指令 |
2.5 程序开始、结束语句
(1)程序开始语句
a 在程序的开始用NAME命名
汇编程序用模块名作为程序名
1 |
|
b 在程序的开始用TITLE命名
汇编程序用标题的前6个字符作为程序名
1 |
|
c 汇编程序也允许源程序不用NAME或TITLE命名
(2) 程序结束语句
1 |
|
3、指令语句
3.1 指令语句格式
1 |
|
带[]的和注释是任选项,若写了标号,那其后的":"不可省略!
3.2 指令语句的标号
标号是给某条指令起的名字
(1)属性
属性 | 含义 | |
---|---|---|
段属性 | 定义标号所在段的段地址,标号所在段的段地址只能在CS寄存器中 | |
偏移属性 | 是一个16位无符号数,代表从起始地址到标号位置间的字节数 | |
类型属性 | NEAR属性:转移或调用指令与标号所指语句或过程在同一代码段内,转移或调用时只需改变IP值,不改变CS值 FAR属性:转移或调用指令与标号所指语句或过程不在同一代码段内;转移或调用时,IP值、CS值都改变 |
(2) 标号的使用
使用情况 | ||
---|---|---|
无条件转移指令、调用指令 | 段间转移或调用:使用FAR 段内转移或调用:使用NEAR(指令距离在-32768+32767之间都可),或者是FAR 段内短转移:在指令的标号前加SHORT(指令距离在-128+127之间) |
|
条件转移指令或循环转移指令 | 只能SHORT(可省略) |
4、汇编语言程序设计
4.5 DOS功能及调用
常用的DOS系统功能调用
(1) 4CH——终止程序,返回DOS
程序段如下:
1 |
|
(2) 01H——读取键盘字符使回显
程序段如下:
1 |
|
扫描键盘,等待按键。
将按键对应的ASCII码送入AL寄存器,同时显示器显示该字符。
(3) 07H——控制台输入但不回显
程序段如下:
1 |
|
(4) 0AH——字符串输入
1 |
|
(5)02H——显示器显示字符
1 |
|
(6)05H——打印机打印字符
1 |
|
(7)09H——显示器显示字符串
该字符串必须在数据段内,且以'$'为结束标志
1 |
|
微机原理汇编语言程序设计基础知识点总结
http://example.com/2024/05/17/第五章总结/