1 / 7
文档名称:

汇编语言程序格式.pdf

格式:pdf   大小:1,097KB   页数:7页
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

汇编语言程序格式.pdf

上传人:小屁孩 2022/12/2 文件大小:1.07 MB

下载得到文件列表

汇编语言程序格式.pdf

文档介绍

文档介绍:该【汇编语言程序格式 】是由【小屁孩】上传分享,文档一共【7】页,该文档可以免费在线阅读,需要了解更多关于【汇编语言程序格式 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。汇编语⾔程序格式
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:⽤来定义⼗个字节,其后每个操作数占⽤⼗个字节。
操作数
常数或⼀组常数或数值表达式;
❖例如:DATADB2,100*2-5,0,-1
⼀组字符串
❖如:STRINGDB‘Thisisastring’,其数值是每个字符对
应的ASCII码的值
❖注意⽐较DB“ab”和DW“ab”
变量名或标号名
❖ADDR1DWBLOCK;BLOCK偏址放在
ADDR1单元
❖ADDR2DDBLOCK;BLOCK的偏址和段
址依次存放在ADDR2四字节单元中。
⼀组“?”
❖只分配空间,不进⾏初始化
❖例如:BLOCKDW?,?;分配两个字,但
为随机值
重复DUP语句
欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!
❖格式:重复数nDUP(重复内容)
❖功能:将DUP后的内容重复定义n
次。
❖例如:BLOCKDB3DUP(0,1,-1)
❖如同:BLOCKDB0,1,-1,0,1,-1,
0,1,-1
[注]DUP语句中可以包含DUP语
句。
起始地址和对准语句
ORG
❖格式:ORG表达式
❖功能:指定随后指令或者定义数据的偏移地址
❖说明:

“ORG”伪指令可设置程序段、数据段任何位置。
⚫若程序中没有设置“ORG”语句,⼀般情况每个逻
辑的起始地址为0000H。
EVEN
❖格式:EVEN
❖功能:偶地址对齐指令。若当前地址是奇数,
则加1;
上课讲过这个的⽤途,什么寻址时偏移地址最后⼀位⽆效,两个内存单元⼀起,然后有些字取⼀次就⾏有些要取两次。我给整忘了
欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!
ALIGN
❖格式:ALIGNn
❖功能:使随后的数据或者指令起始于n(2,4,8…)
的倍数地址
这个的原因和上⾯那个差不多,这个2的n次是有意义的。
NOTICE
汇编语⾔强类型!
变量有类型!
BUFFERDW1234H
❖MOVAL,BUFFER
❖MOVAL,BYTEPTRBUFFER;这个就是强制其为字节
❖MOVAX,BUFFER
地址表达式
地址表达式——由“变量、标号、“+”、
“-”数值表达式组成。
❖如:DATA+5;
❖[注]含有变量的地址表达式其类型与该变
量⼀致,如VARY+4与VARY类型⼀样
(VARY[BX]亦然);
❖地址表达式可以相减,不能相加(指针能够相减但不能相加)
变量和标号属性
变量的属性:
❖段属性——变量的段地址
❖偏移属性——变量的偏移地址
❖类型属性——变量所指单元的类型,字节变量、字变
量、双字变量等
标号的属性:
❖段属性——是指定义标号所在段的段地址。
❖偏移属性——是指定义标号处到段地址的距离。
❖类型属性——NEAR型和FAR型。(不清楚是什么)
地址操作符
SEG运算符
❖格式:SEG变量或标号
❖功能:分离出其后变量或标号所在段的段⾸址。
❖MOVAX,SEGARR
❖MOVDS,AX
OFFSET运算符
❖格式:OFFSET变量或标号
❖功能:分离出其后变量或标号的偏移地址。
❖MOVBX,OFFSETBUF
类型操作符
欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!
类型名PTR
❖功能:指定类型例:MOVWORDPTR[BX],5
汇编程序编写
源程序分别⽤两种格式书写
❖第⼀⽀持
❖简化段定义格式
❖第⼆
❖完整段定义格式
stacksegmentstack
dw512dup(?)
stackends
datasegment
...;在数据段定义数据
dataends
codesegment
assumecs:code,ds:data,ss:stack
start:movax,data
movds,ax
...;在代码段填⼊指令序列
movah,4ch
int21h
...;⼦程序代码
codeends
endstart
(1)段类型说明伪操作
在代码段开始必须⽤ASSUME伪操作声明段和
寄存器之间的关系,格式为:
ASSUME段寄存器:段名[,段寄存器名:段名,…]
通知MASM,建⽴段寄存器与段的缺省关系;
在需要时⾃动插⼊段超越前缀。这是ASSUME
伪指令的主要功能。
实际上,数据段之所以成为数据段,是由于DS
指向它。由于程序运⾏时可以改变DS的值,使
得任何段都可以成为数据段。
DATA1SEGMENT
XDB1
DATA1ENDS
DATA2SEGMENT
YDB2
DATA2ENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA1,ES:DATA2
START:
MOVAX,DATA1
MOVDS,AX
MOVAX,DATA2
MOVES,AX
MOVAL,X
MOVAH,Y
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!
ASSUME语句位于在程序段开始位置
在ASSUME语句中并没有给段寄存器
赋值。
DS、ES的初值必须在程序中设置:
❖MOVAX,<段名>
❖MOVDS/ES/SS,AX
CS与IP的初值不能在程序中显式设置,由系统⾃动设置
为END后指定的起始地址
为SS与SP的初值
❖可在程序中显式设置:SS同上,SP⽤MOVSP,St_TOP
❖堆栈段定义时给出了属性STACK,则由系统⾃动设置。
❖其他,则由系统指定堆栈,编译时给出警告错误
(2)汇编结束伪指令
格式:
❖END[标号]
功能:
❖指⽰源码到此结束;
❖指⽰程序开始执⾏点(标号处)。
欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!