概述
文章目录
- 一、32位可编程寄存器体系
- 1. 通用寄存器
- 2. 基本控制寄存器
- (1) 条件标志
- (2) 控制标志
- 3. 段寄存器
- 4. 指令指针寄存器
- 二、实地址下的存储器寻址方式
- 1. 存储单元的地址和内容
- 2. 存储器分段寻址
- 3. 段的分配方式
- 三、堆栈存储技术
- 1. 堆栈概念
- 2. 操作原则
- 四、程序汇编连接与调试方法
- 1. 程序编辑
- 2. 程序汇编与连接执行
- 3. 程序跟踪调试
在微机原理与接口技术课程中,我学的是16位的汇编,现在总结一下32位的汇编。不过这两者是一脉相承的,因此会有很多相同的地方。
一、32位可编程寄存器体系
1. 通用寄存器
列出的是16位的通用寄存器,但是图上扩展到了32位:
- 累加器
AX
:存放算术运算的结果,AL为字节累加器 - 基址器
BX
:地址计算时,用作存放基地址的寄存器 - 计数器
CX
:某些指令隐含作为计数器 - 数据寄存器
DX
:端口地址寄存器,某些输入输出指令用来存放外部设备的I/O地址 - 源变址器
SI
/ 目的变址器DI
:变址寄存器 - 基址指针
BP
:作为堆栈数据存取操作的基本地址指针寄存器 - 栈指针
SP
:堆栈指针寄存器,指示堆栈的当前偏移地址
2. 基本控制寄存器
(1) 条件标志
条件标志反映包含在ALU中算术逻辑运算后的结果特征:
- 符号标志
SF
:结果为负,SF = 1
;否则SF = 0
- 零标志
ZF
:运算操作结果**=0**,ZF = 1
,否则ZF = 0
- 辅助进位
AF
:运算中第三位有进位,AF = 1
,否则AF = 0
- 齐偶标志
PF
:结果操作数中有偶数个“1”时,PF=1
,否则PF=0
- 进位标志
CF
:记录运算操作时最高有效位产生的进位值,有进位CF = 1
,否则CF = 0
- 溢出标志
OF
:操作数结果超出表示范围,OF=1
,否则OF=0
(2) 控制标志
- 方向标志
DF
:DF=0
,处理从低位地址开始;DF=1
,处理从高位地址开始 - 中断允许标志
IF
:IF=1
,CPU允许中断,否则关闭中断 - 跟踪标志
TF
:TF=1
,机器进入单步工作方式,TF=0
,机器处于连续工作方式
3. 段寄存器
即使到了32位汇编环境中,这些段寄存器依然是 16
位:
- 代码段寄存器
CS
:存放当前正在执行代码的段的起始地址 - 数据段寄存器
DS
:存放当前正在执行程序所用数据的段的起始地址 - 堆栈段寄存器
SS
:存放当前正在执行程序暂时保留信息的段的起始地址 - 附加段寄存器
ES、FS和GS
:存放程序的数据段的起始地址,为程序设计使用多个数据段带来方便
4. 指令指针寄存器
指令指针 IP/EIP
指出程序执行过程中当前要取出的下条指令的地址。当取出一条指令后,IP/EIP
自动加上该指令的长度或者形成转移地址,又指向下一条指令的地址,从而可以控制有序的执行程序。
二、实地址下的存储器寻址方式
1. 存储单元的地址和内容
低位字节存放在低地址,高位字节存放在高地址。
2. 存储器分段寻址
分段寻址允许一个程序可以使用多个代码段、数据段和堆栈段,存储段内的每个单元的物理地址(PA),可以用“段基址:段内偏移地址”来表达。
- 段基址:即段地址(SA),是相应段的起始地址
- 段内偏移地址:即偏移地址或有效地址(EA),是该单元的物理地址到段地址的相对距离,
EA=PA-SA
,PA=SA+EA
。 - 物理地址的计算与形成:
3. 段的分配方式
三、堆栈存储技术
1. 堆栈概念
堆栈是由程序在RAM中开辟的一片内存区域,具有主存储器的功能和特性。
设置堆栈段寄存器 SS
,用来指示堆栈起始位置的指针;栈顶寄存器 SP
用来指示堆栈顶部到堆栈起始位置的距离,即栈顶指针。
栈顶是一个动态的概念,用 SP
来记录堆栈操作时的变化,它动态地指向当前可以压入信息到堆栈中的偏移地址,或者从堆栈中当前需要弹出信息的偏移地址。
2. 操作原则
“后进先出”或“先进后出”:
- 下推式:从堆栈的高地址先压入内容,再从相邻的低地址压入内容。
- 堆栈操作指令(
PUSH、POP
)均是对16
位(2
个字节)的数据进行操作。 - 示例:设
AX=4130H,BX=2010H
,堆栈的初始栈顶SP=100H
,分析执行下列指令序列后,SP=?
PUSH AX PUSH BX
- 若再执行
则POP BX POP CX
CX=? SP=?
- 分析过程如下图所示,显然执行
PUSH BX
后,SP = 0FCH
,执行POP CX
后,CX = 4130H
,SP = 100H
。堆栈存取操作过程示意图
四、程序汇编连接与调试方法
整个流程如下:
1. 程序编辑
利用熟悉的文本编辑软件,对汇编语言源程序进行编辑,生成 .ASM
文件。汇编语言使用过程中,生成不同文件后缀名的含义:
.ASM
汇编源程序.OBJ
目标文件.LST
列表文件.CRF
交叉引用文件.MAP
分配图文件.LIB
库文件.DEF
定义文件.EXE / .COM
可执行文件
2. 程序汇编与连接执行
必须的程序为:
- 汇编程序
MASM.EXE
:MASM / ?
查看命令参数 - 连接程序
LINK.EXE
:LINK / ?
查看命令参数 - 汇编连接程序
ML.EXE
:ML / ?
查看命令参数
汇编过程:对源程序扫描后生成目标文件 .OBJ
,如有语法错误,则显示相应的错误信息,返回修改源程序。
汇编示例:
D:MASM6> masm p1.asm
连接:
MASM6> link p1
生成执行文件 p1.exe
则可直接运行:
D:MASM6> p1
3. 程序跟踪调试
汇编过程中可以检查程序的语法错误。汇编无误,生成可执行文件后,运行没有达到预期的结果,程序可能存在逻辑错误。需要用调试工具进行跟踪调试,查找程序的逻辑错误。
常用调试工具程序: DEBUG.EXE
提供了一个监控程序环境,通过提供命令和相关参数了解程序执行过程中各寄存器和存储单元的值及其变化情况,帮助确定程序中的问题。
最后
以上就是着急黑米为你收集整理的【汇编语言】学习笔记2 汇编程序设计环境一、32位可编程寄存器体系二、实地址下的存储器寻址方式三、堆栈存储技术四、程序汇编连接与调试方法的全部内容,希望文章能够帮你解决【汇编语言】学习笔记2 汇编程序设计环境一、32位可编程寄存器体系二、实地址下的存储器寻址方式三、堆栈存储技术四、程序汇编连接与调试方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复