伪指令和命令文件

合集下载

汇编语言指令及伪指令练习的实验报告总结(范文)

汇编语言指令及伪指令练习的实验报告总结(范文)

汇编语言指令及伪指令‎练习的实验报告总结‎汇编语言指令及伪指令‎练习的实验报告总结‎‎篇一:汇‎编语言实验报告福建‎农林大学金山学院课‎程名称:姓‎名:系:‎专业:‎年级:学‎号:指导教师‎:职称:‎ (程序设计类‎课程) 实验报告汇‎编语言 201X~2‎01X学年第二学期‎实验项目列表福建农‎林大学金山学院实验报‎告系:专‎业:年级:‎姓名:‎学号:‎实验课程:‎汇编语言实验室号:‎_ _1#6‎05 实验设备号:‎ I3 实验时‎间:201‎X.4.25‎指导教师签字:‎成绩:‎实验一汇编程序的‎汇编及运行1‎.实验目的和要求‎ (1)熟悉汇编程‎序的汇编、连接、执行‎过程;(2)‎生成LST文件,查看‎L ST文件;‎(3)生成BJ文件,‎修改语法错误;‎(4)生成EXE文‎件;(5)执‎行程序。

2.‎实验环境 IBM—P‎C机及其兼容机;实‎验的软件环境是:‎操作系统:‎ DS2.‎0以上;调试程序:‎ DEBUG.C‎M;文本编程程序:‎ EDIT.EX‎E、PS.EXE;宏‎汇编程序:M‎A SM.EXE(或A‎S M .EXE);连‎接装配程序:‎L INK .EXE;‎交叉引用程序:‎CREF.EXE(‎可有可无)。

‎3.实验内容及实验数‎据记录(1)‎将数据段输入,取名‎ 1.txt,保存‎在MASM文件夹下。

‎生成LST文件,(不‎必连接、运行)用ED‎I T查看1.L‎S T文件。

试回答:‎ DA1,DA2‎的偏移量分别是多少?‎C UNT的值为多少?‎DATA SEGM‎E NT RG 20H‎NUM1=8 NU‎M2=NUM1+10‎H DA1 DB ‘‎I BM PC’ CU‎N T EQU $-D‎A1 DATA EN‎D S DA2 DB ‎0AH, 0DH E‎N D(2)输‎入有错误的文件,修改‎错误语句。

(MASM‎没有出现错误即可。

不‎必连接、运行。

)‎D ATA SEGME‎N T VAR1 DB‎0, 25, DH‎,300 VAR2‎DB 12H, A‎4H, 6BH VA‎R3 DB ’ABC‎D EF’ VAR4 ‎D 1H, 5678‎H VAR5 D 1‎0H DUP(?) ‎D ATA ENDS ‎C DE SEGMEN‎T ASSUME C‎S: CDE, DE‎: DATA MV ‎D S, AX LEA‎SI, VAR5 ‎M V BX, FFS‎E T VAR2 MV‎[SI], 0AB‎H MV AX, V‎A R1+2 MV [‎B X], [SI] ‎M V VAR5+4,‎VAR4 MV A‎H, 4CH INT‎21H ENDS ‎E ND START ‎B EING MV A‎X, DATA CD‎E(3)输入‎正确的程序,汇编、连‎接、运行 STACK‎S SEGMENT ‎S TACK D 12‎8DUP(?) E‎N DS SEGMEN‎T ENDS SEG‎M ENT ASSUM‎E CS: CDES‎,DS: DATA‎S STACKS D‎A TAS DATAS‎CDES STRI‎N G DB ‘ELC‎M E!’, 13, ‎10, ‘$’ ST‎A RT: M‎V AX, DATA‎S MV DS, A‎X LEA DX, ‎S TRING MV ‎A H, 9 INT ‎21H MV AH,‎4CH INT 2‎1H CDES EN‎D S END STA‎R T4.算法‎描述及实验步骤 1)‎首先,用记事本输入‎各段程序,并储存成源‎程序,保存在MASM‎目录下。

指令和伪指令

指令和伪指令

①指令和伪指令。

答:汇编指令与机器指令原则上一一对应,在汇编过程中,汇编指令会被替换为机器指令,最终生成可执行的目标代码;指令的功能是由特定CPU的指令译码器确定的,因此,指令是一个硬件相关的概念;汇编过程仅将汇编指令替换为机器指令,而机器指令的执行是在可执行程序执行阶段完成的。

汇编语言伪指令在汇编过程中并不产生机器指令,它们的功能在于指示汇编程序按照指定的方式对汇编语言源程序做出解释,伪指令的功能是由汇编程序解释的,与硬件结构无关;伪指令的执行是在汇编过程中完成的,在程序执行阶段则不存在伪指令的概念。

1.逻辑地址:在CPU内部的存储单元地址表示形式,分为段基值和偏移量两个组成部分,它们都是16位的,在指令或源程序中只能使用逻辑地址来表达存储单元。

2.物理地址:CPU访问存储单元时向地址总线传送的地址表示形式,是20位的地址,由逻辑地址中段基值乘以16再加上偏移量得到,逻辑地址到物理地址的转换由CPU在执行访问存储单元的指令时自动完成。

3.标志寄存器:在CPU中由状态标志位与控制标志位组成的寄存器称为标志寄存器,其中状态标志位用于标识运算指令执行后运算结果的特征,控制标志位用于控制CPU的工作模式或改变CPU对某些事件的响应方式。

4.存储器寻址方式:即获得存储单元地址的方式,在8086/8088CPU中包括直接寻址、寄存器间接寻址、基址寻址、变址寻址、基址变址寻址这五种寻址方式。

5.立即数:以数值形式直接给出的操作数称为立即数,立即数不能作为目的操作数。

6.位移量:直接以数字形式出现的偏移量的分量之一。

7.伪指令:用于指示编译(汇编)程序如何进行编译的指令。

8.位操作指令:9.能精准到位对其进行读写的计算机指令,包括逻辑运算和移位及循环移位指令。

10.中断过程:中断请求、中断响应、中断处理、中断返回11..BCD码:一种十进制编码形式,(1分)限制4个连续二进制位的数值变化范围为0到9,用以表示一个十进制数位,(1分)是实现十进制算术运算调整的必要基础。

汇编80X86伪指令系统

汇编80X86伪指令系统

80X86伪指令系统一.伪指令概述构成汇编语言程序的语句可以分为三种:指令性语句(指令语句)、指示性语句(伪指令语句)和指令语句(宏调用语句)。

指令语句,又称可执行语句,表示计算机具有的一个基本能力。

比如数据传送,数据相加、相减等。

伪指令语句,又称命令语句,告诉汇编程序如何对程序进行汇编。

比如段定义、储存单元分配等。

一个汇编语言程序经汇编,连接和装入内存后,在执行程序之前:1.指示性语句的功能已经完成,故又称伪操作。

2.指令性语句的功能尚未完成,需控制CPU去执行,才能完成。

二、伪指令详解符号定义语句1.等值语句格式:符号名EQU 需等值的表达式功能:用符号名等值指定的表达式;其中表达式可以是任何有效的操作数,汇编时用语句中的表达式代替程序中符号所在的地方。

说明:▲可用于定义符号常量,方便修改程序。

▲某表达式多次出现时,用等值伪操作可以方便编程。

▲等值语句表达式的种类(1)常数或数值表达式COUNT EQU 10NUM EQU 89*3+5-9(2)地址表达式ADD1 EQU V AR2+10H(3)变量或标号CON EQU V AR▲在EQU语句右边出现的标号需在EQU语句以前进行定义。

2.等号语句格式:符号=需等值的表达式功能:把等号“=”右边表达式的值或符号赋给等号“=”左边的符号。

表达式可以是任何有效的操作数。

说明:EQU语句与“=”的区别:在同一源程序中,EQU语句定义的符号不能被重新赋值或者说不能被重新定义,同一符号只能定义一次,符号的数值不能被改变。

“=”定义的符号可以被重新赋值,同一符号的数值在同一个程序中可以改变。

数据定义语句格式:变量名类型助记符操作数[ ,操作数, ……]功能:用于在内存中为常数、初始数据或者变量分配储存单元。

说明:(1)变量名指示内存操作数所占用的内存单元地址(符号地址),在程序中,可以通过变量,名对内存单元进行访问。

变量名为用户自定义标识符,表示初值表首元素的逻辑地址。

8086汇编语言伪指令

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,只不过是语法结构不太一样注意:通过变量名操作时,变量名代表存储区的第一个数据的地址。

Keil中的常见错误和警告

Keil中的常见错误和警告
*ERROR 132:not in formal parameter list 函数内参数声明使用的名字未出现在参数表中
*ERROR 133:char function(v0,v1,v2) Char*v0,*v1,*v5;/ *’v5’在形参中未出现
*ERROR 134:xdata/idata/pdata/data on function not permitted 函数总是驻留于 0x5xxxx 的 code 存储区,不能位于 xdata/idata/pdata/data 空间
*ERROR 150:bit member in struct/union 结构或者联合不能包含位类型的成员,这个限制是由 8051 结构决定的
*ERROR 151:self relative struct/union 结构或者联合不能包含自身
*ERROR 152:bit field type too small for number of bits 位域声明中指定的位数超过所给原型中位的数量
Break/continue 语句只能出现在 for,while,do while 或 switch 语句中间。 *ERROR 172:missing enclosing swith
Case 语句只能用在 switch 语句中 *ERROR 173:missing return-expression
*ERROR 119:reuse of macro formal parameter 宏定义形参名重复使用
*ERROR 120:‘C’unexpected in formal list 形参表中不允许有字符‘c’,应用逗号代替
*ERROR 121:missing ‘)’after actual parameter 宏调用实参表的右括号丢失

指令、伪指令、伪操作的概念及其作用。

指令、伪指令、伪操作的概念及其作用。

指令、伪指令、伪操作的概念及其作用。

指令、伪指令和伪操作是计算机操作中的重要概念,它们在程序的开发和执行过程中起到了关键作用。

指令(Instruction)是计算机程序中最基本的执行单位。

它是对计算机硬件发出的一个命令,指示计算机执行某种特定的操作。

在计算机的执行过程中,指令被送入处理器中进行解码和执行。

指令通常包括操作码和操作数两个部分。

操作码(Opcode)指明将要执行的操作的类型,操作数(Operand)则表示执行该操作需要的数据或操作的地址。

伪指令(Pseudoinstruction)是一类特殊的指令,它在高级语言编译器或汇编器中扮演了重要的角色。

伪指令看起来像是指令,但在硬件层面并不对应特定的操作。

伪指令主要用于控制程序的编译和链接过程,以及为程序员提供方便的程序设计功能。

它们和普通指令一样出现在源代码中,但在编译器的处理中会被转化为真正的指令或伪操作。

伪操作(Pseudo-operation),也称为汇编器指示符或汇编器伪指令,是在汇编语言中使用的一种特殊语法。

伪操作不是用来执行特定的计算或操作,而是在编译、链接、调试和优化等过程中对程序进行管理和控制的指令。

伪操作通常用于定义常量、申明变量、分配存储空间、定义代码的起点和终点等。

它们在编译过程中起到了更高层次的控制和调度作用,用于生成目标代码时提供相关指示。

举例来说,伪操作可以用于定义常量,如:```.DATAPI EQU 3.14159```上述代码将在目标代码的数据段中定义一个名为PI的常量,并将其值设置为3.14159。

另一个例子是用于声明变量并分配存储空间,如:```.DATACount DW 100```上述代码声明了一个名为Count的变量,并分配了一个字(16位)的存储空间。

伪操作还可以用于定义代码的起始点和终止点,如:```.CODESTART:......END:```上述代码定义了一个名为START的标签,表示程序的起始点;同时,定义了一个名为END的标签,表示程序的终止点。

ARM汇编语言伪指令

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位的常量。

ARM伪指令介绍

ARM伪指令介绍

以上三条伪指令用于声明局部变量,在其作用范围内变量名必须唯一。 以上三条伪指令用于声明局部变量,在其作用范围内变量名必须唯一。 9
ARM系统硬件设计基础 第4章 ARM系统硬件设计基础
3、变量赋值伪指令SETA、SETL、SETS 变量赋值伪指令SETA、SETL、 SETA
SETA伪指令可以为一个算术变量赋值; SETA伪指令可以为一个算术变量赋值; 伪指令可以为一个算术变量赋值 SETL伪指令可以为一个逻辑变量赋值; SETL伪指令可以为一个逻辑变量赋值; 伪指令可以为一个逻辑变量赋值 SETS伪指令可以为一个字符串变量赋值。 SETS伪指令可以为一个字符串变量赋值。 伪指令可以为一个字符串变量赋值 语法格式: SETA(SETL或SETS) 语法格式: 变量名 SETA(SETL或SETS) 表达式 例: DATE1 DATE1 GBLA SETA LCLL STATUS SETL GBLS STRNG SETS DATE1 DATE1 0xf2003b*2 xf2003b*2 2003b* STATUS {TRUE} STRING “Linux” ;声明全局算术变量DATE1 声明全局算术变量DATE1 DATE ;为这个变量赋值 ;声明局部逻辑变量STATUS 声明局部逻辑变量STATUS ;为这个逻辑变量赋值 ;声明一个全局字符串变量STRING 声明一个全局字符串变量STRING ;为STRING赋值”Linux” STRING赋值”Linux” 赋值
,=DATA1 LDR R0,=DATA1 (2)方便记忆 =DATA1 LDR R0,=DATA1
直接加载变量123456 LDR R0,=123456 ;直接加载变量123456 =SECTION+04 LDR R1,=SECTION+04 [R1 LDR R0,[R1] (3)方便修改 (4)不必关心存储空间 编译程序会自动安排变量的存储空间 11 ;先加载存储单元地址

DSP2812学习笔记-CMD文件编写

DSP2812学习笔记-CMD文件编写

DSP2812学习笔记-CMD⽂件编写⾸先我们要知道什么是CMD⽂件,它是⽤来⼲什么的,然后再来看看它有些什么,怎么去编写⼀个CMD⽂件。

CMD即command命令,命令⽂件指定存储区域的分配。

由于 DSP281X 系列的独特性(⽚内存在 SRAM 和 FLASH)所以必须创建⼀个⽤户链接命令⽂件,以便在运⾏程序时,每个块都能对号⼊座。

2812中CMD 采⽤的是分页制,其中PAGE0⽤于存放程序空间,⽽PAGE1⽤于存放数据空间。

我们结合SRAM.cmd(附件1)⽂件来介绍下CMD⽂件的编写。

CMD的伪指令:MEMORY 和 SECTIONS 是命令⽂件中最常⽤的两伪指令。

MEMORY伪指令⽤来表⽰实际存在⽬标系统中的可以使⽤的存储器范围,在这⾥每个存储器都有⾃⼰的名字,起始地址和长度。

SECTIONS伪指令是⽤来描述输⼊端是如何组合到输出端内的。

CMD ⽂件⾥有两个基本的段:初始化段和⾮初始化段。

初始化段包含代码和常数等必须在 DSP 上电之后有效的数。

故初始化块必须保存在如⽚内 FLASH 等⾮遗失性存储器中。

在SRAM.cmd⽂件中已初始化的段:.text,.cinit,.const,.econst,..pinit 和.switch..每个⼩段⾥⾯存储的量说明如下:.text:所有可以执⾏的代码和常量.cinit:全局变量和静态变量的 C 初始化记录.const:包含字符串常量和初始化的全局变量和静态变量(由 const)的初始化和说明.econst:包含字符串常量和初始化的全局变量和静态变量(由 far const)的初始化和说明.pinit:全局构造器( C++)程序列表.switch:包含转换语⽓声明的列表⾮初始化段中含有在程序运⾏过程中才像变量内写数据进去,所以⾮初始化段必须链接到易失性存储器中如 RAM。

⾮初始化的段:.bss,.ebss,.stack,.sysmem,和 esysmem.(更好的理解就是,这些段就是存储空间⽽已)每个⼩段⾥⾯存储的量说明如下:.bss: 为全局变量和局部变量保留的空间,在程序上电时,cinit 空间中的数据复制出来并存储在.bss 空间中。

DSP汇编伪指令集讲解

DSP汇编伪指令集讲解



4 .copy, .include .copy, .include告诉编译器从其他文件中读入源语句。 区别在于:.copy读入的源语句将在列表文件中列出, 而.include伪指令读入的不在列表文件中列出。 当汇编器遇到.copy和 .include伪指令时,将停止汇 编当前的源文件语句,而去编译.copy和 .include文件中 的语句,然后继续汇编.copy和 .include后开始的源文件 语句。 5 .data , .text .data是数据段定义伪指令。它告诉汇编器把源代码汇 编到.data段中,且.data成为当前段。该段通常用来存放 数据表或初始化前的变量。 .text:定义.text段中的代码部分,该部分为可执行代 码。.text段是默认段,若汇编开始不指定其他段,就自动 汇编到该段。



4. 当编写具体的应用程序的时候, 用.copy或.include伪指令将I/O寄存器头文 件合中断矢量头文件复制到应用程序中, 形成一个汇编源程序(如delay.asm),再 由汇编器进行汇编后生成一个目标文件 (如delay.obj),最后连接器把该目标文 件和命令文件相连接,生成可执行文件 (如delay.out).

本例中用.usect伪指令定义两个未初始化的命名 段var1和var2。符号ptr和array分别指向var1段和 var2段的第一个字。 dflag指向var1段中50个字块 中的第一个字。
SPC 0000 0000 0000 0001 0001 0065 0002 0000 0003 目标代码 源程序 .text 2003 LACC ptr .usect array .usect 0037 ADD dflag .usect 0065 ADD vec .usect 0000 ADD .global ;汇编到.text段 03h “var1”,1 ;在var1段保留一个字 “var1”,100 ;在var1段保留100个字 037h “var1”,50 dflag ;还在.text段 “var2”,100 ; 在var2段保留100个字 vec ;还在.text段 array ;将array定义为外部符号名

8086CPU指令和伪指令(中英文全解)

8086CPU指令和伪指令(中英文全解)

8086CPU指令和寄存器英文全称。

一、数据传送指令比如,mov(move)、push、pop、pushf(push flags)、popf(pop flags)、xchg(exchange)等都是数据传送指令,这些指令实现寄存器和内存、寄存器和寄存器之间的单个数据传送。

二、算术运算指令比如,add、sub(substract)、adc(add with carry)、sbb(substract with borrow)、inc (increase)、dec(decrease)、cmp(compare)、imul(integer multiplication)、idiv (integer divide)、aaa(ASCII add with adjust)等都是算术运算指令,这些指令实现寄存器和内存中的数据运算。

它们的执行结果影响标志寄存器的sf、zf、of、cf、pf、af位。

三、逻辑指令比如,and、or、not、xor(exclusive or)、test、shl(shift logic left)、shr(shift logic right)、sal(shift arithmetic left)、sar(shift arithmetic right)、rol(rotate left)、ror(rotate right)、rcl(rotate left through carry)、rcr(rotate right through carry)等都是逻辑指令。

除了not 指令外,它们的执行结果都影响标志寄存器的相关标志位。

四、转移指令可以修改IP,或同时修改CS和IP的指令统称为转移指令。

转移指令分为一下几类。

(1)无条件转移指令,比如,jmp(jump);(2)条件转移指令,比如,jcxz(jump if CX is zero)、je(jump if equal)、jb(jump if below)、ja(jump if above)、jnb(jump if not below)、jna(jump if not above)等;(3)循环指令,比如,loop;(4)过程,比如,call、ret(return)、retf(return far);(5)中断,比如,int(interrupt)、iret(interrupt return)。

第6讲ARM汇编伪指令与伪操作

第6讲ARM汇编伪指令与伪操作

应用示例(源程序):
...
ADRL R0,Delay
...
Delay
MOV
R0,r14
...
使用伪指令将程序标号 Delay的地址存入R0
ARM伪指令——中等范围的地址读取
ADRL伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地 址值读取到寄存器中,比ADR伪指令可以读取更大范围的地址 。在汇编编 译器编译源程序时,ADRL伪指令被编译器替换成两条合适的指令。若不能 用两条指令实现,则产生错误,编译失败。
第6讲ARM汇编伪指令 与伪操作
2021年7月30日星期五
目前常用的编译环境有2种: 1. ADS/SDT、RealView MDK等ARM公司
推出的开发工具
2. GNU ARM开发工具
1. ADS/SDT、RealView MDK等ARM公司 推出的开发工具
ADS由ARM公司推出,使用了CodeWarrior公司 的编译器。针对ARM资源配置为用户提供了在 CodeWarrior IDE 集成环境下配置各种ARM 开 发工具的能力。
应用示例(加载地址):
... LDR ... InitStack MOV ...
R1,=InitStack R0, LR
使用伪指令将程序标号 InitStack的地址存入R1
ARM伪指令——大范围的地址读取
LDR伪指令用于加载32位的立即数或一个地址值到指定寄存器。在汇 编编译源程序时,LDR伪指令被编译器替换成一条合适的指令。若加载的 常数未超出MOV或MVN的范围,则使用MOV或MVN指令代替该LDR伪指 令,否则汇编器将常量放入文字池,并使用一条程序相对偏移的LDR指令 从文字池读出常量。
应用示例2(查表):

C语言三种预处理功能

C语言三种预处理功能
2、 带参宏一般用法
比如#define MAX(a,b) ((a)>(b)?(a):(b))则遇到 MAX(1+2,value)则会把它替换成: ((1+2)>(value)?(1+2):(value))注意事项和无参宏差不多。 但还是应注意
#define FUN(a) "a"
则,输入 FUN(345)会被替换成什么? 其实,如果这么写,无论宏的实参是什么,都不会影响其被替换成"a"的命运。也就是说, ""内的字符不被当成形参,即使它和一模一样。那么,你会问了,我要是想让这里输入 FUN(345)它就替换成"345"该怎么实现呢?请看下面关于#的用法
带参数
除了一般的字符串替换,还要做参数代换
格式: #define 宏名(参数表) 字符串
例如:
#define S(a,b) a*b area=S(3,2);//第一步被换为 area=a*b; ,第二步被换为 area=3*2;
(1)实参如果是表达式容易出问题
#define S(r) r*r area=S(a+b);//第一步换为 area=r*r;,第二步被换为 area=a+b*a+b;
值传递、返回值)。
冷门重点编辑
#define 用法
1、用无参宏定义一个简单的常量
#define LEN 12
这个是最常见的用法,但也会出错。比如下面几个知识点你会吗?可以看下:
(1)#define NAME "zhangyuncong" 程序中有"NAME"则,它会不会被替换呢? (2)#define 0x abcd 可以吗?也就是说,可不可以用不是标识符的字母替换成别的东 西? (3)#define NAME "zhang 这个可以吗? (4)#define NAME "zhangyuncong" 程序中有上面的宏定义,并且,程序里有句: NAMELIST 这样,会不会被替换成"zhangyuncong"LIST 四个题答案都是十分明确的。 第一个,""内的东西不会被宏替换。这一点应该大家都知道; 第二个,宏定义前面的那个必须是合法的用户标识符; 第三个,宏定义也不是说后面东西随便写,不能把字符串的两个""拆开; 第四个:只替换标识符,不替换别的东西。NAMELIST 整体是个标识符,而没有 NAME 标识符,所以不替换。 也就是说,这种情况下记住:#define 第一位置第二位置 (1) 不替换程序中字符串里的东西; (2) 第一位置只能是合法的标识符(可以是关键字); (3) 第二位置如果有字符串,必须把""配对; (4) 只替换与第一位置完全相同的标识符。 还有就是老生常谈的话:记住这是简单的替换而已,不要在中间计算结果,一定要替换出 表达式之后再算。

指令语句和伪指令语句的格式-详细解释说明

指令语句和伪指令语句的格式-详细解释说明

指令语句和伪指令语句的格式-范文模板及概述示例1:标题:指令语句与伪指令语句的格式解析及其在编程中的应用指令语句和伪指令语句是程序设计语言中两种关键的构成元素,它们在编程过程中发挥着不同的作用,并具有特定的格式规范。

一、指令语句指令语句,也称机器指令,是计算机硬件可以直接执行的命令。

其格式通常包括操作码(opcode)和操作数(operand)。

操作码代表要执行的操作类型,如加法、减法、移动等;操作数则是该操作的对象,可以是寄存器、内存地址或立即数。

例如,在x86汇编语言中,"ADD AX, BX"是一个指令语句,其中"ADD"是操作码,指示进行加法操作,"AX"和"BX"是操作数。

二、伪指令语句相比之下,伪指令语句并非由计算机硬件直接执行,而是由汇编程序在汇编阶段处理并转化为实际的机器指令。

伪指令主要用于定义数据、分配存储空间、设置程序流程控制以及提供程序说明等。

例如,在汇编语言中,".DATA"、".WORD"、"EQU"、"ORG"等都是常见的伪指令。

".DATA"用于定义数据段,".WORD"用于分配指定大小的存储空间,"EQU"用于定义符号常量,"ORG"则用于设定程序的起始地址。

具体而言,一个伪指令语句的格式可能如下所示:assemblyLABEL EQU 100 ; 定义符号常量LABEL为100在这个例子中,“LABEL”是符号名,“EQU”是伪指令关键字,而“100”则是赋给该符号的值。

总结来说,指令语句和伪指令语句虽然都属于编程语句,但前者直接影响程序的运行过程,后者则主要参与程序的构建和组织,对源代码进行预处理,共同构建出可被计算机理解和执行的程序结构。

伪指令和命令文件

伪指令和命令文件

已初始化的段含有真实的指令和数据,存放 在程序存储空间。程序存储空间在DSP片内 在程序存储空间。程序存储空间在DSP片内 是FLASH ,调试代码时,常常通过跳线 MP/MC,装载代码到片外的程序存储空间。 MP/MC,装载代码到片外的程序存储空间。 未初始化的段只是保留变量的地址空间,未 初始化的段存放在数据存储空间,数据存储 空间多为RAM存储单元。在DSP上调用 空间多为RAM存储单元。在DSP上调用 _c_int0初始化库前,未初始化的段并没有真 _c_int0初始化库前,未初始化的段并没有真 实的内容。
5、条件汇编伪指令
条件汇编伪指令使用户能指示汇编器根据表达式求值 结果的真或假来汇编代码的某些段。 结果的真或假来汇编代码的某些段。 (1).if/.elseif/.else/.endif:告诉汇编器根据表达式的 ) : 值有条件地汇编代码块。 值有条件地汇编代码块。 .if expression 标示条件块的开始,如果.if条件为 标示条件块的开始,如果 条件为 那么汇编后面的代码块。 真,那么汇编后面的代码块。 .elseif expression 如果 条件为假且 如果.if条件为假且 条件为假且.elseif为真,那 为真, 为真 么汇编后面的代码块。 么汇编后面的代码块。 .else 如果.if为假 为假, 如果 为假,那么汇编后面的代码 块。 .endif 标志条件块的末尾并结束条件块。 标志条件块的末尾并结束条件块。
( 2) .loop/.break/.endloop: 告诉汇编器根据表达 ) : 式的值来重复地汇编代码块。 式的值来重复地汇编代码块。 .loop expression 标示可重复代码块的开始。 标示可重复代码块的开始。 .break expression 告诉汇编器当 告诉汇编器当.break表达式为假 表达式为假 时继续重复汇编;如果表达式为真,那么转移到紧 时继续重复汇编;如果表达式为真, 接在.endloop之后的代码。 之后的代码。 接在 之后的代码 .endloop 标志可重复块的末尾。 标志可重复块的末尾。

第4章 伪指令与源程序格式汇总

第4章  伪指令与源程序格式汇总

第4章伪指令与源程序格式汇编语言程序的语句有三种,即指令、伪指令,还可以有宏指令。

关于宏指令将在第7章介绍,本章介绍部分常用的伪指令(又称伪操作)。

这些伪指令在程序中是必不可少的,主要用来定义数据变量和程序结构。

本章还介绍指令中的操作数和运算符,通过本章的学习,可以学会使用简便而有效率的指令格式,正确定义数据变量,熟知源程序的格式,编写完整的汇编语言程序。

4.1 伪指令伪指令和指令不同的是,指令是在程序运行期间由计算机的CPU来执行的,而伪指令是在汇编程序对源程序进行汇编期间由汇编程序处理的操作。

它们可以完成如定义数据、定义程序模式、分配存储区、指示程序结束、处理器选择等功能。

这里只介绍一些常用的伪指令。

有些和宏汇编有关的伪指令在介绍宏汇编时再作说明。

4.1.1 处理机选择伪指令由于80x86的所有处理器都支持8086指令系统,但每一种高档的机型又都增加了一些新的指令。

为了能使用这些新增指令,在编写程序时要用处理机选择伪指令对所用的处理机作出选择,也就是说,要告诉汇编程序应该选择哪一种指令系统。

处理机选择伪指令有以下几种:.8086 选择8086指令系统.286 选择8O286指令系统.286P 选择保护方式下的80286指令系统.386 选择80386指令系统.386P 选择保护方式下的8O386指令系统.486 选择80486指令系统.486P 选择保护方式下的8O486指令系统.586 选择Pentium指令系统.586P 选择保护方式下的Pentium指令系统指令中的点‘.’是需要的。

这类伪指令一般放在整个程序的最前面。

如不给出,则汇编程序认为其默认选择是8086指令系统。

4.1.2 段定义伪指令我们结合第2章已介绍的程序实例2来看段定义,注意有分号的注释行,程序如下:例4.1data segment ;定义数据段datastring db ‘hello,world!$’data endscode segment ;定义代码段codeassume cs:code,ds:data ;指定段寄存器和段的关系start:mov ax,data ;对ds赋data段基地址mov ds,axmov dx,offset stringmov ah,9int 21hmov ah,4chint 21hcode endsend start ;汇编结束, 程序起始点start:1.段定义伪指令汇编程序在把源程序转换为目标程序时,必须确定标号和变量(代码段和数据段的符号地址)的偏移地址,连接程序对针目标程序把不同的段和模块连接在一起,确定各个段的段地址。

指令和伪指令

指令和伪指令

指令和伪指令①指令和伪指令。

答:汇编指令与机器指令原则上一一对应,在汇编过程中,汇编指令会被替换为机器指令,最终生成可执行的目标代码;指令的功能是由特定CPU的指令译码器确定的,因此,指令是一个硬件相关的概念;汇编过程仅将汇编指令替换为机器指令,而机器指令的执行是在可执行程序执行阶段完成的。

汇编语言伪指令在汇编过程中并不产生机器指令,它们的功能在于指示汇编程序按照指定的方式对汇编语言源程序做出解释,伪指令的功能是由汇编程序解释的,与硬件结构无关;伪指令的执行是在汇编过程中完成的,在程序执行阶段则不存在伪指令的概念。

1.逻辑地址:在CPU内部的存储单元地址表示形式,分为段基值和偏移量两个组成部分,它们都是16位的,在指令或源程序中只能使用逻辑地址来表达存储单元。

2.物理地址:CPU访问存储单元时向地址总线传送的地址表示形式,是20位的地址,由逻辑地址中段基值乘以16再加上偏移量得到,逻辑地址到物理地址的转换由CPU在执行访问存储单元的指令时自动完成。

3.标志寄存器:在CPU中由状态标志位与控制标志位组成的寄存器称为标志寄存器,其中状态标志位用于标识运算指令执行后运算结果的特征,控制标志位用于控制CPU的工作模式或改变CPU对某些事件的响应方式。

4.存储器寻址方式:即获得存储单元地址的方式,在8086/8088CPU中包括直接寻址、寄存器间接寻址、基址寻址、变址寻址、基址变址寻址这五种寻址方式。

5.立即数:以数值形式直接给出的操作数称为立即数,立即数不能作为目的操作数。

6.位移量:直接以数字形式出现的偏移量的分量之一。

7.伪指令:用于指示编译(汇编)程序如何进行编译的指令。

8.位操作指令:9.能精准到位对其进行读写的计算机指令,包括逻辑运算和移位及循环移位指令。

10.中断过程:中断请求、中断响应、中断处理、中断返回11..BCD码:一种十进制编码形式,(1分)限制4个连续二进制位的数值变化范围为0到9,用以表示一个十进制数位,(1分)是实现十进制算术运算调整的必要基础。

伪指令

伪指令
BUF2 DB 1000;操作数项超过了字节数的取值范围
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个字符作为模块名.

ARM汇编伪指令

ARM汇编伪指令

ARM汇编伪指令在ARM汇编语言源程序中有些特殊助记符,它们没有相对应的操作码或者机器码,通常称为伪指令,它们所完成的操作称为伪操作。

伪指令在源程序中的作用是为完成汇编程序作各种准备工作的,由汇编程序在源程序的汇编期间进行处理,仅在汇编过程中起作用。

在ARM的汇编程序中,有以下几种伪指令:符号定义伪指令、数据定义伪指令、汇编控制伪指令、宏指令以及其他伪指令。

一、符号定义伪指令作用:用于定义ARM汇编程序中的变量、对变量赋值以及定义寄存器的别名等。

符号定义有如下几种伪指令:用于定义局部变量的LCLA、LCLL和LCLS。

用于定义全局变量的GBLA、GBLL和GBLS。

用于对变量赋值的SETA、SETL和SETS。

为通用寄存器列表定义名称的RLIST。

(1)LCLA、LCLL和LCLS格式:LCLA/LCLL/LCLS 局部变量名说明:LCLA、LCLL和LCLS伪指令用于定义一个汇编程序中的局部变量并初始化。

其中:LCLA定义一个局部的数字变量,初始化为0。

LCLL定义一个局部的逻辑变量,初始化为F。

LCLS定义一个局部的字符串变量,初始化为空串。

这3条伪指令用于声明局部变量,在其局部作用范围内变量名必须惟一,例如在宏内。

例:LCLA num1 ;定义一个局部数字变量,变量名为num1 LCLL I2 ;定义一个逻辑变量,变量名为I2LCLS str3 ;定义一个字符串变量,变量名为str3num1 SETA 0xabcd ;将该变量赋值为0xabcdI2 SETL {FALSE} ;将该变量赋值为真str3 SETS “HELLO”;将该变量赋值为“HELLO”(2)GBLA、GBLL和GBLS格式:GBLA/GBLL/GBLS 变量名说明:GBLA、GBLL和GBLS伪操作定义一个汇编程序中的全局变量并初始化。

其中:GBLA定义一个全局数字变量,并初始化为0。

GBLL定义一个全局逻辑变量,并初始化为F。

汇编语言伪指令

汇编语言伪指令

汇编语言伪指令在编写汇编语言程序时,会用到另一类指令,这类指令仅供汇编程序将源程序翻译成目标程序时使用,本身并不形成机器码,这类指令称为伪指令。

由此可知,指令有二类:(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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MS320LF2407的工程中主要包含头文件、库 的工程中主要包含头文件、 的工程中主要包含头文件 文件、命令文件、中断向量文件和程序源文件。 文件、命令文件、中断向量文件和程序源文件。 头文件中定义DSP系统用到的一些寄存器映射地 头文件中定义DSP系统用到的一些寄存器映射地 址。用户用到的常量和用户自定义的寄存器都在头 文件中定义,头文件名的后缀为.H。 文件中定义,头文件名的后缀为 。寄存器头文件 可以从其他文件或相关资料中复制, 可以从其他文件或相关资料中复制,或复制后根据 需要进行修改。 需要进行修改。 中断向量文件vectors.asm:定义了系统各种中断 : 中断向量文件 服务程序。 服务程序。
定义未初始化的段: 定义未初始化的段: 为未初始化的变量。 (1) .bss 为未初始化的变量 。 在 .bss段内保留存 ) 段内保留存 储器空间。 储器空间。 在未初始化命名段内保留空间。 (2) .usect 在未初始化命名段内保留空间。.usect ) 伪 指 令 和 .bss 伪 指 令 相 类 似 , 但 是 它 允 许 用 户 与 分开保留空间。 段.bss分开保留空间。 分开保留空间 定义初始化的段: 定义初始化的段: 创建具有绝对地址的初始化命名段。 (3) .asect 创建具有绝对地址的初始化命名段 。 ) 包含代码或数据。在绝对段内,用户可以使用.label 包含代码或数据。在绝对段内,用户可以使用 伪指令来定义可重定位标号。 伪指令来定义可重定位标号。 标示.text段内代码部分 , 是系统定义的 段内代码部分, (4). text 标示 ) 段内代码部分 默认段,如不明确声明,代码一般都放在该段中。 默认段,如不明确声明,代码一般都放在该段中。 用户可以自行定义初始化的段。 (5) .sect 用户可以自行定义初始化的段 。 用 .sect ) 定义的段可包含代码或数据。 定义的段可包含代码或数据。
已初始化的段含有真实的指令和数据,存放 在程序存储空间。程序存储空间在DSP片内 在程序存储空间。程序存储空间在DSP片内 是FLASH ,调试代码时,常常通过跳线 MP/MC,装载代码到片外的程序存储空间。 MP/MC,装载代码到片外的程序存储空间。 未初始化的段只是保留变量的地址空间,未 初始化的段存放在数据存储空间,数据存储 空间多为RAM存储单元。在DSP上调用 空间多为RAM存储单元。在DSP上调用 _c_int0初始化库前,未初始化的段并没有真 _c_int0初始化库前,未初始化的段并没有真 实的内容。
6、汇编时符号伪指令
(1).asg:把字符串赋给替代符号。 ) :把字符串赋给替代符号。 (2).set和.equ:把常量值赋予符号。 ) 和 :把常量值赋予符号。 ( 3) .struct/.endstruct: 建立类 语言的结构定 ) : 建立类C语言的结构定 不分配存储器, 义。不分配存储器,它们简单地创建可重复使用 的符号模板。 的符号模板。 的结构特性赋给标号。 (4).tag:把类 的结构特性赋给标号 。不分配 ) : 把类C的结构特性赋给标号 存储器,结构标号必须在使用之前定义。 存储器,结构标号必须在使用之前定义。 ( 4) .eval: 对表达式求值 , 把结果转化为字符 , ) : 对表达式求值, 把结果转化为字符, 并把字符赋给替代符号。 并把字符赋给替代符号。
Rts2xx.lib包含: 包含: 包含 ANSIC标准库; 标准库; 标准库 系统启动程序_c_int0; 系统启动程序 ; 允许C访问特殊指令的函数和宏 访问特殊指令的函数和宏。 允许 访问特殊指令的函数和宏。 rts2xx.lib库文件可在 库文件可在 “C:\CCStudio_v3.1\C2400\cgtools\lib”下找 下找 不能直接打开查看,一般不能修改。 到 。不能直接打开查看,一般不能修改。 程序源文件( 或 程序源文件(.C或.ASM)用于用户编写具有一定 ) 功能的程序。 功能的程序。
命令文件名的后缀为.CMD,命令文件实现对 , 命令文件名的后缀为 程序存储器空间和数据存储器空间的分配。 程序存储器空间和数据存储器空间的分配。文件常 用的伪指令有Memory和Sections伪指令。 伪指令。 用的伪指令有 和 伪指令 Memory:用来标示实际存在目标系统中且可被使 : 用的存储器范围,每个存储器范围具有名字, 用的存储器范围,每个存储器范围具有名字,起始 地址和长度。 地址和长度。 Sections :描述输入段怎样被组合到输出段内;在可 描述输入段怎样被组合到输出段内; 执行程序内定义输出段; 执行程序内定义输出段;规定在存储器内何处放置输 出段;允许重命名输出段。 出段;允许重命名输出段。
2、初始化常数的伪指令 、
(1).bes和.space:在当前段中保留特定的位数。汇编 ) 和 :在当前段中保留特定的位数。 器用0填充这些保留位 用户可以通过把位数乘16来保 填充这些保留位。 器用 填充这些保留位。用户可以通过把位数乘 来保 留规定的字数。 留规定的字数。 当使用.space的标号时,指向保留位的第一个字。 的标号时, 当使用 的标号时 指向保留位的第一个字。 当使用.bes的标号时,指向保留位的最后一个字。 的标号时, 当使用 的标号时 指向保留位的最后一个字。 ( 2) .byte: 将一个或多个 位的数值置入当前段连续 ) : 将一个或多个8位的数值置入当前段连续 的字中。除了每个数值的宽度限制为8位以外, 类似。 与.word类似。 类似 (3).field:将单个数值置入当前字规定的位数中。用 ) :将单个数值置入当前字规定的位数中。 户可以用.field伪指令将多个域 ( field) 组装到单个字 伪指令将多个域( 户可以用 伪指令将多个域 ) 在字被填满之前,汇编器将不使SPC增量。 增量。 中,在字被填满之前,汇编器将不使 增量
3、调准段程序计数器的伪指令
调准在128个字的边界。 确保跟 个字的边界。 (1).align:把SPC调准在 ) : 调准在 个字的边界 随在.align伪指令之后的代码从数据页边界处开始。 伪指令之后的代码从数据页边界处开始。 随在 伪指令之后的代码从数据页边界处开始 如果SPC已调至数据页的边界,它不再增量。 已调至数据页的边界, 如果 已调至数据页的边界 它不再增量。 (2).even:调准 ) :调准SPC,使其指向下一个完整的字。 ,使其指向下一个完整的字。 在 使 用 .field 伪 指 令 之 后 用 户 应 当 使 用 .even , 如 伪指令未填满一个字, 果.field伪指令未填满一个字,.even指令将使汇编器 伪指令未填满一个字 指令将使汇编器 填满,并用0填未用到的位 填未用到的位。 填满,并用 填未用到的位。
( 2) .loop/.break/.endloop: 告诉汇编器根据表达 ) : 式的值来重复地汇编代码块。 式的值来重复地汇编代码块。 .loop expression 标示可重复代码块的开始。 标示可重复代码块的开始。 .break expression 告诉汇编器当 告诉汇编器当.break表达式为假 表达式为假 时继续重复汇编;如果表达式为真,那么转移到紧 时继续重复汇编;如果表达式为真, 接在.endloop之后的代码。 之后的代码。 接在 之后的代码 .endloop 标志可重复块的末尾。 标志可重复块的末尾。
编译器处理段的过程为:每个源文件 都编泽成独立的目标文件(以后缀.obJ结 都编泽成独立的目标文件(以后缀.obJ结 尾),每个目标文件含有自己的段:连接器 把这些目标文件中相同段名的部分连接在 一起,生成最终的可执行文件(以后缀.out 一起,生成最终的可执行文件(以后缀.out 结尾) 结尾)。 段分为两大类:己初始化的段和未初 始化的段。 使用定义段的伪指令对这些段进行定 义,并把汇编语句程序的各部分与适当的 段联系起来。
7、其他伪指令
(1).end:终止汇编。它是一个程序的最后一条源 ) :终止汇编。 语句。此伪指令与文件结束符具有同样的效果。 语句。此伪指令与文件结束符具有同样的效果。 ( 2) .label: 定义一个特定的标号 , 表示当前段的 ) : 定义一个特定的标号, 装载地址。 装载地址 。 当段在一个地址处装载但在另一个地址 处运行时,该指令特别有用。 处运行时,该指令特别有用。 ( 3) .version: 告诉汇编器该代码是属于哪一种处 ) : 理器。 伪指令必须出现在指令之前, 理器。.version伪指令必须出现在指令之前,否则将 伪指令必须出现在指令之前 出错。 出错。
TMS320LF2407 伪指令和命令文件简介
一、2407中常用的伪指令简介 中常用的伪指令简介
1、定义段的伪指令 、 2、初始化常数的伪指令 、 3、调准段程序计数器的伪指令 、 4、引用其它文件的伪指令 、 5、条件汇编伪指令 、 6、汇编时符号伪指令 、 7、其他伪指令 、
1、定义段的伪指令 、
C语言程序送给编译器进行编译的时候是采 用了分段的方式,使用段可以实现模块化 编程,从而用更加灵活的方法来管理代码 和目标系统的内存空间。 这里模块化编程的意思就是说程序员可以 根据自己的愿意自由决定把哪些代码归属 到哪些段,然后加以不同的处理。比如, 把已初始化数据归属到一个段,未初始化 数据归属到一个段,而不是混杂在一起。
(4).float和.bfloat:计算单精度 位IEEE格式浮 ) 和 :计算单精度32位 格式浮 点数的值, 并存入当前段的两个连续的字中, 点数的值 , 并存入当前段的两个连续的字中 , 先 存储低字,后存储高字。 存储低字,后存储高字。 .bfloat: float前加 “ b”, 意味着保证定义的浮点 前加“ , : 前加 数不会跨越数据页的边界。 数不会跨越数据页的边界。 个或多个16位值置入当前 ( 5) .int和 .word: 将 2个或多个 位值置入当前 ) 和 : 个或多个 段的连续字中。 段的连续字中。 ( 6) .long和 .blong: 将 32位数值置入当前段连续 ) 和 : 位数值置入当前段连续 两个字中,先存放低位字。 两个字中,先存放低位字。 .blong:保证目标不会跨越数据页的边界。 :保证目标不会跨越数据页的边界。 (7).string:将8位字符从一个或多个字符串置入 ) : 位字符从一个或多个字符串置入 当前段。除了把两个字符组装入每一个字外, 类似。 与 .byte类似 。 需要时 , 字符串中最后一个字用空 类似 需要时, 字符( )填充。 字符(0)填充。
相关文档
最新文档