汇编语言程序格式

article/2025/10/11 21:54:31

1 逻辑段

汇编语言源程序由一个或多个逻辑段组成。
❖ 一个程序中可以有几个同一类型的逻辑段。
必须至少有一个代码段。

[注]源程序分段的目的在于程序结构清晰、便
于内存分配,寻址方便,一个源程序需要设置
几个段应根据具体问题来定。

段定义伪操作

段名 segment 定位 组合 段字 ‘类别’
;语句序列
段名 ends

  • 完整段定义由SEGMENT和ENDS这一对伪指令实现,
    SEGMENT伪指令定义一个逻辑段的开始,ENDS伪指令
    表示一个段的结束
  • 如果不指定,则采用默认参数;但如果指定,注
    意要按照上列次序
  • 段名对外表现为立即数,为该段的段地址

在这里插入图片描述

常数和数值表达式

常数(常量)表示一个固定的数值
(1)十进制常数: 以字母D或d结尾或缺省
(2)十六进制常数:以字母H或h结尾,以字
母A~F 开头的十六进制数,前面要用0表达。
(3)二进制常数:由0或1两个数字组成,以
字母B或b结尾
(4)八进制常数:以字母Q或q结尾
(5)字符串常数:字符的ASCII码,如’abc’
(6)符号常数(常量),有点像#define出来的常量
❖等价EQU伪指令
符号名 EQU 数值表达式
符号名 EQU <字符串>
❖等号=伪指令
符号名 = 数值表达式
❖=和EQU区别:
前者可多次使用,后者只能使用一次

数值表达式

  • 数值表达式——用常数、符号常数和算
    术、逻辑、关系运算符组成的表达式。
    如:(75*2+X)/Y
  • 汇编程序在汇编过程中计算,最终得到
    一个数值(常数)
  • 程序运行之前,就已经计算出了结果;
    所以,程序运行速度没有变慢,但增强
    程序的可读性

变量和标号

变量

❖ 变量——是指数据单元的符号地址。
❖ 变量的书写格式:不能使用系统保留字、不能以数字开头
❖ 变量的定义:用数据定义伪指令来定义

标号

❖ 标号——一个指令单元的符号地址。
❖ 标号的书写格式:不能使用系统保留字、不能以数字
开头
❖ 标号的定义:在一条指令语句前输入标号且用“:”隔
开,即定义了该标号;或用Label来定义

变量定义伪指令

格式:
❖ [变量] DB/DW/DD/ DF / DQ / DT 操作数1,…,操作数n
功能:
❖ 定义变量;
❖ 在内存中分配一组存储单元;
❖ 并对单元进行初始化。
分类
❖ DB:用来定义字节,其后每个操作数占用一个字节。
❖ DW:用来定义字,其后每个操作数占用一个字。
❖ DD:用来定义双字,其后每个操作数占用两个字。
❖ DQ:用来定义四个字,其后每个操作数占用四个字。
❖ DT:用来定义十个字节,其后每个操作数占用十个字节。

操作数

常数或一组常数或数值表达式;

❖ 例如:DATA DB 2, 100*2-5, 0, -1

一组字符串

❖ 如: STRING DB ‘This is a string’,其数值是每个字符对
应的ASCII码的值
❖ 注意比较DB “ab”和 DW “ab”
在这里插入图片描述

变量名或标号名

❖ ADDR1 DW BLOCK ;BLOCK偏址放在
ADDR1单元
❖ ADDR2 DD BLOCK ;BLOCK的偏址和段
址依次存放在ADDR2四字节单元中。

一组“?”

❖ 只分配空间,不进行初始化
❖ 例如:BLOCK DW ?,? ;分配两个字,但
为随机值

重复DUP语句

❖ 格式:重复数 n DUP(重复内容)
❖ 功能:将DUP后的内容重复定义n
次。
❖ 例如:BLOCK DB 3 DUP (0,1,-1)
❖ 如同:BLOCK DB 0,1,-1, 0,1,-1,
0,1,-1

[注]DUP语句中可以包含DUP语
句。

在这里插入图片描述

起始地址和对准语句

ORG

❖ 格式:ORG 表达式
❖ 功能:指定随后指令或者定义数据的偏移地址
❖ 说明:

“ORG”伪指令可设置程序段、数据段任何位置。
⚫ 若程序中没有设置“ORG”语句,一般情况每个逻
辑的起始地址为0000H。

EVEN

❖ 格式:EVEN
❖ 功能:偶地址对齐指令。若当前地址是奇数,
则加1;

上课讲过这个的用途,什么寻址时偏移地址最后一位无效,两个内存单元一起,然后有些字取一次就行有些要取两次。我给整忘了

ALIGN

❖ 格式: ALIGN n
❖ 功能:使随后的数据或者指令起始于n(2,4,8…)
的倍数地址

这个的原因和上面那个差不多,这个2的n次是有意义的。

NOTICE

汇编语言强类型!
变量有类型!
BUFFER DW 1234H
❖ MOV AL, BUFFER
❖ MOV AL,BYTE PTR BUFFER ;这个就是强制其为字节
❖ MOV AX, BUFFER

地址表达式

地址表达式——由“变量、标号、“+”、
“-” 数值表达式组成。
❖ 如:DATA+5;
❖ [注]含有变量的地址表达式其类型与该变
量一致,如VARY+4与VARY类型一样
(VARY[BX]亦然);
地址表达式可以相减,不能相加(指针能够相减但不能相加)

变量和标号属性

变量的属性:

❖ 段属性——变量的段地址
❖ 偏移属性——变量的偏移地址
❖ 类型属性——变量所指单元的类型,字节变量、字变
量、双字变量等

标号的属性:

❖ 段属性——是指定义标号所在段的段地址。
❖ 偏移属性——是指定义标号处到段地址的距离。
类型属性——NEAR型和FAR型。(不清楚是什么)

地址操作符

SEG 运算符

❖ 格式:SEG 变量或标号
❖ 功能:分离出其后变量或标号所在段的段首址。
❖ MOV AX,SEG ARR
❖ MOV DS,AX

OFFSET运算符

❖ 格式:OFFSET 变量或标号
❖ 功能:分离出其后变量或标号的偏移地址。
❖ MOV BX,OFFSET BUF

类型操作符

类型名 PTR
❖ 功能:指定类型 例: MOV WORD PTR [BX], 5

汇编程序编写

源程序分别用两种格式书写
❖第一种格式从MASM 5.0开始支持
❖ 简化段定义格式
❖第二种格式MASM 5.0以前就具有
❖ 完整段定义格式

stack segment stack
dw 512 dup(?)
stack ends
data segment
... ;在数据段定义数据
data ends
code segment 
assume cs:code,ds:data,ss:stack
start: mov ax,data
mov ds,ax
... ;在代码段填入指令序列
mov ah,4ch
int 21h
... ;子程序代码
code ends
end start

(1) 段类型说明伪操作

  • 在代码段开始必须用ASSUME伪操作声明段和
    寄存器之间的关系,格式为:
    ASSUME 段寄存器:段名 [,段寄存器名:段名, …]
  • 通知MASM,建立段寄存器与段的缺省关系;
    在需要时自动插入段超越前缀。这是ASSUME
    伪指令的主要功能。
  • 实际上,数据段之所以成为数据段,是由于DS
    指向它。由于程序运行时可以改变DS的值,使
    得任何段都可以成为数据段。
DATA1 SEGMENT
X DB 1
DATA1 ENDS
DATA2 SEGMENT
Y DB 2
DATA2 ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA1 ,ES:DATA2
START:
MOV AX,DATA1
MOV DS,AX
MOV AX,DATA2
MOV ES,AX
MOV AL,X
MOV AH,Y
MOV AH,4CH
INT 21H
CODE ENDS
END START

ASSUME语句位于在程序段开始位置

在ASSUME语句中并没有给段寄存器
赋值。

DS、ES的初值必须在程序中设置:
❖ MOV AX,<段名>
❖ MOV DS/ES/SS,AX

CS与IP的初值不能在程序中显式设置,由系统自动设置
为END后指定的起始地址

为SS与SP的初值
❖ 可在程序中显式设置: SS同上,SP用 MOV SP,St_TOP
❖ 堆栈段定义时给出了属性STACK,则由系统自动设置。
❖ 其他,则由系统指定堆栈,编译时给出警告错误

(2)汇编结束伪指令

格式:
❖ END [标号]
功能:
❖ 指示源码到此结束;
❖ 指示程序开始执行点(标号处)。


http://chatgpt.dhexx.cn/article/eRlaX0wn.shtml

相关文章

汇编常用指令

通用寄存器及使用 IA-32系列有8个32位通用寄存器&#xff0c;名称分别为&#xff1a;EAX,EBX,ECX,EDX,ESP,EBP,ESI,EDI&#xff0c;如图&#xff1a; 简单传送指令 指令中文名格式解释备注MOV传送指令MOV DEST,SRCDEST<SRCXCHG交换指令XCHG OPER1,OPER2把操作数oper1的内容…

第一章 汇编语言和汇编指令

【用最少的指令来实现功能】 自用 文章基于《计算机体系结构新讲》&#xff08;中国地质大学出版社&#xff09; 目录 一、汇编指令 &#xff08;1&#xff09;MIPS汇编指令示例解析 &#xff08;2&#xff09;MIPS指令集 二、汇编指令中的操作数 &#xff08;1&#xff0…

pic单片机汇编 c语言,PIC单片机汇编语言指令详解

PIC单片机汇编语言指令详解 pic单片机为最常用单片机之一&#xff0c;许多程序均基于pic单片机进行开发。因此&#xff0c;熟练pic单片机编程尤为重要。为保证大家能准确、熟练掌握pic单片机的使用&#xff0c;本文特带来pic单片机的各种汇编语言指令的讲解。 一、pic的指令系统…

汇编:汇编指令分类

文章目录 一、指令分类二、伪指令1、assume2、segment、ends3、end 三、汇编指令1、退出程序指令2、中断2.1、概念2.2、中断的分类2.3、本质2.4、中断指令 3、call、ret 四、指令处理的数据长度 使用汇编语言编写一个完整的程序&#xff0c;步骤大致如下&#xff1a; 1、编写源…

汇编语言指令及七种寻址方式指令实现

指令讲解 进入debug模式后&#xff1a;&#xff08;进入debug模式之前的讲解 可以参考我的另一篇博文&#xff1a;masm5.0运行 -u::显示机器指令和汇编指令 -d:显示的具体数据 内存单元内容查看 -r:查看寄存器内容 -r&#xff1a;修改寄存器的内容 如修改ax寄存器的值为12…

微机原理之汇编语言指令集

汇编语言指令集 1.1 概述1.1.1 指令集体系结构、机器指令和符号指令1.1.2 符号指令的书写格式 1.2 操作数1.2.1 通用寄存器中的操作数1.2.2 段寄存器和指令指针寄存器1.2.3 标志寄存器 1.3 寻址方式1.3.1 立即寻址1.3.2 寄存器寻址1.3.3存储器操作数寻址1.3.3.1 直接寻址1.3.3.…

MIPS汇编语言指令

MIPS汇编语言指令 寄存器指令集指令格式R型指令I型指令J型指令 寄存器 寄存器在MIPS体系结构中有32个通用寄存器&#xff0c;在汇编程序中可以用编号表示&#xff0c;$0~31 &#xff0c; 也 可 以 用 名 称 表 示 &#xff0c; 如31&#xff0c;也可以用名称表示&#xff0c;如…

汇编常见指令

文章目录 常见的运算类汇编指令add指令sub指令mul乘法指令div除法指令inc&#xff08;自增&#xff09;&#xff08;即C语言&#xff09;dec&#xff08;自减&#xff09;&#xff08;即–&#xff09;push&#xff08;入栈&#xff09;pop&#xff08;出栈&#xff09;and&…

log4j的ConversionPattern

log4j的ConversionPattern参数的意义 http://lizhou.iteye.com/blog/939154 博客分类&#xff1a; java log4j 多线程 Apache Tomcat F# &#xff0d;X: X信息输出时左对齐 %p: 输出日志信息优先级&#xff0c;即DEBUG&#xff0c;INFO&#xff0c;WARN&#xff0c;ERROR&am…

log4j的ConversionPattern参数的意义

1、常用标志&#xff1a; &#xff0d;X: X信息输出时左对齐 %p: 输出日志信息优先级&#xff0c;即DEBUG&#xff0c;INFO&#xff0c;WARN&#xff0c;ERROR&#xff0c;FATAL, %d: 输出日志时间点的日期或时间&#xff0c;默认格式为ISO8601&#xff0c;也可以在其后指定…

conversionpattern(conversionpattern 自定义字段)

请教以下log4j 日志文件不会弄啊。 直接在Myeclipse中编辑properties 文件的时候不能使用中文的。你可以下载个插件&#xff0c;或者干脆在外边编辑~~你用一个类去读&#xff0c;然后在里面用logger去执行&#xff0c;在log4j的配置文件里面针对这个类配置一个把日志写到文件里…

log4j的配置ConversionPattern详细讲解

原文来自https://blog.csdn.net/reserved_person/article/details/52849505感谢大佬 先写下我一直没找到的ConversionPattern里面参数代表的详细含义 参数说明例子%c列出logger名字空间的全称&#xff0c;如果加上{<层数>}表示列出从最内层算起的指定层数的名字空间log…

零阶保持器(ZOH)与一阶低通滤波器频率特性分析

1.零阶保持器&#xff08;ZOH&#xff09;频率特性分析 零阶保持器传递函数&#xff1a; 画 Bode 图进行频率分析&#xff1a; stf(s); T0.0002; %采样周期0.0002s G(1-exp(-T*s))/s; bode(G); 从图中可以看出&#xff1a;随着频率 ω 的的增加&#xff0c;当 ω 在 10000 附…

一阶低通滤波器、功能触发、周期性触发的simulink模型

01--概述 主要简单叙述在基于模型的过程中比较常用的一些算法&#xff0c;一个是一阶低通滤波器&#xff0c;一个是功能触发&#xff0c;另外一个是周期性触发。会简单介绍下这些算法的应用。 02--一阶低通滤波器 其计算公式为&#xff1a;Y(n) A*X(n) (1−A)*Y(n-1) A滤…

一阶低通滤波器的传递函数分析

一、无源一阶低通滤波器分析 由图可以知道&#xff0c;输入信号为Vi,输出函数为Vo&#xff0c; 电阻R的阻抗为R&#xff0c;C电容C阻抗为1/jwC&#xff0c;Vo实际上是Vi在电容C上的分压&#xff0c;则有&#xff1a; 则有&#xff1a; 将jwS变换得到&#xff1a; 再令Vo/Vin 表…

数字 一阶低通滤波器 详细分析 冰三点水

数字 一阶低通滤波器 详细分析 作者&#xff1a;冰三点水 原创内容&#xff0c;转帖请注明出处&#xff1a; http://blog.csdn.net/u013608300/article/details/78814693 微信公众号&#xff1a;工程师看海 事件的起因是下图1&#xff0c;朋友偶然说到一阶低通滤波器&#x…

一阶低通滤波器的数字实现

关于一阶低通滤波器这里就不再赘述了&#xff0c;讲的帖子也挺多&#xff0c;这里记录一下一阶低通滤波器的传递函数与数字实现之间的系数转换。 一阶低通滤波器的传递函数常见为&#xff1a; 其中Tf为RC&#xff0c;并且有&#xff1a; 其中fwres为截止频率。 常用的数字滤波…

了解一阶低通滤波器传递函数

自动控制原理的内容很高深要逐步地学习 一阶RC滤波器的算法实现&#xff08;低通和高通&#xff09; https://blog.csdn.net/qq_27158179/article/details/82661297 了解一阶低通滤波器传递函数 https://blog.csdn.net/qq_27334499/article/details/52186336 最近&#xf…

一阶低通滤波器在stm32中的简单应用

首先来看一个最简单的一阶低通滤波器的电路模型&#xff1a; 不难推出它的传递函数&#xff1a; Tf与滤波器截止频率有关&#xff0c;但是实际程序中会变成一个参数&#xff0c;此时我们可以忽略它。 然而&#xff01;我们的stm32接收到的信号是一串序列&#xff08;离散信号&a…