我是靠谱客的博主 着急黑米,最近开发中收集的这篇文章主要介绍【汇编语言】学习笔记2 汇编程序设计环境一、32位可编程寄存器体系二、实地址下的存储器寻址方式三、堆栈存储技术四、程序汇编连接与调试方法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 一、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) 控制标志

  • 方向标志 DFDF=0 ,处理从低位地址开始DF=1 ,处理从高位地址开始
  • 中断允许标志 IFIF=1,CPU允许中断,否则关闭中断
  • 跟踪标志 TFTF=1 ,机器进入单步工作方式TF=0 ,机器处于连续工作方式

3. 段寄存器

即使到了32位汇编环境中,这些段寄存器依然是 16 位:

  • 代码段寄存器 CS :存放当前正在执行代码的段的起始地址
  • 数据段寄存器 DS :存放当前正在执行程序所用数据的段的起始地址
  • 堆栈段寄存器 SS :存放当前正在执行程序暂时保留信息的段的起始地址
  • 附加段寄存器 ES、FS和GS存放程序的数据段的起始地址,为程序设计使用多个数据段带来方便

4. 指令指针寄存器

指令指针 IP/EIP 指出程序执行过程中当前要取出的下条指令的地址。当取出一条指令后,IP/EIP 自动加上该指令的长度或者形成转移地址,又指向下一条指令的地址,从而可以控制有序的执行程序


二、实地址下的存储器寻址方式

1. 存储单元的地址和内容

低位字节存放在低地址,高位字节存放在高地址。

2. 存储器分段寻址

分段寻址允许一个程序可以使用多个代码段、数据段和堆栈段,存储段内的每个单元的物理地址(PA),可以用“段基址:段内偏移地址”来表达。

  • 段基址:即段地址(SA),是相应段的起始地址
  • 段内偏移地址:即偏移地址或有效地址(EA),是该单元的物理地址到段地址的相对距离EA=PA-SAPA=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 = 4130HSP = 100H 。堆栈存取操作过程示意图

四、程序汇编连接与调试方法

整个流程如下:

1. 程序编辑

利用熟悉的文本编辑软件,对汇编语言源程序进行编辑,生成 .ASM 文件。汇编语言使用过程中,生成不同文件后缀名的含义:

  • .ASM 汇编源程序
  • .OBJ 目标文件
  • .LST 列表文件
  • .CRF 交叉引用文件
  • .MAP 分配图文件
  • .LIB 库文件
  • .DEF 定义文件
  • .EXE / .COM 可执行文件

2. 程序汇编与连接执行

必须的程序为:

  • 汇编程序 MASM.EXEMASM / ? 查看命令参数
  • 连接程序 LINK.EXELINK / ? 查看命令参数
  • 汇编连接程序 ML.EXEML / ? 查看命令参数

汇编过程:对源程序扫描后生成目标文件 .OBJ,如有语法错误,则显示相应的错误信息,返回修改源程序。

汇编示例:

D:MASM6> masm p1.asm

连接:

MASM6>  link  p1

生成执行文件 p1.exe 则可直接运行:

D:MASM6> p1 

3. 程序跟踪调试

汇编过程中可以检查程序的语法错误。汇编无误,生成可执行文件后,运行没有达到预期的结果,程序可能存在逻辑错误。需要用调试工具进行跟踪调试,查找程序的逻辑错误。

常用调试工具程序: DEBUG.EXE 提供了一个监控程序环境,通过提供命令和相关参数了解程序执行过程中各寄存器和存储单元的值及其变化情况,帮助确定程序中的问题。

最后

以上就是着急黑米为你收集整理的【汇编语言】学习笔记2 汇编程序设计环境一、32位可编程寄存器体系二、实地址下的存储器寻址方式三、堆栈存储技术四、程序汇编连接与调试方法的全部内容,希望文章能够帮你解决【汇编语言】学习笔记2 汇编程序设计环境一、32位可编程寄存器体系二、实地址下的存储器寻址方式三、堆栈存储技术四、程序汇编连接与调试方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部