微机原理汇编语言程序设计基础知识点总结

本文为对微机原理汇编语言部分的知识点总结

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
符号名   EQU   表达式   ;注释

(2)符号定义语句的作用

可用于下列情况(EQU语句不占用内存单元)
为常量或表达式定义一个符号名,定义后,涉及该常量或表达式的地方均可用此符号名代替
给变量或标量定义一个新的类型名并起一个新名
给地址表达式指出的任意存储单元定义一个名字
与“=”指令的区别
EQU伪指令中的符号名在同一程序中不允许重复定义
“=”伪指令允许符号重复定义

2.2 段定义语句

一共三类,分别是分段伪指令、设定伪指令、开始伪指令

(1)分段伪指令

a 分段伪指令格式:
1
2
3
4
5
6
7
8
9
段名   SEGMENT   [定位类型]  [组合类型]  [‘类别’]

······

··· (汇编语句)

······

段名 ENDS
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
ASSUME   段寄存器:段名,段寄存器:段名······
b 设定伪指令功能

规定段属性,即指出段寄存器CS、DS、ES、SS被设定为内存中哪一段的段寄存器

c 注意事项

使用之后,还需使用MOV指令为DS、ES、SS段寄存器赋值(CS段寄存器不能赋值,因为它是系统初始化时自动设置的)

例如:假设DATA是一个数据段的段名,为DS寄存器赋值的代码示例如下:

1
2
MOV AX,DATA
MOV DX,AX

(3)开始伪指令

a 开始伪指令的格式
1
ORG   表达式
b 开始伪指令的格式

用于指出其后的程序段或数据段存放起始数据的偏移地址

(4)符号$

表示地址计数器的当前值

2.4 过程定义语句

过程也称子程序,过程被定义后可以用CALL指令调用

(1)过程定义语句的格式

1
2
3
4
5
过程名   PROC   类型
···
···
RET
过程名 ENDP

(2)过程类型介绍

类型属性 作用 注意事项
NEAR 指出过程是段内调用 若不指定属性,默认为NEAR
FAR 指出过程是段间调用 过程被定义为FAR,必须使用段间调用指令

2.5 程序开始、结束语句

(1)程序开始语句

a 在程序的开始用NAME命名

汇编程序用模块名作为程序名

1
NAME   模块名
b 在程序的开始用TITLE命名

汇编程序用标题的前6个字符作为程序名

1
TITLE   标题
c 汇编程序也允许源程序不用NAME或TITLE命名

(2) 程序结束语句

1
END   标号(源程序中第一条指令语句前的标号)

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
MOV AH,4CH
INT 21H
(2) 01H——读取键盘字符使回显

程序段如下:

1
2
MOV AH,01H
INT 21H

扫描键盘,等待按键。

将按键对应的ASCII码送入AL寄存器,同时显示器显示该字符。

(3) 07H——控制台输入但不回显

程序段如下:

1
2
MOV AH,07H
INT 21H
(4) 0AH——字符串输入
1
2
3
MOV AH,0AH
···DS:DX<-从键盘接收字符的输入缓冲区首址···
INT 21H
(5)02H——显示器显示字符
1
2
3
MOV AH,02H
MOV DL,要显示字符的ASCII码
INT 21H
(6)05H——打印机打印字符
1
2
3
MOV AH,05H
MOV DL,要显示字符的ASCII码
INT 21H
(7)09H——显示器显示字符串

该字符串必须在数据段内,且以'$'为结束标志

1
2
3
MOV AH,09H
MOV DX,要显示字符串的首地址
INT 21H

微机原理汇编语言程序设计基础知识点总结
http://example.com/2024/05/17/第五章总结/
Author
John Doe
Posted on
May 17, 2024
Licensed under