首页 > 编程语言 >8086汇编基础学习(3)——伪指令

8086汇编基础学习(3)——伪指令

时间:2023-06-20 19:55:27浏览次数:57  
标签:汇编 8086 定义 符号 伪指令 指令 堆栈

8086汇编基础学习(三)——伪指令

什么是伪指令:

定义:

  • 伪指令(Pseudo Instruction)是用于对汇编过程进行控制的指令,该类指令并不是可执行指令,没有对应机器代码,只用于汇编过程中为汇编程序提供汇编信息。

特点:

  • “伪”,假指令,是不可以执行的指令,没有对应的机器代码,不会占用ROM空间,只用于汇编过程中为汇编程序提供汇编信息
  • “指令”,只存在于汇编语言中,高级语言中不叫指令,叫语句

区别:

  • 指令是在执行阶段发挥作用的,由CPU来执行
  • 伪指令是在编译阶段发挥作用的,由汇编器来解释

数据定义类伪指令:

为源程序中的数据和堆栈分配存储单元是,使用的伪指令

格式:

  • [ <变量名> ]  <类型><初值表>

数据类型:

  • DB(定义字节)一个字节数据占用1个字节的存储单元,读操作时,偏移量加1
  • DW(定义字)一个字数据占用2个字节的存储单元,读操作时,偏移量加2
  • DD(定义双字)一个双字数据占用4个字节的存储单元,读操作时,偏移量加4
  • DQ(定义四字)一个四字数据占用8个字节的存储单元,读操作时,偏移量加8
  • DT(定义十字)常用于BCD码

初值:

  • 可以是常数、表达式、字符串

符号定义类伪指令:

符号定义伪指令是给一个数值、字符串或表达式赋予一个名字。符号定义伪指令有等值伪指令EQU、等号伪指令 “=”、符号 / 标号伪指令LABEL三种,其实是给内存地址一个标号

1. EQU(等值伪指令)

  • 格式:<符号名> EQU <表达式>

 

 

 2. "=" 伪指令

  • 格式:<符号名> = <表达式>

  •  区别:
    • EQU伪指令定义的符号在一个源程序中是不能被重复定义的
    • ”=“伪指令定义的符号可以被重复定义,但是后定义的符号变量会覆盖前者的定义
    • 使用EQU伪指令定义的符号名不仅可以代表某个常数或常数表达式,还可以代表字符串、关键字、指令码、一串符号(如WORD PTR)等,而使用等号伪指令定义的符号名仅用于代表数值表达式。

3. LABEL伪指令

  • 描述:符号定义伪指令和THIS运算符(关于表达式中的运算发的讲解在之后)功能类似,可以为当前存储单元定义一个指定类型的变量或标号。
  • 格式:<符号名>  LABEL <表达式>,其中,数据类型就是常用的数据类型:BYTE、WORD、DWORD、结构类型、记录类型(这五类符号名就是变量名)、NEAR、FAR(这两类符号名就是标号名)等。

 

 段和过程定义伪指令:

段和过程定义伪指令用来定义代码段、数据段、堆栈段和子程序。

1.段定义伪指令

  • 描述:为了与存储器的分段结构相对应,汇编语言源程序也是用分段的方法来组织程序代码、数据和变量的。段定义伪指令SEGMENT/ENDS用于段的定义
  • 格式:

    • 段名:给段起的名字,这是必须的属性,定位类型,组合类型,’类别‘是可选属性,初学时最好默认!!
    • 定位类型:确定逻辑段的起始地址:BYTE, WORD, PARA, FAGE, 默认是PARA(节),低四位地址为0
    • 组合类型:说明逻辑段装入内存时如何和其他段进行组合,有NONE, PUBLIC, STACK, COMMON, MEMORY, AT六种:
    1. NONE,为默认值,表示本段和其他段不发生关系,具有独立的段地址
    2. PUBLIC:将同名同类型的段相邻地连接到一起,具有共同的段地址。
    3. STACK:和PUBLIC功能一样,但用于堆栈段,定义堆栈段必须有。
    4. COMMON:所有同名同类型段具有相同段地址,但后面的会覆盖前面的,用于共享数据。
    5. MEMORY:将本段定义在其他段之后。
    6. AT :将本段定义在表达式指定位置,但代码段不能用。
    • 类别:用户自定义的类别名,用单引号括起来,如'STACK','CODE','DATA'。连接程序会把类别名相同的所有段装入内存的连续区域。

  •  注意:如果用户不自己定义堆栈段,程序就会默认使用系统的堆栈段,有大量的入栈数据时要定义自己的堆栈。初始化程序时要使用MOV指令初始化SS和SP。(似乎加上STACK组合类型就可以省去初始化操作)

2. 假定伪指令

  • 描述:假定伪指令用在代码段中,它用来告诉汇编程序,如何设定各段与对应段寄存器的映射关系。
  • 格式:ASSUME  <段寄存器名> : <建立映射的段名>, <段寄存器名> : <建立映射的段名>, ……。段寄存器名可以是CS、DS、ES或SS,段名则是由段定义伪指令定义。
  • 注意:
    • 段名可以时一个特别关键字NOTHING,表示某个段寄存器不在与任何段有关系。
    • 假定伪指令通常在代码段的起始就使用(暂不确定)

 

标签:汇编,8086,定义,符号,伪指令,指令,堆栈
From: https://www.cnblogs.com/Wu-Ling/p/17494396.html

相关文章

  • do...while循环、for循环、while循环反汇编
    do...while循环、for循环、while循环反汇编do...while循环C代码如下所示:VC6++Debug32位版本#include"stdafx.h"voidFunction(){ inti=0; intsum=0; do { sum+=i; i++; }while(i<100);} intmain(void){ Function();return0;}反汇编如......
  • 汇编
                   ......
  • HOPPER DISASSEMBLER(漏斗反汇编器) 简介
     第一印象    软件简介是一个类似IDA的软件,使用的界面类似IDA,整体风格类似苹果。具有反汇编反编译调试器,比起IDA,它更加注重简洁和高效,因此使用起来非常简单,引擎非常强大。运行平台:支持linux,macos,原来也支持windows现在官方不支持了,可以百毒上获取。版本:v4(适用于Mac的Hopperv4......
  • Switch语句的反汇编以及在IDA中的识别
    Switch语句的反汇编以及在IDA中的识别Switch分为四种情况,这里只介绍三种。分支较少时,不生成大表,也不生成小表,会生成if...else语句分支达到一定数量时,生成大表,且大表跟顺序无关大表可以理解为一个存储了多个地址的连续表,通过Register*4可以来寻址。分支达到一定数量,生成大......
  • 8086汇编语言基础学习(二)—— 汇编指令和伪指令
    8086汇编语言基础学习(二)——汇编指令和伪指令数据传输指令:1.MOV指令描述:赋值指令格式:MOV DST,SRT功能:双操作数,将SRT赋值给DST注意:DST,SRT不能同时为mem,对于所有的双操作数皆是如此。不允许对CS赋值其中一个是段寄存器时,另一个就必须是数据寄存器将立即数送入mem时......
  • [ARM 汇编]进阶篇—异常处理与中断—2.4.2 ARM处理器的异常向量表
    异常向量表简介在ARM架构中,异常向量表是一组固定位置的内存地址,它们包含了处理器在遇到异常时需要跳转到的处理程序的入口地址。每个异常类型都有一个对应的向量地址。当异常发生时,处理器会自动跳转到对应的向量地址,并开始执行异常处理程序。异常向量表的位置ARM处理器的异常向......
  • [ARM 汇编]进阶篇—存储访问指令—2.3.3 栈操作指令
    栈是一种特殊的数据结构,其特点是后进先出(LIFO,LastInFirstOut)。在ARM汇编中,栈通常用于保存函数调用时的寄存器状态、局部变量和返回地址等。本节将详细介绍ARM汇编中的栈操作指令,并通过实例帮助你更好地理解和掌握这些指令。推入栈(PUSH)PUSH指令用于将一个或多个寄存器......
  • [ARM 汇编]进阶篇—异常处理与中断—2.4.1 异常处理概念
    异常处理简介在ARM汇编开发中,异常处理和中断是常见的概念,它们是对系统运行过程中出现的特殊情况进行处理的一种机制。异常处理和中断包括硬件异常、软件异常和外部中断等。当处理器遇到这些特殊情况时,它会自动执行相应的处理程序。异常和中断的分类复位(Reset):当处理器上电或复......
  • [ARM汇编]ARM体系结构简介—1.2.1 ARM处理器的历史与发展
    ARM(Advanced RISC Machine,先进的精简指令集计算机)处理器是一种广泛应用于嵌入式系统的处理器架构,具有低功耗、高性能、低成本等特点。接下来,我们将介绍ARM处理器的历史与发展。ARM处理器的历史ARM处理器的历史可以追溯到1983年,当时英国的Acorn电脑公司为了研发一款新......
  • [ARM汇编]计算机原理与数制基础—1.1.3 二进制补码
    在计算机中,为了表示有符号整数(即正数和负数),通常采用二进制补码表示法。二进制补码不仅可以表示负数,还能简化计算机的加法和减法运算。接下来,我们将介绍二进制补码的概念及其计算方法。原码、反码和补码在讨论补码之前,我们先了解一下原码和反码的概念。原码:直接将一个有符号整......