4.1 伪指令
汇编语言伪指令
汇编语言伪指令汇编语言作为一种低级编程语言,广泛应用于嵌入式系统、驱动程序开发和操作系统内核等领域。
在进行汇编语言编程时,我们常常会使用到一些伪指令。
本文将介绍一些常见的汇编语言伪指令及其用法。
1. 数据定义伪指令数据定义伪指令用于声明并初始化数据。
在汇编语言中,我们可以使用以下伪指令来定义不同类型的数据:1.1 DB(Define Byte):用于定义一个字节的数据。
例如:DB 10 ;定义一个字节的数据,值为101.2 DW(Define Word):用于定义一个字的数据。
例如:DW 100 ;定义一个字的数据,值为1001.3 DD(Define Doubleword):用于定义一个双字的数据。
例如:DD 1000 ;定义一个双字的数据,值为10001.4 DQ(Define Quadword):用于定义一个四字的数据。
例如:DQ 10000 ;定义一个四字的数据,值为100001.5 DT(Define Ten Bytes):用于定义一个十个字节的数据。
例如:DT 1234567890 ;定义一个十个字节的数据,值为12345678902. 代码段和数据段伪指令在汇编语言中,我们通常需要将代码和数据分开存放,以便于管理和执行。
以下是一些常用的代码段和数据段伪指令:2.1 CODE SEGMENT:用于定义代码段。
例如:CODE SEGMENT;代码段内容CODE ENDS2.2 DATA SEGMENT:用于定义数据段。
例如:DATA SEGMENT;数据段内容DATA ENDS2.3 STACK SEGMENT:用于定义堆栈段。
例如:STACK SEGMENT;堆栈段内容STACK ENDS3. 控制指令伪指令控制指令伪指令用于控制程序的执行流程。
以下是一些常见的控制指令伪指令:3.1 IF-ELSE-ENDIF:用于条件判断。
例如:IF 条件;条件为真时执行的代码ELSE;条件为假时执行的代码ENDIF3.2 REPEAT-UNTIL:用于循环执行一段代码直至满足条件。
伪指令和汇编语言
从指定单元开始,定义若干个字(双字节数)。
例如:
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指令进⾏初始化。
汇编常见伪指令
汇编常见伪指令汇编常见伪指令转⾃:⼀、与宏有关的伪指令在宏定义时,为了满⾜某种特殊需要,汇编语⾔还提供了⼏个伪指令。
9.3.1 局部标号伪指令LOCAL在宏定义体中,如果存在标号,则该标号要⽤伪指令LOCAL说明为局部标号,否则,当在源程序中,有多于⼀次引⽤该宏时,汇编程序在进⾏宏扩展后将会给出:标号重复定义的错误。
伪指令LOCAL的⼀般格式如下:LOCAL 标号1, 标号2, ……伪指令LOCAL必须是伪指令MACRO后的第⼀条语句,并且在MACRO和LOCAL之间也不允许有注释和分号标志。
汇编程序在每次进⾏宏扩展时,总是把由LOCAL说明的标号⽤⼀个唯⼀的符号(从??0000到??FFFF)来代替,从⽽避免标号重定义的错误。
例9.7 编写求⼀个求绝对值的宏。
解:⽅法1:ABSMACROword1CMPword1, 0JGEnextNEGword1next:ENDM假设对宏ABS有以下两次引⽤,点击它们将会显⽰汇编程序对它们进⾏宏扩展后所得到程序⽚段: ABS BX 1 CMP BX, 0 1 JGE next 1 NEG BX 1 next:… ABS AL 1 CMP AL, 0 1 JGE next 1 NEG AL 1 next:在上述程序⽚段中,显然标号next定义了⼆次,所以,汇编程序将显⽰“标号重复定义”的错误信息。
为了避免这种情况的发⽣,我们需要⽤下⾯的⽅法来定义该宏。
⽅法2:ABSMACROword1LOCALnextCMPword1, 0JGEnextNEGword1next:ENDM假设对宏ABS有以下两次引⽤,点击它们将会显⽰汇编程序对它们进⾏宏扩展时所得到程序⽚段: ABS BX 1 CMP BX, 0 1 JGE ??0000 1 NEG BX 1 ??0000:… ABS AL 1 CMP AL, 0 1 JGE ??0001 1 NEG AL 1 ??0001:在上述程序⽚段中,宏体内部的局部标号next分别⽤符号??0000和??0001来对应它的⼆次引⽤。
汇编 第四章伪指令及汇编语言源程序结构
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 ┆
第4讲_1 4.4-4.5伪指令
伪指令与EQU伪指令的差别: ① =伪指令只能代表表达式或常数,不能是指令助记符等。 ② EQU定义的标识符不能重定义,而=定义的可以。
4
4.4.2 数据定义伪指令
格式:标号 DB/DW/DD/DQ/DT 表达式 格式 功能:用来定义一个存储单元的标识符号名, 功能 并初始化该单元或由该单元开始的若干连续 单元。初始化单元就是将一个确定的数值或 不确定的值(在定义语句中用?表示)放入 指定的内存单元。
1AH 1AH 1AH 1AH 1AH 04H 04H 0FH 04H 04H 0FH 7FH ?? ?? ?? 001CH 001DH 001EH 001FH 0020H 0021H 0022H 0023H 0024H 0025H 0026H 0027H 0028H 0029H 002AH
6
SECOND
DFST FFH FFH FFH FFH 00H 00H 00H 80H 00H 80H 12H 42H 00H 80H 12H C2H 0052H 0053H 0054H 0055H 0056H 0057H 0058H 0059H 005AH 005BH 005CH 005DH 005EH 005FH 0060H 0061H
10
4.4.3 段定义伪指令
1. 段首说明伪指令 SEGMENT 2. 段结束伪指令 ENDS 3. 段假定伪指令 ASSUME 4. 代码定位伪指令 ORG
11
段定义伪指令SEGMENT/ENDS 段定义伪指令
格式: 格式: 段名 段名 SEGMENT [定位类型 组合类型 类别名’] 定位类型][组合类型 类别名’ 定位类型 组合类型][‘类别名 ENDS
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)操作数
常量 变量或标号 表达式 寄存器 存储器单元
第四章 汇编语言程序设计
第四章 汇编语言程序设计
表达式: 算术运算 逻辑运算 关系运算 取值运算和属性运算 其它运算
有数字表达式和地址表达式两种。 汇编时按优先规则对表达式进行计算,计算出
注意:
名字和标号: 标号后有冒号,在指令性语句前;名字后不加
第四章 汇编语言和伪指令
2、条件汇编伪指令 .if、.elseif、.else、.endif伪指令告诉汇编器按照表达 if、 elseif、 else、 endif伪指令告诉汇编器按照表达 式的计算结果对代码块进行条件汇编。 式的计算结果对代码块进行条件汇编。 标志条件块的开始, .if expression — 标志条件块的开始,仅当条件为真 (expression的值非0即为真)时汇编代码。 expression的值非0即为真)时汇编代码。 的值非 标志若.if条件为假 条件为假, elseif条 .elseif expression — 标志若.if条件为假,而.elseif条 件为真时要汇编代码块。 件为真时要汇编代码块。 标志若.if条件为假时要汇编代码块 条件为假时要汇编代码块。 .else — 标志若.if条件为假时要汇编代码块。 标志条件块的结束,并终止该条件代码块。 .endif — 标志条件块的结束,并终止该条件代码块。
5.调试工具 软件仿真器(Simulator) 软件仿真器(Simulator) .out文件调入到一个计算机的软件模拟窗口 将.out文件调入到一个计算机的软件模拟窗口 DSP代码进行软件模拟和调试及程序验证 代码进行软件模拟和调试及程序验证, 下,对DSP代码进行软件模拟和调试及程序验证, 它不需目标硬件支持,只需在计算机上运行。 它不需目标硬件支持,只需在计算机上运行。 硬件仿真器(XDS510) 硬件仿真器(XDS510) 通过仿真头将PC PC机中的用户程序代码下载到 通过仿真头将PC机中的用户程序代码下载到 目标系统的存储器中进行调试和程序验证。 目标系统的存储器中进行调试和程序验证。 TI公司推出的 公司推出的CCS集成环境将上述各步骤集成在一 公司推出的 集成环境将上述各步骤集成在一 个窗口环境下,大大方便了软件设计。 个窗口环境下,大大方便了软件设计。
汇编语言伪指令
汇编语言伪指令在汇编语言程序里,有一些特殊的助记符,这些助记符与指令系统的助记符不同,它们没有对应的机器码。
这些助记符在源程序中的作用是完成汇编程序的各种准备工作,包括定义变量、分配数据存储空间、控制汇编过程、定义程序入口等。
它们仅仅在汇编的过程中起作用,一旦汇编过程结束,它们的使命也就完成了。
这些助记符称为伪指令,它们所完成的操作称为伪操作。
不同汇编器的伪指令可能存在少量的区别,并非所有的伪指令在任何编译器上都能被识别。
一、符号定义伪指令符号定义(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用于定义一个结构化的内存表中的数据域,可以用“#”代替。
ARM汇编语言伪指令
ARM汇编语言伪指令ARM汇编语言伪指令ARM汇编语言ARM汇编语言源程序语句,一般由指令,伪操作,宏指令和伪指令作成.ARM汇编语言的设计基础是汇编伪指令,汇编伪操作和宏指令.伪操作,是ARM汇编语言程序里的一些特殊的指令助记符,其作用主要是为完成汇编程序做各种准备工作,在源程序运行汇编程序处理,而不是在计算机运行期间有机器执行.也就是说,这些伪操作只是汇编过程中起作用,一旦汇编结束,伪操作的使命也就随之消失.宏指令,是一段独立的程序代码,可以插在程序中,它通过伪操作来定义,宏在被使用之前必须提前定义好,宏之间可以互相调用,也可自己递归调用.通过直接书写宏名来使用宏.并本具宏指令的格式输入输出参数.宏定义本身不产生代码,只是在调用它时把宏体插入到原程序中.宏与C语言中的子函数形参和实参的调用相似,调用宏时通过实际的指令来代替宏体实现相关的一段代码,但宏的调用与子程序的调用有本质的区别,既宏并不会节省程序的空间,其优点是简化程序代码,提高程序的可读性以及宏内容可以同步修改.伪操作,宏指令一般与编译程序有关,因此ARM汇编语言的伪操作,宏指令在不同的编译环境下有不同的编写形式和规则.伪指令也是ARM汇编语言程序里的特殊助记符,也不在处理器运行期间由机器执行,他们在汇编时将被合适的机器指令代替成ARM或Thumb指令,从而实现真正的指令操作.目前常用的ARM编译环境有2种.1. ADS/SDT IDE:ARM公司开发,使用了CodeWarrior公司的编译器.2. 集成了GNU开发工具的IDE开发环境;它由GNU的汇编器as,交叉汇编器gcc和连接器id组成.ADS编译环境下的ARM伪操作和宏指令,可参考北航出版社的<<ARM微控制器基础与实践》(周立功)这里主要讲述ARM GNU常用汇编语言4 ARM GNU常用汇编语言介绍4.1 ARM GNU常用汇编伪指令介绍1. abort.abort: 停止汇编.align absexpr1,absexpr2:以某种对齐方式,在未使用的存储区域填充值. 第一个值表示对齐方式,4, 8,16或32. 第二个表达式值表示填充的值.2. if...else...endif.if.else.endif: 支持条件预编译3. include.include "file": 包含指定的头文件, 可以把一个汇编常量定义放在头文件中.4. comm.comm symbol, length:在bss段申请一段命名空间,该段空间的名称叫symbol, 长度为length. Ld连接器在连接会为它留出空间.5. data.data subsection: 说明接下来的定义归属于subsection数据段.6. equ.equ symbol, expression: 把某一个符号(symbol)定义成某一个值(expression).该指令并不分配空间.7. global.global symbol: 定义一个全局符号, 通常是为ld使用.8. ascii.ascii "string": 定义一个字符串并为之分配空间.9. byte.byte expressions: 定义一个字节, 并为之分配空间.10. short.short expressions: 定义一个短整型, 并为之分配空间.11. int.int expressions: 定义一个整型,并为之分配空间.12 long.long expressions: 定义一个长整型, 并为之分配空间.13 word.word expressions: 定义一个字,并为之分配空间, 4bytes.14. macro/endm.macro: 定义一段宏代码, .macro表示代码的开始, .endm表示代码的结束.15. reqname .req register name: 为寄存器定义一个别名.16. code.code [16|32]: 指定指令代码产生的长度, 16表示Thumb指令, 32表示ARM指令.17. ltorg.ltorg: 表示当前往下的定义在归于当前段,并为之分配空间.4.2 ARM GNU专有符号1. @表示注释从当前位置到行尾的字符.2. #注释掉一整行.3. ;新行分隔符.4.3 操作码1. NOPnop空操作, 相当于MOV r0, r02. LDRldr <register> , = <expression>相当于PC寄存器或其它寄存器的长转移.3.ADRadr <register> <label>相于PC寄存器或其它寄存器的小范围转移. ADRLadrl <register> <label>相于PC寄存器或其寄存器的中范围转移.5 可执行生成说明5.1 lds文件说明5.1.1 主要符号说明1. OUTPUT_FORMAT(bfdname)指定输出可执行文件格式.2. OUTPUT_ARCH(bfdname)指定输出可执行文件所运行CPU平台3. ENTRY(symbol)指定可执行文件的入口段5.1.2 段定义说明1. 段定义格式SECTIONS { ...段名 :{内容}...}文章出处:。
微型计算机原理及应用-伪指令
用于定义程序中的代码段、数据段 和堆栈段等逻辑段,如SEGMENT、 ENDS等。
过程定义伪指令
用于定义程序中的子程序或过程,如 PROC、ENDP等。
宏定义伪指令
用于定义程序中可重复使用的宏, 如MACRO、ENDM等。
其他伪指令
包括一些特殊的伪指令,如条件汇 编伪指令、列表控制伪指令等。
03 伪指令在汇编语言中的应 用
简化程序编写
符号定义
使用伪指令可以为常量、 变量和地址等定义易于记 忆的符号,避免硬编码, 提高程序的可维护性。
数据结构声明
伪指令可用于声明数组、 结构体等复杂数据结构, 简化数据组织和管理。
宏定义
通过伪指令定义宏,可以 实现代码片段的复用,减 少重复编写相似代码的工 作量。
未来,高级语言可能会进一步吸收伪指令的优点 ,使得编程更加简便、高效。
智能化编程辅助工具的发展
随着人工智能技术的进步,未来可能会出现更加 智能化的编程辅助工具,这些工具能够自动识别 程序员意图,推荐合适的伪指令,进一步提高编 程效率。
THANKS FOR WATCHING
感谢您的观看
未来发展趋势预测
伪指令的标准化
随着计算机技术的发展,伪指令的标准化将成为 一个重要趋势,这将有助于提高程序的可移植性 和兼容性。
伪指令在特定领域的优化
针对特定应用领域,伪指令可能会进行专门优化 ,以适应不同场景下的需求。例如,在嵌入式系 统、图形处理等领域,可能会出现更加专业化的 伪指令集。
高级语言与伪指令的融合
提高程序可读性
注释
伪指令可用于添加注释,说明代 码的功能、实现逻辑等,提高程
序的可读性和可理解性。
格式化输出
arm汇编伪指令详解(转载)
arm汇编伪指令详解(转载)4.1 ARM汇编器所⽀持的伪指令在ARM汇编语⾔程序⾥,有⼀些特殊指令助记符,这些助记符与指令系统的助记符不同,没有相对应的操作码,通常称这些特殊指令助记符为伪指令,他们所完成的操作称为伪操作。
伪指令在源程序中的作⽤是为完成汇编程序作各种准备⼯作的,这些伪指令仅在汇编过程中起作⽤,⼀旦汇编结束,伪指令的使命就完成。
在ARM的汇编程序中,有如下⼏种伪指令:符号定义伪指令、数据定义伪指令、汇编控制伪指令、宏指令以及其他伪指令。
4.1.1 符号定义(Symbol Definition)伪指令符号定义伪指令⽤于定义ARM汇编程序中的变量、对变量赋值以及定义寄存器的别名等操作。
常见的符号定义伪指令有如下⼏种:— ⽤于定义全局变量的GBLA、GBLL和GBLS。
— ⽤于定义局部变量的LCLA、LCLL和LCLS。
— ⽤于对变量赋值的SETA、SETL、SETS。
— 为通⽤寄存器列表定义名称的RLIST。
1、 GBLA、GBLL和GBLS语法格式:GBLA(GBLL或GBLS)全局变量名GBLA、GBLL和GBLS伪指令⽤于定义⼀个ARM程序中的全局变量,并将其初始化。
其中:GBLA伪指令⽤于定义⼀个全局的数字变量,并初始化为0;GBLL伪指令⽤于定义⼀个全局的逻辑变量,并初始化为F(假);GBLS伪指令⽤于定义⼀个全局的字符串变量,并初始化为空;由于以上三条伪指令⽤于定义全局变量,因此在整个程序范围内变量名必须唯⼀。
使⽤⽰例:GBLA Test1 ;定义⼀个全局的数字变量,变量名为Test1Test1 SETA 0xaa ;将该变量赋值为0xaaGBLL Test2 ;定义⼀个全局的逻辑变量,变量名为Test2Test2 SETL {TRUE} ;将该变量赋值为真GBLS Test3 ;定义⼀个全局的字符串变量,变量名为Test3Test3 SETS “Testing” ;将该变量赋值为“Testing”2、 LCLA、LCLL和LCLS语法格式:LCLA(LCLL或LCLS)局部变量名LCLA、LCLL和LCLS伪指令⽤于定义⼀个ARM程序中的局部变量,并将其初始化。
4-1伪指令1
2、汇编结束伪指令 END 告诉汇编程序,对源程序的汇编到此结束。在 END以后所写的指令, 汇编程序都不予以处理。 一个源程序只能有一个END命令。 在同时包 含有主程序和子程序的源程序中, 也只能有一个 END命令, 并放到所有指令的最后, 否则, 就有一部 分指令不能被汇编。 例: …… 程序最末尾 …… end
例如: ORG 2000H TAB1: DB 30H, 8AH, 7FH, 73 DB ′5′,′A′,′BCD′ /*单双引号效果一样 由于ORG 2000H, 所以TAB1的地址为2000H, 因此 以上伪指令经汇编以后, 将对 2000H开始的若干内 存单元赋值: (2000H) = 30H (2001H) = 8AH (2002H) = 7FH (2003H) = 49H ; 十进制数 73 以十六进制数存放 (2004H) = 35H ; 数字 5 的ASCII码 (2005H) = 41H ; 字母A的ASCII码 (2006H) = 42H ; ′BCD′中B的ASCII码 (2007H) = 43H ; ′BCD′中C的ASCII码 (2008H) = 44H ; ′BCD′中D的ASCII码
本节课要点:
有关汇编过程及汇编程序格式说明; 常用汇编伪指令的用法介绍和举例; 程序设计方法(一)
汇编语言概述 1、汇编语言与汇编的概念 机器语言就是用二进制代码指令来编写的程序语 言。机器语言编的程序也称为目的(目标)程序, 装入内存中,执行时最直接、速度最快。 把汇编语言源程序变为二进制代码程序的过程叫 做汇编。汇编有两种方法,即手工汇编和机器汇 编。 实际上,汇编就是把用汇编语言格式写的源程序 翻译成计算机能够识别和执行的目标程序。
15、
CJNE A,#0,feiling MOV 20H,#0FFH sjmp $ feiling: jnc zheng MOV 20H,#0FFH SJMP JS ZHENG: MOV 20H,#0 JS: SJMP $
80C51汇编伪指令
4.1 伪指令有一些指令,如指定目标程序或数据存放的地址、给一些指定的标号赋值、表示源程序结束等指令,并不产生目标程序(机器码),也不影响程序的执行,仅仅产生供汇编用的某些命令,用来对汇编过程进行某种控制或操作,这类指令称为伪指令。
1.汇编语言源程序由以下两种指令构成▪汇编语句(指令语句)▪伪指令(指示性语句)2.汇编语句的格式:标号:操作码操作数;注释数据表示形式:二进制(B)、十六进制(H)、十进制(D或省略)、ASCII码(以单引号标识)4.1.1 定义起始地址伪指令格式:ORG addr16功能:规定程序块或数据块存放的起始地址。
addr16表示一个16位的程序存储器的空间地址,一般为一个确定的地址,也可以是事先定义的标号。
例如:ORG 2000HSTART: MOV A, 30H…4.1.2 定义汇编结束伪指令格式:END功能:表示汇编结束4.1.3 标号赋值伪指令格式:标号EQU [表达式]功能:将表达式的值赋给本语句中的标号。
又称为等值指令。
例:AA EQU 30HK1 EQU 40HMOV A,AA ;(30H)→AMOV A,K1 ;(40H)→A4.1.4 定义字节伪指令格式:标号: DB [字节表]从指定单元开始定义(存储)若干个字节的数据或ASCII码字符,常用于定义数据常数表。
格式:DB 字节常数或ASCII字符例: ORG 1000HDB 34H,0DEH,’A’,’B’DB 0AH,0BH,204.1.5 定义字伪指令格式:标号: DW[字表]从指定单元开始定义(存储)若干个字的数据或ASCII码字符。
格式:DW 字常数或ASCII字符例:ORG 2000HDW 1234H,’B’DW 0AH,204.1.6 DS 预留存储区伪指令格式:标号: DS表达式功能:从标号指定的地址单元开始,定义一个存储区,以备源程序使用。
存储区内预留的存储单元数由表达式的值决定。
例如:ORG 3030HTIMER: DS 10H┇BIT位地址符号指令。
伪指令
4.3汇编语言程序格式 4.3汇编语言程序格式
4.3汇编语言程序格式 4.3汇编语言程序格式 汇编语言程序中的每个语句可以由四项组成 [name] operation operand [;comment]
其中名字项是一个符号。 操作项是一个操作码的助记符,它可以是指令, 操作项是一个操作码的助记符,它可以是指令,它可以 是指令,伪操作或宏指令名。 操作数项由一个或多个表达式组成,它提供为执行所 要求的操作而需要的信息。 注释项用来说明程序或语句的功能。‘ 注释项用来说明程序或语句的功能。‘;’为识别注 释项的开始。‘ 释项的开始。‘;’也可以从一行的第一个字符开始, 此时整行都是注释,常用来说明下面一段程序的功能。
4.2.4对准伪操作 4.2.4对准伪操作
对准伪操作 EVEN伪操作使下一个字节地址成为偶数。 EVEN伪操作使下一个字节地址成为偶数。 例: DATA_SEG SEGMENT EVEN WORD_ARRAY DW 100 DUP(100) DATA_SEG ENDS
4.2.4对准伪操作 4.2.4对准伪操作
4.2伪操作 4.2伪操作
4、操作数还可以是 repeat_count DUP (operand,operand,……,operand)repeat_count (operand,operand,……,operand)repeat_count 用来指定括号中的操作数的重复次数。 例: ARRAY1 DB 2 DUP(0,1,2,?) ARRAY2 DB 100 DUP(?)
4.1汇编程序功能 4.1汇编程序功能
汇编程序的主要功能: 1、检查源程序 2、测出源程序中的语法错误,并给出出错信 息。 3、产生源程序的目标程序,并可给出列表文 件(同时列出汇编语言和机器语言的文件, 称为列表文件) 4、展开宏指令。
4.1 伪指令
60
0FFFDH
16
例2:定义字符串
MESS DB ‘HELLO’ MM DW ‘AB’
MESS+0 +1 +2 +3 +4 MM ‘H’ ’E’ ’L’ ’L’ ’O’ ’B’ ‘A’ 47H 45H 4CH 4CH 4FH 42H 41H
低地址
注意下面的不同: DB ’AB’ 41 42 ‘A ’ ‘B ’
第三章 总 结
寻址方式 基本寻址方式有七种:立即寻址、寄存器寻址、 (存储器)直接寻址、寄存器间接寻址、寄存器 相对寻址、基址变址寻址、基址变址相对寻址 指令系统 五个功能:数据传送、算术运算、逻辑运算、 程序控制、处理器控制指令。
1
数 据 MOV 传 送 LEA 指令 PUSH POP 输入 IN 输出 OUT 算术 ADD 运算 ADC 指令 INC SUB SBB DEC CMP
21
练习:数据定义伪指令
例: DATA SEGMENT A DB 10×20 STR1 DB ‘HI OK!’,0DH,0AH, ‘$’ DATA1 DW 2 DUP(0) SUM DW ? TABLE DB 2 DUP(3 DUP (3),7) DATA ENDS 问:(1)若执行下列指令后,(AX)=? LEA BX,TABLE MOV AX,[BX+3] (2)变量 A,STR1,DATA1,SUM,TABLE 的 EA=?
22
DATA SEGMENT A A DB 10×20 STR1 DB ‘HI OK!’,0DH,0AH, ‘$’ STR1 DATA1 DW 2 DUP(0) SUM DW ? TABLE DB 2 DUP(3 DUP (3),7) DATA ENDS
伪指令
BUF3 DD‘HELLO’;超过2个字符的字符串只能用DB
BUF4 DB BLOCK;地址表达式只能用DW或DD定义
如将DB改为DW,则操作数项表示取BLOCK的偏移地
址;如将DB改为DD,则操作数项表示取BLOCK的偏移
地址和段地址,且第一个字为偏移地址,第二个字为段地址。
注意事项:段寄存器名必须是CS、DS、ES、SS中的
一个,而段名则必须是由SEGMENT定义的
段名,并且用SEGMENT定义了几个段,
ASSUME伪指令就需要指明几个段。
4.过程定义伪指令
过程定义伪指令用来定义一个子程序,子程序又称过程,在主程序中由CALL指令调用,调用结束将返回到主程序中CALL指令的下一条指令继续执行,而子程序中必须有一条返回指令RET。
STR2DB16 DUP(?)
CNTEQU $-STR1
MOVCX,CNT
3.操作数值不能超出相应数据类型限定的取值范围。
4.操作数项可以包括多个数据,它们之间用逗号隔开。操作数项可以是常数表达式、地址表达式(仅适用DW、DD)、字符串(超过2个字符仅用DB)、问号(只分配存储单元,而不赋值)、重复子句DUP。
下面是不正确的定义:
BUF1:DB 90H,80H;变量不能有冒号
5.模块定义伪指令
在汇编语言中每一个独立的源程序称为一个模块,在源程序的开始可以用NAME或TITLE伪指令为模块命名,而源程序结束使用END伪指令。
指令格式:NAME模块名
TITLE模块名
END[标号]
指令功能:
1. NAME伪指令可以缺省,如果缺省NAME指令,汇编程序
以TITLE指令中前6个字符作为模块名.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
三明市高级技工学校
教案用纸附页
教学内容、方法和过程
附记
能把处理过程描述得非常具体。因此通过优化能编制出高效率的程序,即可节省存储空间又可提高程序执行的速度,在空间和时间上都充分发挥了计算机的潜力。在实时控制的场合下,计算机的监控程序大多采用汇编语言编写。
一、伪指令
伪指令:不属于指令集中的指令,在汇编时不产生目标代码,不影响程序的执行,仅指明在汇编时执行一些特殊的操作。
1、定义起始地址伪指令ORG
格式:ORG操作数
说明:操作数为一个16位的地址,它指出了下面的那条指令的目标代码的第一个字节的程序存储器地址。在一个源程序中,可以多次定义ORG伪指令,但要求规定的地址由小到大安排,各段之间地址不允许重复。
说明:该伪指令只能用于有位地址的位(片内RAM和SFR块中),把位地址赋予规定的字符名称,常用于位操作的程序中。
8、定义汇编结束伪指令END
格式:〔标号:〕END
说明:汇编结束伪指令END是用来告诉汇编程序,此源程序到此结束。在一个程序中,只允许出现一条END伪指令,而且必须安排在源程序的末尾。
二、汇编语言源程序汇编
MJ/JW-JL-11(15) 5年
三明市高级技工学校
教案用纸
学
科
单片机技术
第四章汇编语言程序设计简介
第1节伪指令
审批签字
授课时
授课时间
10.18 3-4节11.9 5-6节
授课班级
09电工班、09电梯班
教学目的
单片机设计语言,伪指令
教学重点
和难点
单片机设计语言过程
复习提问
用汇编语言编写的源程序称为汇编语言源程序。但是单片机不能直接识别,需要通过汇编将其转换成用二进制代码表示的机器语言程序,才能够识别和执行。汇编通常由专门的汇编程序来进行,通过编译后自动得到对应于汇编源程序的机器语言目标程序,这个过程叫机器汇编。另外还可用人工汇编。
作业:
总结:
1.计算机程序设计语言
2.伪指令
6、定义预留空间伪指令DS
格式:〔标号:〕DS操作数
说明:该伪指令是用于告诉汇编程序,从指定的地址单元开始(如由标号指定首址),保留由操作数设定的字节数空间作为备用空间。要注意的是DB、DW、DS伪指令只能用于程序存储器,而不能用于数据存储器。
7、定义位地址赋值伪指令BIT
格式:字符名称BIT位地址
2、定义赋值伪指令EQU
格式:字符名称EQU操作数
说明:该指令是用来给字符名称赋值。在同一个源程序中,任何一个字符名称只能赋值一次。赋值以后,其值在整个源程序中的值是固定的,不可改变。对所赋值的字符名称必须先定义赋值后才能使用。其操作数可以是8位或16位的二进制数,也可以是事先定义的表达式。
3、定义数据地址赋值伪指令DATA
5、定义双字节数据伪指令DW
DB伪指令确定数据表中第一个数据的单元地址有两种方法,一是由ORG伪指令规定首地址,二是由DB前一条指令的首地址加上该指令的长度。
三明市高级技工学校
教案用纸附页
教学内容、方法和过程
附记
格式:[标号:]DW数据表
说明:该伪指令与DB伪指令的不同之处是,DW定义的是双字节数据,而DB定义的是单字节数据,其他用法都相同。在汇编时,每个双字节的高8位数据要排在低地址单元,低8位数据排在高地址单元。
格式:字符名称DATA操作数
说明:DATA伪指令的功能和EQU伪指令相似,不同之处是DATA伪指令所定义的字符名称可先使用后定义,也可先定义后使用。在程序中它常用来定义数据地址。
4、定义字节数据伪指令DB
格式:[标号:]DB数据表
说明:该伪指令是用来定义若干字节数据从指定的地址单元开始存放在程序存储器中。数据表是由8位二进制数或由加单引号的字符组成,中间用逗号间隔,每行的最后一个数据不用逗号。
三明市高级技工学校
教案用纸附页
教学内容、方法和过程
附记
总结:
1、逻辑与运算指令组
2、逻辑或运算指令组
3、逻辑异或运算指令组
4、累加器清"0”和取反指令组
5、移位指令
位操作指令有哪些?
教学内容、方法和过程
附记
(一)、组织教学
(二)、课前复习
1、子程序调用与返回指令组
2、空操作指令
3、位操作类指令
(三)、导入新课
计算机程序设计语言通常分为三类:
机器语言:能被计算机直接识别和执行,但它不易为人们编写和阅读,因此,人们一般不再用它来进行程序设计。
高级语言:一种面向过程和问题并能独立于机器的通用程序设计语言,是一种接近人们自然语言和常用数字表达式的计算机语言。编程的速度快而且编程者不必熟悉机器内部的硬件结构而可以把主要精力集中于掌握语言的语法规则和程序的结构设计方面。但程序执行的速度慢且占据的存储空间较大。