汇编语言程序格式

2023-05-16

 
汇编语言程序格式
1、汇编程序功能
在计算机上运行汇编语言程序的步骤是:
用编辑程序建立ASM源文件
用MASM程序把ASM文件转换成OBJ文件
用LINK程序把OBJ文件转换成EXE文件
用DOS命令直接键入文件名就可执行该程序
汇编程序的主要功能是:
检查源程序
测出源程序中的语法错误,并给出出错信息
产生源程序的目标程序,并给出列表文件(同时列出汇编语言和机器语言的文件,称为LST文件)
展开宏指令
2、伪操作
汇编语言程序的语句除指令以外还可以由伪操作和宏指令组成。伪操作又称为伪指令,它们不像机器指令那样是在程序运行期间由计算机执行的,而是在汇编程序对源程序汇编期间由汇编程序处理的操作,它们可以完成如处理器选择、定义程序模式、定义数据、分配存储区、指示程序结束等功能
2.1、处理器选择伪操作
汇编程序把ASM源文件汇编成OBJ目标文件时,需要选择一种指令系统把汇编指令翻译成机器指令,处理器选择伪操作告知汇编程序应该选择哪一种指令系统
.8086 选择8086指令系统
.286 选择80386指令系统
2.2、段定义伪操作
2.2.1、完整的段定义伪操作
存储器的物理地址是由段地址和偏移地址组合而成的,汇编程序在把源程序转换成目标程序时,必须确定标号和变量(代码段和数据段的符号地址)的偏移地址,并且需要把有关信息通过目标模块传给连接程序,以便在连接程序把不同的段和模块连接在一起,形成一个可执行程序
段定义伪操作:
segname SEGMENT [align_type][combine_type][use_type][‘class’]
    …
segname ENDS
(1)定位类型(align_type):说明段的起始地址应有怎样的边界值,它们可以是:PARA,BYTE,WORD,DWORD,PAGE
(2)组合类型(combine_type):说明程序连接时,不同模块中同名分段的合并方法,它们可以是:PRIVATE,PUBLIC,COMMON,AT expression,MEMORY,STACK
(3)使用类型(use_type):用来说明使用16位寻址方式还是32位寻址方式。它们可以是USE16,USE32
(4)类别说明(’class’):类别说明并不能把相同类别的段合并起来,但在连接后形成的装入模块中,可以把它们的位置靠在一起
ASSUME伪操作用于明确段和段寄存器的关系,格式如下:
ASSUME assignment,…,assignment
其中assignment说明分配情况,其格式如下:
segment register name:segment name
其中,段名必须是CS,DS,ES和SS中的一个,段名必须是由SEGMENT定义的段中的段名。
ASSUME伪操作只是指定某个段分配给哪一个段寄存器,并不能把段地址装入段寄存器中,所以在代码段中,还必须把段地址装入相应的段寄存器中。代码段的段地址装入CS寄存器是在程序初始化时完成的
2.2.2、存储模型与简化段定义伪操作
(1)MODEL伪操作
MODEL伪操作格式如下:
. MODEL memory_model [,model options]
memory_model用来表示存储模型,即用来说明在存储器中是如何安放各个段的。也就是说,它说明代码段在程序中如何安排,代码的寻址是近还是远;数据段在程序中又是如何安排的,数据的寻址是近还是远,可以建立如下七种存储模型:Tiny,Small,Medium,Compact,Large,Huge,Flat
model options允许用户指定三种选项:高级语言接口、操作系统和堆栈距离
(2)简化的段定义伪操作
汇编程序给出的标准段有下列几种:
code 代码段
initialized data 初始化数据段
uninitialized data 未初始化数据段
far initialized data 远初始化数据段
far uninitialized data 远未初始化数据段
contants 常数段
stack 堆栈段
对应以上的标准段,可有如下的简化段伪操作:
.CODE[name]
.DATA
.DATA?
.FARDATA[name]
.FARDATA?[name]
.CONST
STACK[size]
2.2.3、段组定义伪操作
GROUP伪操作允许用户自行指定段组把多个数据段组成一个段组DGROUP,程序在访问各数据段时使用一个数据段寄存器。格式如下:
grpname GROUP segname[,segname]
2.3、程序开始和结束伪操作
NAME module_name
TITLE text
END [label] 表示源程序结束
标号指示程序开始执行的起始地址。如果多个程序模块相连接,则只有主程序使用标号,其他子程序模块只用END而不必指定标号
.STARTUP 用来定义程序的初始入口点,并产生设置DS,SS和SP的代码
.EXIT [return_value] 用来产生退出程序并返回操作系统的代码
2.4、数据定义及存储器分配伪操作
[variable] Mnemonic Operand,…, Operand [;Comment]
变量字段:记以第一个字节的偏移地址
助记符字段:说明所定义的数据类型。常用类型有以下几种:DB,DW,DD,DF,DQ,DT。这些伪操作可以把其后跟着的数据存入指定的存储单元,形成初始化数据;或者只分配存储空间而不存入确定的数值,形成为初始化数据。汇编程序可以在汇编期间在存储器中存入数据
注释字段:说明该伪操作的功能
复制操作符DUP,格式如下:
repeat_count DUP(Operand,…, Operand)
在数据定义伪操作前面的变量的值,是该伪操作中的第一个数据项在当前段内的第一个字节的偏移地址。变量的类型属性,用来表示该语句中的每一个数据项的长度,变量表达式的属性和变量是相同的。汇编程序可以用这种隐含的类型属性来确定某些指令是字指令还是字节指令
PTR属性操作符可以指定操作数的类型属性,它优先于隐含的类型属性,格式如下:
type PTR Variable+-constant expression
其中,类型属性可以是BYTE,WORD,DWORD,FWORD,QWORD或TBYTE
LABEL伪操作符也可以给变量赋以不同的类型属性,格式如下:
name LABEL type
2.5、表达式赋值伪操作
    有时程序中多次出现同一个表达式,为方便起见,可以用赋值伪操作给表达式赋予一个名字,其格式如下:
Expression_name EQU Expression
Expression_name = Expression
2.6、地址计数器与对准伪操作
(1)地址计数器$
$表示装入模块的地址指针。当$用在指令中时,它表示本指令的第一个字节的地址。当$用在伪操作的参数字段时,表示的是地址计数器的当前值
(2)ORG伪操作
ORG伪操作用来设置当前地址计数器的值,其格式为:
ORG constant expression
(2)EVEN伪操作
EVEN伪操作使下一个变量或指令开始于偶数字节地址,其格式为:
EVEN
(3)ALIGN伪操作
ALIGN伪操作为保证双字数组边界从4的倍数开始创造了条件,其格式为:
ALIGN boundary
2.7、基数控制伪操作
.RADIX伪操作可以把默认的基数改变为2~16范围内的任何基数,其格式如下:
.RADIX expression
3、汇编语言程序格式
汇编语言程序中的每个语句可由4项组成,格式如下:
[name] operation operand [;comment]
名字项:标号
操作项:助记符,它可以是指令、伪操作或宏指令
操作数项:由一个或多个表达式构成,提供未执行所要求的操作而需要的信息
注释项:用来说明程序或语句的功能
3.1、名字项
一般来说,名字项可以是标号或变量。它们都用来表示本语句的符号地址,都是可有可无的,只有当需要用符号地址来访问该语句时它才需要出现
(1)标号,标号在代码段中定义,后面跟着冒号:,它也可以用LABEL或EQU伪操作来定义。此外,它还可以作为过程名定义。标号经常在转移指令或CALL指令的操作数字段中出现,用以表示转向地址
标号有3种属性:段、偏移和类型
段属性定义标号的段起始地址,此值必须在一个段寄存器中,而标号的段则总是在CS寄存器中
偏移属性,标号的偏移地址是从段起始地址到定义标号的位置之间的字节数
类型属性,用来指出该标号是在本段内引用还是在其他段中引用。如是在段内引用的,则称为NEAR,如在段外阴用,则称为FAR
(2)变量,变量在数据段或附加段中定义,后面不跟冒号。它也可以用LABEL或EQU伪操作来定义。变量经常在操作数字段中出现,它也有段、偏移和类型三种属性
段属性:定义变量的段起始地址,此值必须在一个段寄存器中
偏移属性:变量的偏移地址是从段的起始地址到定义变量的位置之间的字节数
类型属性:变量的类型属性定义该变量所保留的字节数
3.2、操作项
操作项可以是指令、伪操作或宏指令的助记符。对于指令,汇编程序将其翻译为机器语言指令。对于伪操作,汇编程序将根据其所要求的功能进行处理。对于宏指令,则将根据其定义展开
3.3、操作数项
操作数项是由一个或多个表达式组成,多个操作数项之间一般用逗号分开。对于指令,操作数项一般给出操作数地址,它们可能有一个或两个,或三个,或一个没有。对于伪操作和宏指令,则给出它们所要求的参数
操作数项可以是常数、寄存器、标号、变量或有表达式组成。表达式是常数、寄存器、标号、变量与一些操作符相结合的序列,可以有数字表达式和地址表达式两种。在汇编期间,汇编程序按照一定的优先规则对表达式进行计算后可得到一个数值或一个地址,形成指令
(1)算术操作符:+,-,*,/,MOD
(2)逻辑与移位操作符:AND,OR,XOR,NOT,SHL,SHR
(3)关系操作符:EQ,NE,LT,GT,LE,GE
(4)数值回送操作符:TYPE,LENGTH,SIZE,OFFSET,SEG
(5)属性操作符:PTR,段操作符,SHORT,THIS,HIGH和LOW、HIGHWORD和LOWWORD
3.4、注释项
    注释项用来说明一段程序、一条或几条指令的功能
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

汇编语言程序格式 的相关文章

  • nginx lua开发配置文件详解

    加载lua文件和库文件 lua package path 34 waf nginx cnwaf lua waf nginx init lua waf nginx cnwaf plugins lua waf nginx cnwaf deps
  • win7系统安装使用高版本的nodejs-v16.19.1

    文章目录 参考 参考 win7这样操作 xff0c 可成功安装高版本node js xff01 注意 xff1a 首先安装13 14版本nodejs 删掉安装目录下的内容下载16 19 1版本的nodejs版本 xff08 下载zip的包
  • j记录一次gorm 使用协程 插入数据一直报错问题 -Duplicate entry ‘95‘ for key ‘PRIMARY‘ [14.649ms] [rows

    文章目录 问题描述问题解决 问题描述 报错代码如下 span class token keyword func span span class token function GetSystemInfoSave span span class
  • stable diffusion的使用

    文章目录 1 文生图1 1 mountains and trees and gree1 2 three dogs1 3 cats1 4 three lovely cats1 5 beautiful girl1 6 机器猫1 7 卡通图像生成
  • DIY:用开源软件搭建自己的物联网

    原文链接 xff1a DIY Open Source Software for your very own IoT 作者 xff1a Vishal Shah 翻译 xff1a 赵屹华 审校 xff1a 刘翔宇 图片来源 xff1a open
  • ubuntu开启rdp服务

    概要 ssh登录用于终端 xff0c 如果需要GUI的远程登陆ubuntu 我了解到大概3中方案 vncxrdp第三方软件 向日葵 TeamViewer之类的 因为vnc我一直配置不好 xff0c 所以试了一下xrdp xff0c 这样wi
  • csp模拟2-T1 HRZ的序列

    题目 时间限制 1s 空间限制 64MB 题目描述 相较于咕咕东 xff0c 瑞神是个起早贪黑的好孩子 xff0c 今天早上瑞神起得很早 xff0c 刷B站时看到了一个序列aaa xff0c 他对这个序列产生了浓厚的兴趣 他好奇是否存在一个
  • Ubuntu 中文件和目录的操作命令

    在 Ubuntu 中 xff0c 文件和目录的操作命令是非常重要的 这些命令帮助您在文件系统中创建 复制 移动 删除和查看文件和目录 以下是一些常用的文件和目录操作命令 xff1a cd cd 命令用于切换当前工作目录 例如 xff0c 要
  • Docker无法在WSL2的Ubuntu启动的问题

    今天在更新了WSL2上的Ubuntu22 04版本 xff0c 在安装Docker后无法启动 xff0c 查看Docker的日志显示如下的错误 INFO 2022 04 22T16 14 55 718999500 43 08 00 stop
  • C语言中的移位操作

    C语言中的移位操作 xff0c 内容不多 不过有些地方你不注意 xff0c 就疏忽了 先做两个小题先 1 unsigned char x 61 3 x lt lt 1是多少 xff1f x gt gt 1是多少 xff1f 2 char x
  • Android获取设备唯一标识的方法

    String uniqueId String mac 61 getMacAddressByInetAddress if mac 61 null amp amp mac equals 34 34 amp amp mac equals 34 0
  • Linux 搭建私有CA证书服务器之超详细版本

    一 CA简介 CA是什么 xff1f CA是Certificate Authority的简写 xff0c 从字面意思翻译过来是凭证管理中心 xff0c 认证授权 它有点类似我们生活中的身份证颁发机构 xff0c 这里的CA就相当于生活中颁发
  • 基于Nginx搭建RTMP-HLS视频直播服务器(推流+拉流)

    1 环境准备 Linux centos7 6 nginx 1 18 0 源码包 span class token function wget span http nginx org download nginx 1 8 1 tar gz n
  • k8s-部署本地仓库harbor

    1 基础配置 xff1a 主机名IP系统版本k8s master192 168 32 128centos 7 6k8s node1192 168 32 129centos 7 6k8s node2192 168 32 130centos 7
  • k8s部署nginx容器

    1 创建挂载nginx namespace yaml配置文件 xff08 k8s master xff1a 192 168 32 128 xff09 apiVersion v1 kind Namespace metadata name ng
  • k8s部署tomcat并且映射本地目录

    1 编写Dockerfile span class token punctuation span root 64 VM 12 7 centos opt span class token punctuation span span class
  • 自动化运维记录之GitLab CI/CD 自动化部署入门教程

    1 前端项目自动化部署需要的环境依赖 Node 安装项目依赖 打包都需要 Nginx web 项目部署必须 正向代理 方向代理 负载均衡等等 GitLab 也会用到 Nginx span class token punctuation sp
  • k8s-kubeadm证书过期续订解决方法

    1 实验目的 通过kubeadm安装的kubernetes集群各个组件所使用证书的期限为1年 xff0c 本实验练习的是到期之后如何续期 2 实验环境 ubernetes环境及版本 整个实验三台机器192 168 32 128作为maste
  • 宝塔部署Django项目-避坑必看

    1 在linux windoes机器上已经安装宝塔 浏览器登录宝塔管理页面 1 1打包模块 span class token number 1 span 将本地计算机的项目下的模块打包 python m pip freeze span cl

随机推荐

  • week11作业—A - 必做题11-1—

    题目 蒜头君从现在开始工作 xff0c 年薪 NNN 万 他希望在蒜厂附近买一套 606060 平米的房子 xff0c 现在价格是 200200200 万 假设房子价格以每年百分之 KKK 增长 xff0c 并且蒜头君未来年薪不变 xff0
  • Linux 系统 nginx 源码编译安装

    nginx版本 xff1a nginx 1 18 0 操作实施环境 Ubuntu 16 04 6 LTS SUSE Linux Enterprise Server 12 SP4 x86 64 注 xff1a 因为是源码安装 xff0c 操作
  • ubuntu18.04和20.04(ubuntu focal)安装MySQL8并使用navicat连接(详细)

    文章的第一节转载自原文连接 本文实现了服务器ubuntu18 04和虚拟机ubuntu20 04两个版本的MySQL8 的安装 xff0c 和navicat的连接 其中ubuntu18 04对应第二节 xff0c ubuntu20 04是u
  • 对接淘宝公共平台API

    1 说明 由于项目临时提出需求 xff0c 需要对接淘宝公共平台查询用户的一些信息 xff0c 所以需要和淘宝平台做对接 xff0c 我查看了一下淘宝公共平台开发文档 xff0c 虽然写的挺丰富挺整洁 xff0c 但我还是一头雾水 xff0
  • 使用IDEA插件从数据库表生成实体类

    目录 1 介绍 2 添加插件 3 创建数据库连接 4 添加数据库连接信息和驱动 5 表生成实体类 1 介绍 EasyCode是基于IntelliJ IDEA Ultimate版开发的一个代码生成插件 xff0c 主要通过自定义模板 基于ve
  • SpringBoot多环境动态环境切换(nacos)

    目录 1 环境变量切换 1 1 建立各环境配置文件 1 2 设置环境变量 2 nacos配置中心动态切换 2 1 配置文件 2 2 nacos配置 2 3 启动服务 3 同一nacos环境下服务不同环境控制 3 1 cloud方式 3 1
  • 批量插入或更新数据(MyBatis-plus框架)

    目录 1 场景说明 2 DUPLICATE 和REPLACE比较 3 批量插入或者更新 两种方式 方式一 xff1a mybatis plus的saveOrUpdateBatch方法 问题 xff1a 如果操作类集成了基础类 xff0c 比
  • SpringBoot+Nacos+OpenFeign环境搭建

    目录 1 boot方式nacos与openFeign集成 1 引入依赖 2 添加配置 3 测试接口调用 4 常见问题 xff1a 1 版本依赖 2 nacos客户端 2 cloud方式nacos与openFeign集成 1 引入依赖 2 添
  • RestTemplate连接池使用

    说明 在调用淘宝的公共平台接口时候 xff0c 响应较慢 xff0c 我们需要60ms能够获取到响应 xff0c 但是却经常是200ms甚至更长时间 xff0c 别人的接口只能够优化网络响应时间来提升接口响应 由于接口并发量发 xff0c
  • 华为云CCI方式部署服务

    1 创建工作负载 说明 xff1a 创建负载使用的是swr自己上传的镜像 工作负载的创建过程相对简单 xff0c 和CCE类似 xff0c 创建好工作负载后会自动生成服务 2 配置路由 说明 xff1a 添加路由需要指定好容器端口和服务端口
  • RocketMQ单机环境搭建测试+springboot整合

    1 资源下载 官网 xff1a 下载 RocketMQ 这里选择使用编译后可以直接用的 下载后解压 xff1a 略 2 更改配置 主要是更改 conf broker conf 的配置 xff0c 记得添加上下面这几行 xff0c 否则消息发
  • Assignment 2: Exploratory Data Analysis

    Assignment 2 Exploratory Data Analysis 在此作业中 xff0c 您将识别出感兴趣的数据集并进行探索性分析 xff0c 以更好地理解数据的形状和结构 xff0c 调查最初的问题以及发展初步的见解和假设 您
  • jsp页面不显示的问题

    明明前后端的测试都写好了 xff0c 但是就是显示不出来数据 最后的 最后 发现是在引入js的时候一个小小的疏忽浪费了我半个小时的时间 xff0c 值得记录 一下
  • mysql group by 用法解析(详细)

    group by 用法解析 group by语法可以根据给定数据列的每个成员对查询结果进行分组统计 xff0c 最终得到一个分组汇总表 SELECT子句中的列名必须为分组列或列函数 列函数对于GROUP BY子句定义的每个组各返回一个结果
  • kubectl get pod卡住的问题

    安装minikube之后 xff0c 出现了kubectl get pod卡住的问题 xff0c 我这里主要网络的问题 xff0c 因为使用代理时没有过滤本地的IP xff0c 添加上过滤IP就可以用了 export no proxy 61
  • 记录Win10+Ubuntu18.04(引导Win10启动)双系统迁移到SSD,Ubuntu迁移成功但丢失Win10启动项

    原来的Win10 43 Ubuntu双系统是先装的Win10后装Ubuntu时选择 34 与Windows系统共存 34 xff0c 如此开机后由Ubuntu启动项 紫屏 接管引导进入Ubuntu或Windows系统 看网上的教程如果不dd
  • ubuntu 22.04部署quincy版ceph

    ceph集群安装配置有多种方式 xff0c 下方cephadm方式是借助容器部署 cephadm从ceph的octopus版本开始支持 安装需要主机配置安装了容器和python 3 配置安排 xff1a ceph版本 xff1a quinc
  • C/C++ 中头文件相互包含引发的问题

    今天下午遇到一个头文件相互包含而导致的编译问题 xff0c 花了我不少时间去调试没找到问题 xff0c 最后晚上跟师兄讨论不少时间 xff0c 突然有所顿悟 xff01 问题重现 我把问题脱离于项目简单描述一下 xff1a 我写了一个函数
  • 安装Discuz!论坛 提示mysqli_connect() 不支持

    安装Discuz 论坛时提示 不支持Mysql数据库 xff0c 无法安装论坛 的解决方法 1 在系统的 system32 xff08 C windows system32 xff09 目录下缺少libmysql dll文件 xff0c 解
  • 汇编语言程序格式

    汇编语言程序格式 1 汇编程序功能 在计算机上运行汇编语言程序的步骤是 xff1a 用编辑程序建立ASM源文件 用MASM程序把ASM文件转换成OBJ文件 用LINK程序把OBJ文件转换成EXE文件 用DOS命令直接键入文件名就可执行该程序