伪指令与汇编语言
汇编语言指令及伪指令练习的实验报告总结(范文)
汇编语言指令及伪指令练习的实验报告总结汇编语言指令及伪指令练习的实验报告总结篇一:汇编语言实验报告福建农林大学金山学院课程名称:姓名:系:专业:年级:学号:指导教师:职称: (程序设计类课程) 实验报告汇编语言 201X~201X学年第二学期实验项目列表福建农林大学金山学院实验报告系:专业:年级:姓名:学号:实验课程:汇编语言实验室号:_ _1#605 实验设备号: I3 实验时间:201X.4.25指导教师签字:成绩:实验一汇编程序的汇编及运行1.实验目的和要求 (1)熟悉汇编程序的汇编、连接、执行过程;(2)生成LST文件,查看L ST文件;(3)生成BJ文件,修改语法错误;(4)生成EXE文件;(5)执行程序。
2.实验环境 IBM—PC机及其兼容机;实验的软件环境是:操作系统: DS2.0以上;调试程序: DEBUG.CM;文本编程程序: EDIT.EXE、PS.EXE;宏汇编程序:MA SM.EXE(或AS M .EXE);连接装配程序:L INK .EXE;交叉引用程序:CREF.EXE(可有可无)。
3.实验内容及实验数据记录(1)将数据段输入,取名 1.txt,保存在MASM文件夹下。
生成LST文件,(不必连接、运行)用EDI T查看1.LS T文件。
试回答: DA1,DA2的偏移量分别是多少?C UNT的值为多少?DATA SEGME NT RG 20HNUM1=8 NUM2=NUM1+10H DA1 DB ‘I BM PC’ CUN T EQU $-DA1 DATA END S DA2 DB 0AH, 0DH EN D(2)输入有错误的文件,修改错误语句。
(MASM没有出现错误即可。
不必连接、运行。
)D ATA SEGMEN T VAR1 DB0, 25, DH,300 VAR2DB 12H, A4H, 6BH VAR3 DB ’ABCD EF’ VAR4 D 1H, 5678H VAR5 D 10H DUP(?) D ATA ENDS C DE SEGMENT ASSUME CS: CDE, DE: DATA MV D S, AX LEASI, VAR5 M V BX, FFSE T VAR2 MV[SI], 0ABH MV AX, VA R1+2 MV [B X], [SI] M V VAR5+4,VAR4 MV AH, 4CH INT21H ENDS E ND START B EING MV AX, DATA CDE(3)输入正确的程序,汇编、连接、运行 STACKS SEGMENT S TACK D 128DUP(?) EN DS SEGMENT ENDS SEGM ENT ASSUME CS: CDES,DS: DATAS STACKS DA TAS DATASCDES STRIN G DB ‘ELCM E!’, 13, 10, ‘$’ STA RT: MV AX, DATAS MV DS, AX LEA DX, S TRING MV A H, 9 INT 21H MV AH,4CH INT 21H CDES END S END STAR T4.算法描述及实验步骤 1)首先,用记事本输入各段程序,并储存成源程序,保存在MASM目录下。
ARM汇编语言伪指令
ARM汇编语言伪指令ARM汇编语言伪指令ARM中伪指令不是真正的ARM指令或者Thumb指令,这些伪指令在汇编编译时对源程序进行汇编处理时被替换成对应的ARM或Thumb指令(序列)。
ARM伪指令包括ADR、ADRL、LDR和NOP等。
1、ADR(小范围的地址读取伪指令)该指令将基于PC的地址值或基于寄存器的地址值读取到寄存器中。
语法格式ADR{cond} register, expr其中,cond为可选的指令执行的条件register为目标寄存器expr为基于PC或者基于寄存器的地址表达式,其取值范围如下:当地址值不是字对齐时,其取值范围为-255~255.当地址值是字对齐时,其取值范围为-1020~1020当地址值是16字节对齐时,其取值范围将更大在汇编编译器处理源程序时,ADR伪指令被编译器替换成一条合适的指令。
通常,编译器用一条ADD指令或SUB指令来实现该ADR伪指令的功能。
因为ADR伪指令中的地址是基于PC或者基于寄存器的,所以ADR读取到的地址为位置无关的地址。
当ADR伪指令中的地址是基于PC时,该地址与ADR伪指令必须在同一个代码段中。
示例start MOV r0,#10 ;因为PC值为当前指令地址值加8字节ADR r4, start ;本ADR伪指令将被编译器替换成SUB r4,pc,#0xc2、ADRL(中等范围的地址读取伪指令)该指令将基于PC或基于寄存器的地址值读取到寄存器中。
ADRL伪指令比ADR伪指令可以读取更大范围的地址。
ADRL伪指令在汇编时被编译器替换成两条指令,即使一条指令可以完成该伪指令的功能。
语法格式ADRL{cond} register,expr示例start MOV r0,#10 ;因为PC值为当前指令地址值加8字节ADRL r4,start+60000 ;本ADRL伪指令将被编译器替换成下面两条指令ADD r4,pc,#0xe800ADD r4,r4,#0x2543、LDR(大范围的地址读取伪指令)LDR伪指令将一个32位的常数或者一个地址值读取到寄存器中语法格式LDR{cond} register, =[expr|label-expr]其中,expr为32位的常量。
伪指令和汇编语言
从指定单元开始,定义若干个字(双字节数)。
例如:
ORG 8000H
HETAB:
DW 7234H,8AH,10
汇编后则:
(8000H)=72H (8001H)=34H (8002H)=00H (8003H)=8AH (8004H)=00H (8005H)=0AH
03 常用旳伪指令
DS:定义空间命令
“DS <体现式>定义空间命令 格式: 标号: DS 数据或字符体现式 从指定单元开始,由数据或体现式 拟定保存若干个字节内存空间备用。 例如: ORG 8000H DS 08H DB 30H,8AH 即8000H~8007H单元保存备用 (8008H)=30H (8009H)=8AH
DATA和EQU旳区别在于DATA定义旳字符名称
作为标号登记在符号表中,故可先使用后定义;
而用EQU定义旳字符名称必须先定义后使用,其
原因是EQU不定义在符号表中。
03 常用旳伪指令
BIT:位地址符号命令
“
BIT<体现式>位地址符号命令
格式:
字符名称:
BIT 位地址
该命令把地址赋予标号段要求旳字符名称。
地址,位地址或立即数。
例如:
ORG 8000H
AA: EQU R6
;AA与R6等值
MOV A,AA
;A(R6)
…
03 常用旳伪指令
DATA:数据地址赋值命令
“ DATA<体现式>数据地址赋值命令 格式:
字符名称:
DATA 数据或体现式
此命令把数据地址或代码地址赋予标号段要求旳字符名称。
例如:INDEXJ DATA 8389H
定义了INDEXJ这个字符名称旳地址为8389H,主要用于
《汇编语言》学习笔记6——伪指令
《汇编语⾔》学习笔记6——伪指令1.伪指令⼜称伪操作,即不能像汇编指令⼀样⽣成可执⾏的⼆进制机器代码,⽽是在汇编程序对汇编语⾔源程序进⾏汇编(编译)期间,由汇编程序执⾏。
它与C中的说明性语⾔的含义类似,起到说明作⽤,⽤来指出程序分段、数据定义、存储分配、程序开始和结束等信息,这些信息在汇编(编译)完成后就不⽤了。
但程序中没伪指令,则系统就⽆法完成编译。
2.段定义伪指令:⽤来定义各种类型的段 1.格式:段名 SEGMENT [类型参数] ...... 段名 ENDS 1.其中SEGMENT和ENDS必须成对出现,表⽰段的开始和结束。
⼀般的,段名和段的意义⼀致,便于识别。
2.段名实际就是段地址,在汇编过程中,系统给出具体的地址值,⼀个段必须有⼀个名字来标识。
3.参数是可选项(可有可⽆),⽤于指出段的边界、段的组合、类别标识,⼀般⽤于多模块程序设计中。
2.类型参数 1.定位类型 PARA 该段的起始地址必须为⼩段的⾸地址,即起始地址的16进制数最低位为0 BYTE 该段可以从任意地址开始 WORD 该段必须从字边界开始,即起始地址为偶数 DWORD 该段必须从双字边界开始,即起始地址的16进制数为最低应为4的倍数 PAGE 该段必须从页边界开始,即起始地址的16进制数最低两位为00(能被256整除) 若不指定定位类型,系统默认为PARA 2.组合类型 PRIVATE 该段为私有段,连接时不与其他同名段合并 PUBLIC 连接时可与其他模块中的同名段按顺序连接成⼀个段 COMMON 表⽰该段与其他模块中的同名段有相同的起始地址,如果连接将产⽣覆盖,连接后段的长度为同名段中的最长者 STACK 表⽰该段为堆栈段 AT 表达式 该段直接定位在表达式指出的位置上 若不指定组合类型,默认为PRIVATE 3.类型标识:在引号中给出段的类型名。
在连接时,类别标识相同的段放在连续的存储区中。
(如:"STACK"⽤啦标识该段为堆栈段) 4.END:结束标记,若碰到伪指令END则停⽌编译3.ASSUME伪指令:⽤于指明段寄存器与段的对应关系 1.格式:ASSUME 段寄存器:段名,[段寄存器:段名,段寄存器:.....]【[]中标识可选项】 2.除了代码段寄存器CS不能⽤MOV指令赋值外,其他段寄存器都可⽤MOV指令进⾏初始化。
汇编 第四章伪指令及汇编语言源程序结构
MOV AL, BUF1
ADD AL, BUF2 MOV SUM, AL
;取第一个加数
;两数加 ;和放入SUM单元
3
伪指令(指 示性)语句: 提供相关辅 助信息。
指令性语句: 完成一定功 能,能翻译 成机器码。
伪指令语句
DATA SEGMENT ;DATA段定义开始 BUF1 DB 34H BUF2 DB 27H SUM DB ? DATA ENDS ;DATA段定义结束 CODE SEGMENT ;CODE段定义开始 ASSUME CS:CODE ASSUME DS:DATA ;段性质规定 START: MOV AX,DATA MOV DS,AX ;给DS赋值 MOV AL, BUF1 ;取第一个加数 ADD AL, BUF2 ;两数加 MOV SUM, AL ;和放入SUM单元 MOV AH,4CH INT 21H ;返回DOS CODE ENDS ;CODE段定义结束 END START ;源程序结束
14
二、= 等号伪指令
格式:符号名 = 表达式 功能:为常量、表达式及其他各种符号定义一个等价的符号 名,并能对所定义的符号多次重复定义,且以最后一次定义 的值为准。 例:COST = 20 M = MOV LOST = COST+10 ;30→LOST M = ADD ;M=ADD 注 : “ = ” 伪 指 令 的 格 式 和 功 能 与 EQU 类 似 。 二者区别:在同一程序中,“=”可以对一个符号重 复定义,EQU不能对同一符号重复定义。
26
三、变量、标号的分析运算和合成运算
例:DATA SEGMENT A DB ‘ABCDEF’ B DW 10 DUP(1,2DUP(2)) C DB 3,20 DUP(0) DATA ENDS ┆ MOV AX,LENGTH A ;1→AX MOV BX,LENGTH B ;10→BX MOV CX,LENGTH C ;1→CX ┆
ARM汇编语言伪指令
鲁东大学 LUDONG UNIVERSITY
VersionNumber
Example
GBLA VersionNumber SETA 21
Debug
GBLL Debug SETL {TRUE}
GBLS VersionString VersionString SETS "Version 1.0"
鲁东大学 LUDONG UNIVERSITY
MEND
数据定义伪指令
鲁东大学 LUDONG UNIVERSITY
数据定义指令(Data definition directives):用于进行 数据空间分配。
SPACE DCB DCD, DCDU
MAP, FIELD
SPACE
鲁东大学 LUDONG UNIVERSITY
The SPACE directive reserves a zeroed block of memory.
伪指令举例
鲁东大学 LUDONG UNIVERSITY
AREA ThumbSub, CODE, READONLY ENTRY CODE32 ;ARM
header ADR r0, start + 1 CODE16 ;Thumb.
start MOV r0, #10
doadd MOV pc, lr
END
GBLA, GBLL, GBLS LCLA, LCLL, LCLS SETA, SETL,SETS
全局变量声明
鲁东大学 LUDONG UNIVERSITY
GBLA, GBLL, GBLS
-- 声明一个全局的算术、逻辑和串变量
Directives GBLA
Variable Type arithmetic
8086汇编语言伪指令
一、伪指令详解伪指令在百度百科中的定义为:伪指令(Pseudo Instruction)是用于对汇编过程进行控制的指令,该类指令并不是可执行指令,没有机器代码,只用于汇编过程中为汇编程序提供汇编信息。
例如,提供如下信息:哪些是指令、哪些是数据及数据的字长、程序的起始地址和结束地址等。
伪指令有2个特点:1.由于是伪“指令”,因而它只存在于汇编语言中。
高级语言中不叫指令,叫语句;2.由于是“伪”指令,也即“假”指令,因而不是可执行指令,不会产生机器代码,不会占用ROM空间,只用于汇编过程中为汇编程序提供汇编信息。
与指令的区别::1.指令是在执行阶段发挥作用的,由CPU(Intel、AMD等)来执行。
2.伪指令是在编译阶段发挥作用的,由汇编器(MASM、TASM等)来解释。
二、数据定义伪指令为源程序中的数据和堆栈区分配数据存储单时,使用最多的伪指令。
数据定义伪指令格式如下:常用的数据定义伪指令类型有:∙DB(定义字节,常用)一个字节数据占1个字节单元,读完一个,偏移量加1∙DW(定义字,常用)一个字数据占2个字节单元,读完一个,偏移量加2∙DD(定义双字)一个双字数据占4个字节单元,读完一个,偏移量加4∙DQ(定义四字)一个四字数据占8个字节单元,读完一个,偏移量加8∙DT(定义十字节,用于BCD码)数据定义伪指令后面的初值表可以是常数、表达式、字符串。
例如:D2DW110*230;为D2分配1个字,存放表达式的值D3DB‘GOOD!’;为D3分配5字节,用来存放字符串‘GOOD!’D4DD2.4E+3;为D4分配2个字,存放一个浮点数D5DB‘AB’;为D5分配2字节,字符A在低字节,B在高字节D6DW‘AB’;为D6分配1个字,字符A在高字节,B在低字节S1DB5DUP(?);为S1预留5字节的存储空间S2DW3DUP(0);为S2分配3个字,初值设为0语句1相当于C语言中的DW D2=110*230,只不过是语法结构不太一样注意:通过变量名操作时,变量名代表存储区的第一个数据的地址。
第二部分 汇编语言程序设计——伪指令
例3.2:数据定义综合应用-2/2
.code .startup mov bl,bvar mov ax,word ptr dvar[0] mov dx,word ptr dvar[2] ;取双字到DX.AX mov dx,offset msg mov ah,09h CALLDOS .exit 0 end
运算符
算术运算符 + - * / MOD 逻辑运算符 AND OR XOR NOT 移位运算符 SHL SHR 关系运算符 EQ NE GT LT GE LE 高低分离符 HIGH LOW HIGHWORD LOWWORD
地址型参数
汇编语言程序中,指令参数还有地址型,
它的主要形式是标号和名字(变量名、段 名、过程名等) 硬指令的操作数有存储单元;存储单元就 应该用地址型参数(存储器操作数)表达
定义字节单元伪指令DB
DB伪指令用于分配一个或多个字节单元, 并可以将它们初始化为指定值 初值表中每个数据一定是字节量 (Byte),存放一个8位数据: 可以是0~255的无符号数 或是-128~+127带符号数 也可以是字符串常数
data X Y data
segment ;数据段 db 'a',-5 db 2 dup(100),? db 'ABC' ends
例3.4:属性及其应用-2/5
.code .startup mov al,byte ptr v_word ;用PTR改变v_word的类型,否则类型不匹配 dec al mov v_byte,al ;对v_word的头一个字节操作,原为32H、现为31H n_label: cmp flag,1 jz s_label ;flag单元为1转移 inc flag jmp n_label ;进行短转移
汇编语言伪指令参考
00
FLDA DW 2542H
02
02
FLDB DB 36H
03
03
FLDC DW 212EH
05
05
FLDD DD 00000705H 09
第17章 汇编语言伪指令参考资料
开始,地址计数器定为00。因为FLDA是两个字节 长,所以地址计数器就增加为02,以指出下一个数据 项的地址。因为FLDB是一个字节长,所以地址计数器 再增加为03,依次类推。你可以用ORG伪指令直接改 变地址计数器的内容,再根据其内容以指出下一个数 据项的地址,其一般格式为:
第14章讨论MACRO宏处理时有INCLUDE的实例。
第17章 汇编语言伪指令参考资料
5. LABEL伪指令 LABEL伪指令可以重新定义一个已定义名称的类 型。其一般格式为:
name LABEL type 通过LABEL我们可以使用如BYTE、WORD或 DWORD等类型,来重新定义数据字段及结构 (Structure)和记录(Record)名称的类型,亦可用LABEL 来重新定义调用指令的类型是NEAR或FAR。LABEL 还可以把一个字段同时定义为DB和DW。下面说明 BYTE及WORD这两种类型的使用。
关键字NOTHING可以用来取消前面ASSUME所指 定的某一个段寄存器,例如:
ASSUME ES :NOTHING
第17章 汇编语言伪指令参考资料
假若没有指定DS寄存器或使用NOTHING取消了它, 那么为了要存取数据段内的数据项时,就必须明确规 定使指令操作数以DS寄存器为参考对象,即要指明操 作数相应的段寄存器,例如:
第17章 汇编语言伪指令参考资料
(3) 若没有NAME也没有TITLE,则源程序的名称 就成为模块的名称。汇编程序会把所选用的名称交给 链接程序。
ch4-1汇编语言程序设计(伪指令)
由汇编程序执行的“指令系统” 用于定义变量、分配存储区、定义逻辑段、
指示程序开始和结束等 在汇编时被解释执行,不产生任何目标代码
常用伪指令分类
数据定义伪指令 符号定义伪指令 段定义伪指令 过程定义伪指令 宏命令伪指令 结束伪指令
第四章 汇编语言程序设计
第四章 汇编语言程序设计
data SEGMENT
名字 Hello DB ‘Hello, world!’,0DH,0AH,’$’
data ENDS prog SEGMENT
伪指令
ASSUME CS:prog ,DS:data
start: MOV AX,data
MOV DS,AX
标号
LEA DX,hello
MOV AH,9
INT 21H 指令码 MOV AH,4CH
NUM:ADD AL,30H
RET
第四章 汇编语言程序设计
2.汇编语言与高级语言
• 汇编语言是一种依赖于计算机微处理器的语言 • 汇编语言一般不具有通用性和可移植性 • 进行汇编语言程序设计必须熟悉机器的硬件资
源和软件资源 • 高级语言是面向过程的语言 • 高级语言具有很好的通用性和可移植性
第四章 汇编语言程序设计
INT 21H
prog ENDS
操作数
END start
(4)操作数
常量 变量或标号 表达式 寄存器 存储器单元
第四章 汇编语言程序设计
第四章 汇编语言程序设计
表达式: 算术运算 逻辑运算 关系运算 取值运算和属性运算 其它运算
有数字表达式和地址表达式两种。 汇编时按优先规则对表达式进行计算,计算出
注意:
名字和标号: 标号后有冒号,在指令性语句前;名字后不加
第四章 伪指令
数据定义伪指令的格式为: [变量名] DB(DW、DD、DQ、DT) 表达式1,表达式2,… 表达式1,表达式2……是给变量或指定的存储单元赋予初值,它们有以下几种形式: (a)数值表达式 数据定义伪指令可以为一个或连续的存储单元设置数值初值。 (b)字符串表达式 对于DB伪指令,字符串的长度允许超过2个字符,但不能超过255个字符,字符 串必须用单引号括起来,它可为字符串中的每个字符分配1字节单元,字符串 从左至右以字符的ASCII码形式按地址递增的顺序依次存放。 (c)?表达式 不带引号的?,用于为变量预留内存单元,暂时不存入数据,即表示所定义的 变量无确定的初值。 例如:A DW ?,?为变量A预留2个字单元。 (d)地址表达式 操作数为地址表达式时,只适用于DW和DD这两种数据定义伪指令。如果地址表 达式为一变量(标号)名,用DW伪指令则是取它的偏移地址来初始化变量;用 DD伪指令则是取它的段首地址和偏移地址来初始化变量。 (e)带DUP的表达式 格式为:n DUP (表达式),其中n为重复因子,只能取正整数,它表示定义了 n个相同的数据存储单元。
在8086汇编语言中,运算符分为:算术运算符、逻辑运算符、关系运算
符、数值返回运算符、属性运算符和字节分离运算符。
(一)、表达式
(1)数值表达式 数值表达式是由常量与算术运算符、逻辑运算符或关系运算符构成的有意 义的式子。数值表达式在汇编期间进行运算,运算结果为一数值常量,它 只有大小而没有属性。
数据定义伪指令的格式为: [变量名] DB(DW、DD、DQ、DT)
Байду номын сангаас
表达式1,表达式2,„
其中:变量名是可选项,它仅代表所定义数据存储区第一个单元的地址; DB、DW、DD、DQ和DT是伪指令符,具体一条数据定义伪指令取5种之一。 DB定义的是字节类型的变量,每个表达式被分配1个字节单元。 DW定义的是字类型的变量,每一个表达式被分配1个字单元(2个字节)。 DD定义的是双字类型的变量,每一个表达式被分配2个字单元(4个字节)。 DQ定义的是四字类型的变量,每一个表达式被分配4个字单元(8个字节)。 DT定义的是十字节类型的变量,每一个表达式被分配10个字节单元。
2407DSP第4章 汇编语言和伪指令
(4) 段类型,定义特定段类型的标志。
(5) 填充值,定义用于填充未初始化空位的数值。
《DSP原理及应用》
18
北京理工大学珠海学院信息学院
第4章 汇编语言和伪指令
命令文件举例-MEMORY伪指令和SECTION伪指令: MEMORY { PAGE 0 : VECS: origin =0000h , length = 0040h /* 程序复位*/ PVECS: origin = 0040h, length = 0F00h /* 外设中断向量*/ PM: origin = 1000h, length = 6000h PM1: origin = 7000h, length = 1000h PM2: origin =8000h , length = 800h /* 如果PON=1,则为SARAM*/ B0_PM: origin =0FF00h , length = 100h /* 如果CNF=1,则为DARAM B0块*/ PAGE 1 : MMRS: origin = 0000h ,length = 0060h B2: origin = 0060h ,length = 0020h /*DARAM B2 块*/ B0: origin = 0200h ,length = 0100h /*如果CNF=0则为DARAM B0 块*/ B1: origin = 0300h ,length = 0100h /* DARAM B1块*/ SARAM: origin = 0800h ,length = 0800h /* 如果DON=1则为SARAM*/ PERIPH: origin = 7000h ,length = 1000h /* 外设帧*/ EXTRAM: origin = 8000h, length = 8000h /* 外部扩展RAM*/ PAGE 2 : IO_EX : origin = 0000h ,length = 0FFF0h IO_IN : origin = 0FFF0h ,length = 0Fh }
伪指令
方括号中为可选项,规定了逻辑段的一些其他特性
例:
DATA1 A DATA1 DATA2 DATA2 DATA3 C DATA3
DB
DB
DB
SEGMENT 1,2,3 ENDS SEGMENT 200 DUP(0) ENDS SEGMENT ?,?,? ENDS
STACK
CODE
SEGMENT
ASSUME DS:DATA1,ES:DATA3 CS:CODE,SS:DATA2 START: MOV AX,DATA1 MOV DS,AX MOV AX,DATA3 MOV ES,AX ┆ Q1: MOV AL,A Q2: MOV C,AL
A C8H
STR1 ‘H’
SUM
- -
‘I’
20H ‘O’ ‘K’ ‘!’
TABLE
3 3 3 7 3
0DH
0AH
‘$’ DATA1 0 0 0 0
3
3 7
……
为 0, 1,
10, 14
2. 段定义伪指令
因8086/8088 CPU的存储器是分段的,这就需要有段 定义语句。 与段有关的伪指令主要有: SEGMENT、ENDS、ASSUME 段定义伪指令的格式如下: 段名 SEGMENT [定位类型] [组合类型] [’类别’] ┇ 段名 ENDS
在前缀开始处安排了一条 INT 20H, 在过程结束时通过RET返回DOS。
AX,DATA DS,AX ;DATA → DS ES,AX ;DATA → ES ┇ ;具体程序 RET ;返回指令 MAIN ENDP ;过程结束 CODE ENDS ;代码段结束 END START ;源程序结束
MOV MOV MOV
字节变量的应用 X
MCS-51单片机汇编语言的伪指令-文档资料
Copyright 2006
题意分析:
本例是典型的分支程序,根据两个无符号数的 比较结果(判断条件),分别点亮相应的发光二极 管。
6.定义空间伪指令DS
4.定义字节数据伪指令DB
格式:[标号:] DS 表达式
格式:[标号:] DB 字节数据表
功能:从指定的地址开始,保留
功能:字节数据表可以是多个字节数 多少个存储单元作为备用的空间。
据、字符串或表达式,它表示将字节数据表中的 数据从左到右依次存放在指定地址单元。
如: ORG 1000H
Copyright 2006
JC L1 CLR P1.0
SJMP FIN L1:CLR P1.1 FIN:SJMP $
END
;CY=1,转移到 L1 ;CY=0,(40H)≥(50H),点亮 P1.0 连 接的LED1 ;直接跳转到结束等待
;(40H)<(50H),点亮P1.1接的LED2
7. 数据地址赋值伪指令XDATA
格式:符号名 XDATA 表达式
功能:将表达式的值或某个特定 汇编符号定义为一个指定的符号名,可以 先使用后定义,并且用于双字节数据定义。
例如:
DELAY XDATA 0356H
LCALL DELAY ;执行指令后,程 序转到0356H单元执行
Copyright 2006
BUF: DS 50 ;
例如:ORG 1000H
TAB: DB 22H ;22H存放在1032H单元。
TAB: DB 2BH, 0A0H, ‘A’, 2*4 ;
表示从1000H单元开始的地方存放数 据2BH,0A0H,41H(字母A的ASCII码), 08H
汇编语言伪指令解析
BEGIN: MOV AX,DATA
MOV DS,AX
LEA DX,STR
MOV AH,9
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END BEGIN
汇编语言伪指令解析
汇编语言的 一个实例P81
2
一、汇编语言源程序的基本结构
完整的汇编语言源程序由段(代码段、数据段、附 加段或堆栈段)组成;一个汇编语言源程序必须包 含一个代码段,并指示程序执行的起始点,一个程 序只有一个起始点。数据段、堆栈段和附加段视情 况而定。
每个段由若干语句行组成。语句行是汇编的编程基 础。所有的指令必须位于某一个代码段内,伪指令 可根据需要位于任一段内。
段以“SEGMENT”开始,以“ENDS”结束。段由用 户定义。
汇编语言伪指令解析
3
二、汇编语言源程序中的语句
1、语句的分类 2、语句的格式
汇编语言伪指令解析
4
1、汇编源程序中语句的分类
汇编语言伪指令解析
10
TEST
例:测试为0或1
若要检测AL中的最低位是否为1,若为1则转移。
test al,01h ;测试AL的最低位D0
jnz there ;标志ZF=0,即D0=1
;则程序转移到there
...
;否则ZF=1,即D0=0,顺序执行
there: ...
汇编语言伪指令解析
11
三、常量、变量、标号与表达式(续)
操作数 操作数
[;注释] [;注释]
共同点:每一语句行都由4部分组成,各部分之 间至少要用一个空格作为间隔。
不同点:
在形式上:带不带冒号,是否可转向它。
在本质上:汇编时能否形成对应的机器码。
2.3.6伪指令
其中35H和41H分别是字符5和A的ASCII码,其余 的十进制数(73)和二进制数(101B)也都换算为 十六进制数了。
3、有关概念
源程序:用汇编语言编写的程序。
目标程序:用机器语言表示的程序。 汇编:将汇编语言源程序翻译成目标程序的过程。 汇编程序:计算机内专门用于完成汇编工作的应用 程序。
汇编语言源程序由一系列的指令和伪指令组成。
本节介绍伪指令。 二、伪指令 伪指令又叫汇编控制指令,用来对汇编的过程进 行控制或对某些符号、标号进行赋值。
A2 BIT P1.1
用EQU命令也可以定义位地址变量,但这时所赋 的值应该是具体的位地址值,例如P1.0 就要具体 地用90H来代替。
本节小结
源程序
汇编语言基本概念
目标程序 汇编 汇编程序
ORG汇编起始伪指令
END汇编结束伪指令
伪指令
EQU、DATA字符定义伪指令 DB、DW、DS数据表定义伪指令 BIT位地址定义伪指令
(1503H)=8AH
(1505H)=0AH
7、DS(定义空间命令) ①功能:从指定的地址开始,保留若干个字节内存
空间备用。
②格式:[标号:] DS 表达式 在汇编以后,将根据表达式的值来决定从指定 地址开始留出多少个字节空间,表达式也可以是 一个指定的数值。
③举例:
ORG 1000H
DS 08H DB 30H,8AH 汇编以后,从1000H开始,保留八个字节的内存单 元,然后从1008H开始,按照下一条DB命令给内存单
汇编语言伪指令
汇编语言伪指令在汇编语言程序里,有一些特殊的助记符,这些助记符与指令系统的助记符不同,它们没有对应的机器码。
这些助记符在源程序中的作用是完成汇编程序的各种准备工作,包括定义变量、分配数据存储空间、控制汇编过程、定义程序入口等。
它们仅仅在汇编的过程中起作用,一旦汇编过程结束,它们的使命也就完成了。
这些助记符称为伪指令,它们所完成的操作称为伪操作。
不同汇编器的伪指令可能存在少量的区别,并非所有的伪指令在任何编译器上都能被识别。
一、符号定义伪指令符号定义(Symbol Definition)伪指令用于定义ARM汇编程序中的变量,对变量赋值和定义寄存器别名等,如表1所列。
表1 符号定义伪指令实例:GBLL P_ON ; 定义全局逻辑变量P_ON P_ON SETL {TRUE} ; 给全局逻辑变量P_ON赋值为真LCLA NUM ; 定义局部数字变量NUM NUM SETA 100 ; 给全局数字变量NUM赋值为100RegList RLIST {R0-R5,R8,R10} ; 定义一个寄存器列表RegList,可用微处理器系统结构与嵌入式系统设计(第3版)2; LDM/STM指令访问该列表二、数据定义伪指令数据定义(Data Denfinition)伪指令一般用于为特定的数据分配存储单元,同时完成对已分配存储单元的初始化工作。
数据定义伪指令如表2所示。
表2 数据定义伪指令从使用方法上来讲,数据定义伪指令可以分为以下3类。
1.SPACE伪指令SPACE用于分配一片连续的存储区,并初始化为0。
其中表达式中的数字表示分配的字节数。
SPACE也可以用%代替。
实例:DataSpace SPACE 100 ; 分配连续100字节的存储单元并初始化为0 2.MAP和FIELD伪指令MAP和伪指令FIELD经常结合在一起使用。
MAP用于定义一个结构化的内存表的首地址,可以用“^”替代。
FIELD用于定义一个结构化的内存表中的数据域,可以用“#”代替。
汇编语言伪指令
汇编语言伪指令在编写汇编语言程序时,会用到另一类指令,这类指令仅供汇编程序将源程序翻译成目标程序时使用,本身并不形成机器码,这类指令称为伪指令。
由此可知,指令有二类:(1)汇编指令:是编译后产生气器码的指令。
(2)伪指令:仅供汇编程序使用,编译后不产生气器码的指令。
下面简洁介绍5条伪指令。
1. 汇编起点指令ORG(Origin)指令格式:ORG nn作用:将ORG nn 后的程序机器码或数据存放以nn为首地址的存储单元中。
如在下面的例4-1中,伪指令ORG 2000H 将目标程序从地址2000H处开头存放。
2. 定义字节指令DB (Define Byte)指令格式:[LABEL] DB N1,N2,…,Nm作用:将DB后的8位字节数据N1,N2,…,Nm依次存入以标号LABEL为首地址的存储单元中。
若无标号,则N1,N2,…Nm依次存放在DB上一条指令之后的存储单元中。
如在例4-1中伪指令DB 将字节数据55,38依次存放到以标号LABEL3为首地址的存储单元2100H~2101H中。
3. 定义字指令DW (Define Word)指令格式:[LABEL] DW NN1,NN2,…,NNm作用:将DW后的16位字数据NN1,NN2,…,NNm依次存放到以标号LABEL为首地址的存储单元中,若无标号,则NN1,NN2,…,NNm依次存放在DW上一条指令之后的存储单元中。
在例4-1中,伪指令DW 同样可将字数据5538存放到以标号LABEL3为地址的存储单元2100H~2101H中。
4. 等值指令EQU (Equate)指令格式:LABEL EQU nn作用:将16位地址nn赋给标号LABEL,在例4-1中,伪指令LABEL0 EQU 2100H将地址2100H赋给标号LABEL0。
5. 结束汇编指令END作用:汇编程序编译源程序时,遇到伪指令END,不管END下面是否还有其它指令都将停止编译。
例1 将地址为2100H存储单元中内容55与地址为2101H存储单元内容38进行十进制数相加,运算结果93存放在地址为2102H的存储单元中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
这里地址P1.0,P1.1分别赋予给标号段的字符A1`A2,
在编程中可将字符A1`A2当作位地址用。
没有对应的机器代码。 单片机指令能使单片机的CPU执行某种
操作,并可以生成对应的机器代码
对应关系,只能被汇编程序识别。汇编后,
目标程序中不再出现伪指令,故又称为软指
令。
”
02
伪指令的作用
02 伪指令的作用
作用
“ 伪指令的作用包括: 用来指定程序或数据的起始位置; 给出一些连续存放数据的地址; 为中间运算结果保留一部分存储空 间; 为源程序中的符号和标号赋值; 表示源程序结束等等
03 常用的伪指令
EQU:等值命令
“
EQU<表达式>命令
格式:
字符名称:
EQU
数据或汇编符号
此命令把一个数据或特定的汇编符号赋予标号段规定的字符名称。
为“取代”之意,即以数据或汇编符号取代字符名称。用EQU
定义的字符必须先定义后使用,这些定义的字符名称可用作数据
地址,位地址或立即数。
例如:
ORG 8000H
”
03 常用的伪指令
DB:定义字节命令
“ DB <表达式>定义字节命令 例如:
ORG 8000H
TAB: DB 45H,73,’A’
TAB1: DB 101B
这里数据块的首址由ORG命令定义,即TAB=8000H,则有
由DB命令定义的标号可以任选,DB所确定的
(8000H)=45H 单元地址有两种方法。
(8001H)=49H
(8002H)=35H (8003H)=41H
1.若DB命令是在其他源程序之后,则源程序 的最后一条指令地址之后就是DB定义的数据
或数据表格。
(8004H)=05H
2.由ORG定义数据块首址。
”
03 常用的伪指令
DW:定义字命令
“DW <表达式>定义字命令 格式:
标号: DW 字或字表
程序的模块式调试。
例如:
ORG 8000H
INDEXJ:
DATA 8096H
LJMP INDEXJ
END
03 常用的伪指令
DATA:数据地址赋值命令
“
DATA<表达式>数据地址赋值命令 等价于
ORG 8000H
LJMP 8096H
END
被定义的字符名称也可先使用后定义。
DATA和EQU的区别在于DATA定义的字符名称
AA: EQU R6
;AA与R6等值
MOV A,AA
;A(R6)
…
03 常用的伪指令
DATA:数据地址赋值命令
“ DATA<表达式>数据地址赋值命令 格式:
字符名称:
DATA 数据或表达式
此命令把数据地址或代码地址赋予标号段规定的字符名称。
例如:INDEXJ DATA 8389H
定义了INDEXJ这个字符名称的地址为8389H,主要用于
“DS <表达式>定义空间命令 格式: 标号: DS 数据或字符表达式 从指定单元开始,由数据或表达式 确定保留若干个字节内存空间备用。 例如: ORG 8000H DS 08H DB 30H,8AH 即8000H~8007H单元保留备用 (8008H)=30H (8009H)=8AH
以上DB`DW`DS伪指令 只对程序储存器起作用
END:结束命令
“
END 程序结束命令伪指令
格式:
…
END
汇编程序结束标志,该命令附在一个源程序的结尾。
在END之后所写的指令,汇编时不予处理,因此一
个源程序只能有一个END命令。
”
03 常用的伪指令
DB:定义字节命令
“
DB <表达式>定义字节命令 格式: 标号: DB 字节常数或字符 从指定单元开始,定义了若干个8位存储单元, 以存放指令给出的数据或字符,字符若用引号 括起来,则表示ASC Ⅱ码。
从指定单元开始,定义若干个字(双字节数)。
例如:
ORG 8000H
HETAB:
DW 7234H,8AH,10
汇编后则:
(8000H)=72H (8001H)=34H (8002H)=00H (8003H)=8AH (8004H)=00H (8005H)=0AH
03 常用的伪指令
DS:定义空间命令
目录
01 什么是伪指令 02 伪指令的作用 03 常用的伪指令
01
什么是伪指令?
01 什么是伪指令
定义
“ 汇编程序中提供了一套伪指令(Pseudo Instructions) ,以支持汇编的运行。这 些伪指令仅在汇编过程中起控制作用,不产 生可执行目标代码,与机器指令代码无一一
伪指令与单片机指令的区别: 伪指令不能命令CPU执行某种操作,也
作为标号登记在符号表中,故可先使用后定义;
而用EQU定义的字符名称必须先定义后使用,其
原因是EQU不定义在符号表中。
03 常用的伪指令
BIT:位地址符址符号命令
格式:
字符名称:
BIT 位地址
该命令把地址赋予标号段规定的字符名称。
例如:
A1 BIT P1.0
A2 BIT P1.1
不同版本的汇编语言,伪指 令的符号和含义可能有所不 同,但基本用法是相似的。
03
常用的伪指令
03 常用的伪指令
ORG:起点命令
“
ORG<表达式>程序起始地址伪指令
例如:
ORG 8000H
START:
MOV A,#74H
…
表示源程序的入口地址为8000H,即
程序从8000H开始执行。
”
03 常用的伪指令