ARM常用的指令符号

合集下载

常用ARM指令

常用ARM指令

常用ARM指令1、内存访问指令基本指令:LDR:memory -> register (memory包括映射到内存空间的非通用寄存器)STR:register -> memory语法:op{cond }{B}{T} Rd , [Rn ]op{cond }{B} Rd , [Rn , FlexOffset ]{!} op{cond }{B} Rd , labelop{cond }{B}{T} Rd , [Rn ], F lexOffsetop:基本指令,如LDR、STRcond:条件执行后缀B:字节操作后缀T:用户指令后缀Rd:源寄存器,对于LDR指令,Rd将保存从memory 中读取的数值;对于STR指令,Rd保存着将写入memory的数值Rn:指针寄存器FlexOffset:偏移量例子:ldr r0, [r1] ;r1作为指针,该指针指向的数存入r0str r0, [r1, #4] ;r1+4作为指针,r0的值存入该地址str r0, [r1, #4]! ;同上,并且r1 = r1 + 4 ldr r1, =0x08100000 ;立即数0x08100000存到r1ldr r1, [r2], #4 ;r2+4作为指针,指向的值存入r1,并且r2=r2+4【label的使用】addr1 ;定义一个名为“addr1”的label,addr1 = 当前地址dcd 0 ;在当前地址出定义一个32bit 的变量~~~ldr r1, label1 ;r1 = addr1,r1即可以作为var1的指针ldr r0, [r1]add r0, r0, #1str r0, [r1] ;变量var1的值加1【FlexOffset的使用】FlexOffset可以是立即数,也可以是寄存器,还可以是简单的表达式2、多字节存取指令(常用于堆栈操作)基本指令:LDM:memory ――> 多个寄存器STM:多个寄存器――> memory语法:op{cond }mode Rn{!}, reglist {^}mode:指针更新模式,对应于不同类型的栈。

ARM中常用的汇编指令

ARM中常用的汇编指令

ARM 中常⽤的汇编指令1 处理器内部数据传输指令MSR & MRS⽤于在状态寄存器和通⽤寄存器之间传送数据MRS: 状态寄存器到通⽤寄存器的传送指令。

({R0-R12} <== CPSR,SPSR)MSR: 通⽤寄存器到状态寄存器的传送指令。

MRS:(CPSR,SPSR==>{R0-R12})MOVMOV 指令⽤于将数据从⼀个寄存器拷贝到另外⼀个寄存器,或者将⼀个⽴即数传递到寄存器⾥⾯,使⽤⽰例如下:2 存储器访问指令ARM 不能直接访问存储器,⽐如 RAM 中的数据,⼀般先将要配置的值写⼊到 Rx(x=0~12)寄存器中,然后借助存储器访问指令将 Rx 中的数据写⼊到寄存器中。

指令描述LDR Rd, [Rn , #offset]从存储器 Rn+offset 的位置读取数据存放到 Rd 中STR Rd, [Rn, #offset]将 Rd 中的数据写⼊到存储器中的 Rn+offset 位置LDR 指令LDR 主要⽤于从存储加载数据到寄存器 Rx 中, LDR 也可以将⼀个⽴即数加载到寄存器 Rx中, LDR 加载⽴即数的时候要使⽤“=”,⽽不是“#”。

在嵌⼊式开发中, LDR 最常⽤的就是读取 CPU 的寄存器值。

上述代码就是读取寄存器中的值,读取到的寄存器值保存在 R1 寄存器中,上⾯代码中 offset 是 0,也就是没有⽤到 offset。

STR 指令LDR 是从存储器读取数据, STR 就是将数据写⼊到存储器中LDR 和 STR 都是按照字进⾏读取和写⼊的,也就是操作的 32 位数据,如果要按照字节、半字进⾏操作的话可以在指令“LDR”后⾯加上B 或 H,⽐如按字节操作的指令就是 LDRB 和STRB,按半字操作的指令就是 LDRH 和 STRH。

MRS R0, CPSR @ 将特殊寄存器 CPSR ⾥⾯的数据传递给 R0,即R0=CPSR1MSR CPSR , R0 @ 将 R0 中的数据复制到 CPSR 中,即 CPSR =R01MOV R0, R1 @ 将寄存器 R1 中的数据传递给 R0,即 R0=R1MOV R0, #0X12 @ 将⽴即数 0X12 传递给 R0 寄存器,即 R0=0X1212LDR R0, =0X0209C004 @ 将寄存器地址 0X0209C004 加载到 R0 中,即 R0=0X0209C004LDR R1, [R0] @ 读取地址 0X0209C004 中的数据到 R1 寄存器中12LDR R0, =0X0209C004 @ 将寄存器地址 0X0209C004 加载到 R0 中,即 R0=0X0209C004LDR R1, =0X20000002 @ R1 保存要写⼊到寄存器的值,即R1=0X20000002STR R1, [R0] @ 将 R1 中的值写⼊到 R0 中所保存的地址中1233 压栈和出栈指令我们通常会在 A 函数中调⽤ B 函数,当 B 函数执⾏完以后再回到 A 函数继续执⾏。

常用ARM指令

常用ARM指令

常⽤ARM指令常⽤ARM指令1:数据处理指令 mov mvn MOV(MOVE)指令可完成从另⼀个寄存器、被移位的寄存器或将⼀个⽴即数加载到⽬的寄存器MOV R0,R1;R1的值传到R0MOV R3,#3 ;把常数3传给R3MVN( MOVE Negative)取反后再传值,⽐MOV多了⼀步取反MVN R0, #0 ;把0取反(即-1)传给R0MVN R1,R2 ;把R2的值取反传给R1 算术指令 add sub rsb adc sbc rsc ADD加法指令 ADD R0,R1,R2; R0=R1+R2 ADD R0,R1,#3 ;R0=R1+3 ADC带进位加法指令,即除了加两个数以外,还要把CPSR的C值也要带进来 通常⽤于⼤数(超过32Bit整数)相加,这时单⽤ADD不能处理,必须折成两步,其中⼀步⽤ADC. 以下是做64Bit的加法 ADDS R0,R1,R2; R0=R1+R2,ADDS中S表⽰把进位结果写⼊CPSR ADC R5,R3,R4 ;R5=R3+R4+C 逻辑指令 and orr eor bic AND位与指令 AND R0,R1,R2; R0=R1 & R2 AND R0,R1,#0xFF ;R0=R1 & 0xFF ORR位或指令 ORR R0,R1,R2; R0=R1 | R2 ORR R0,R1,#0xFF ;R0=R1 | 0xFF TST测试某⼀位是否为1,并把结果写⼊CPSR,供下⼀句使⽤ TST R1,#0xffe; 等同于if(R1 & 0xffe) TST R1,#%1;测试最低位是否为1,%表⽰⼆进制 BIC清位操作 BIC R0,R0,#0xF;等同于 R0 &=~(0xF) BIC R0,R0,#%1011;该指令清除 R0 中的位 0 1 3,其余的位保持; %表⽰是⼆进制,0x表⽰⼗六进制 ⽐较指令 cmp cmn tst teq CMP⽐较两个操作数,并把结果存⼊CPSR供下⼀句语句使⽤ CMP R0,R1; ⽐较R0,R1 乘法指令 mvl mla umull umlal smull small MUL R0,R1,R2 ;R0 = R1 × R2MULS R0,R1,R2 ;R0 = R1 × R2,同时设置CPSR中的相关条件标志位 MLA R0,R1,R2,R3 ;R0 = R1 × R2 + R3MLAS R0× R2 + R3,同时设置CPSR中的相关条件标志位 SMULL R0,R1,R2,R3 ;R0 = (R2 × R3)的低32位 ;R1 = (R2 × R3)的⾼32位 加载/存储指令 LDR,STR LDR R0,[R1]; R1的值当成地址,再从这个地址装⼊数据到R0 (R0=*R1) LDR R1,=0x30008000 ; 把地址0x30008000的值装⼊到R1中 STR R0,[R1] ; 把R0的值,存⼊到R1对应地址空间上(*R1 = R0)。

arm 汇编 指令

arm 汇编 指令

arm 汇编指令ARM汇编指令是一种用于编写ARM处理器程序的语言。

ARM处理器广泛应用于嵌入式系统和移动设备等领域。

ARM汇编指令与x86汇编指令有所不同,它基于RISC(精简指令集计算机)架构。

下面是一些基本的ARM汇编指令:1. 数据传输指令:用于在寄存器之间传输数据。

例如:- mov:将数据从一个寄存器传输到另一个寄存器。

- ldr:将数据从内存传输到寄存器。

2. 算术指令:用于执行加法、减法、乘法和除法等操作。

例如:- add:加法操作。

- sub:减法操作。

- mull:乘法操作。

- div:除法操作。

3. 逻辑指令:用于执行逻辑操作,如与、或、非等。

例如:- and:与操作。

- or:或操作。

- xor:异或操作。

4. 移位指令:用于对数据进行左移、右移或无符号右移。

例如:- lsr:无符号右移。

- asr:带符号右移。

- ror:循环右移。

5. 比较指令:用于比较两个寄存器的值。

例如:- cmp:比较两个寄存器的值,若相等则返回0,否则返回1。

6. 跳转指令:用于改变程序的执行流程。

例如:- b:条件跳转。

- bl:无条件跳转。

- bx:带状态跳转。

7. 循环指令:用于实现循环操作。

例如:- loop:内部循环。

- ldp:外部循环。

8. 调用指令:用于实现函数调用。

例如:- blx:带状态调用。

- bx:不带状态调用。

9. 系统调用指令:用于实现与操作系统交互的功能。

例如:- swi:执行系统调用。

10. 存储器访问指令:用于访问内存数据。

例如:- str:将数据存储到内存。

- ldr:从内存中加载数据。

以上仅为ARM汇编指令的一部分,实际上,ARM汇编指令还有很多其他功能。

为了更好地理解和使用ARM汇编指令,可以参考相关的教程和手册,并进行实际操作。

ARM指令集

ARM指令集

ARM指令集6种类型(53种主要助记符):数据处理指令(22种主要助记符)跳转指令(4种主要助记符)Load/Store指令(16种主要助记符)程序状态寄存器指令(2种主要助记符)协处理器指令(5种主要助记符)软件中断指令(2种主要助记符)数据处理指令数据处理指令大致可分为3类:数据传送指令;算术逻辑运算指令;乘法指令比较指令。

数据处理指令只能对寄存器的内容进行操作,而不能对内存中的数据进行操作。

所有ARM数据处理指令均可选择使用S后缀,并影响状态标志。

数据处理指令1MOV 数据传送指令格式:MOV{<cond>}{S} <Rd>,<op1>;功能:Rd=op1op1可以是寄存器、被移位的寄存器或立即数。

例如:MOV R0,#5 ;R0=5MOV R0,R1 ;R0=R1MOV R0,R1,LSL#5 ;R0=R1左移5位数据处理指令22.MVN 数据取反传送指令格式:MVN{<cond>}{S} <Rd>,<op1>;功能:将op1表示的值传送到目的寄存器Rd中,但该值在传送前被按位取反,即Rd=!op1;op1可以是寄存器、被移位的寄存器或立即数。

例如:MVN R0,#0 ;R0=-1数据处理指令33.ADD 加法指令格式:ADD{<cond>}{S} <Rd>,<Rn>,<op2>;功能:Rd=Rn+op2op2可以是寄存器,被移位的寄存器或立即数。

例如:ADD R0,R1,#5 ;R0=R1+5ADD R0,R1,R2 ;R0=R1+R2ADD R0,R1,R2,LSL#5 ;R0=R1+R2左移5位数据处理指令44.ADC 带进位加法指令格式:ADC{<cond>}{S} <Rd>,<Rn>,<op2>;功能:Rd=Rn+op2+carryop2可以是寄存器、被移位的寄存器或立即数;carry为进位标志值。

常用的ARM汇编指令

常用的ARM汇编指令

常⽤的ARM汇编指令转⾃:https:///zb861359/article/details/81027021?utm_source=app1、 IMPORT和EXPORTIMPORT ,定义表⽰这是⼀个外部变量的标号,不是在本程序定义的EXPORT ,表⽰本程序⾥⾯⽤到的变量提供给其他模块调⽤的。

以上两个在汇编和C语⾔混合编程的时候⽤到。

2、AREA语法格式:AREA 段名属性1 ,属性2 ,……AREA伪指令⽤于定义⼀个代码段或数据段。

其中,段名若以数字开头,则该段名需⽤“|”括起来,如:|1_test|。

属性字段表⽰该代码段(或数据段)的相关属性,多个属性⽤逗号分隔。

常⽤的属性如下:— CODE 属性:⽤于定义代码段,默认为READONLY 。

— DATA 属性:⽤于定义数据段,默认为READWRITE 。

— READONLY 属性:指定本段为只读,代码段默认为READONLY 。

— READWRITE 属性:指定本段为可读可写,数据段的默认属性为READWRITE 。

— ALIGN 属性:使⽤⽅式为ALIGN表达式。

在默认时,ELF(可执⾏连接⽂件)的代码段和数据段是按字对齐的,表达式的取值范围为0~31,相应的对齐⽅式为2表达式次⽅。

— COMMON 属性:该属性定义⼀个通⽤的段,不包含任何的⽤户代码和数据。

各源⽂件中同名的COMMON段共享同⼀段存储单元。

⼀个汇编语⾔程序⾄少要包含⼀个段,当程序太长时,也可以将程序分为多个代码段和数据段。

使⽤⽰例:AREA Init ,CODE ,READONLY ; 该伪指令定义了⼀个代码段,段名为Init ,属性为只读。

3、LDR、LDRB、LDRHARM微处理器⽀持加载/存储指令⽤于在寄存器和存储器之间传送数据,加载指令⽤于将存储器中的数据传送到寄存器,存储指令则完成相反的操作。

常⽤的加载存储指令如下:— LDR 字数据加载指令— LDRB 字节数据加载指令— LDRH 半字数据加载指令1) LDR指令有两种⽤法:a、ldr加载指令LDR指令的格式为:LDR{条件} ⽬的寄存器,<存储器地址>LDR指令⽤亍从存储器中将⼀个32位的字数据传送到⽬的寄存器中。

实用ARM指令全

实用ARM指令全

在讲指令之前,先简单地介绍一下Cortex-M3 中支持的算术与逻辑标志。

本书在后面还会展开论述。

它们是:APSR 中的5 个标志位4.2.1 分类指令表表4.2 16位数据操作指令表4.3 16位转移指令IT If-Then表4.4 16位存储器数据传送指令16 数据传送指令没有任何新内容,因为它们是Thumb 指令,在v4T 时就已经定格了——译注表4.5 其它16位指令表4.6 32位数据操作指令UXTH 半字被无符号扩展到32 位(高16 位清0——译注)表4.7 32位存储器数据传送指令表4.8 32位转移指令表4.9 其它32位指令4.2.2 未支持的指令有若干条Thumb 指令没有得到Cortex-M3 的支持,下表列出了未被支持的指令,以及不支持的原因。

表4.10 因为不再是传统的架构,导致有些指令已失去意义未支持的指令以前的功能BLX #im 在使用立即数做操作数时,BLX 总是要切入ARM 状态。

因为Cortex-M3 只在Thumb 态下运行,故以此指令为代表的,凡是试图切入ARM 态的操作,都将引发一个用法fault。

SETEND由ARMv6 引入的,在运行时改变处理器端设置的指令(大端或小端)。

因为Cortex-M3 不支持动态端的功能,所以此指令也将引发faultCM3 也不支持有少量在ARMv7-M 中列出的指令。

比如,ARMv7M 支持Thumb2 的协处理器指令,但是CM3 却不能挂协处理器。

表4.11 列出了这些与协处理器相关的指令。

如果试图执行它们,则将引发用法fault(NVIC 中的NOCP (No CoProcessor)标志置位)。

表4.11 不支持的协处理器相关指令未支持的指令以前的功能MCR 把通用寄存器的值传送到协处理器的寄存器中MCR2把通用寄存器的值传送到协处理器的寄存器中MCRR 把通用寄存器的值传送到协处理器的寄存器中,一次操作两个MRC把协处理器寄存器的值传送到通用寄存器中MRC2 把协处理器寄存器的值传送到通用寄存器中MRRC把协处理器寄存器的值传送到通用寄存器中,一次操作两个LDC 把某个连续地址空间中的一串数值传送至协处理器中STC从协处理器中传送一串数值到地址连续的一段地址空间中还有一个是改变处理器状态指令(CPS),它的一些用法也不再支持。

ARM指令大全

ARM指令大全

ARM指令集详解ARM可以用两套指令集:ARM指令集和Thumb指令集。

本文介绍ARM指令集。

在介绍ARM指令集之前,先介绍指令的格式。

1 指令格式(1)基本格式<opcode>{<cond>}{S} <Rd>,<Rn>{,<opcode2>}其中,<>内的项是必须的,{}内的项是可选的,如<opcode>是指令助记符,是必须的,而{<cond>}为指令执行条件,是可选的,如果不写则使用默认条件AL(无条件执行)。

opcode 指令助记符,如LDR,STR 等cond 执行条件,如EQ,NE 等S 是否影响CPSR 寄存器的值,书写时影响CPSR,否则不影响Rd 目标寄存器Rn 第一个操作数的寄存器operand2 第二个操作数指令格式举例如下:LDR R0,[R1] ;读取R1 地址上的存储器单元内容,执行条件ALBEQ DATAEVEN ;跳转指令,执行条件EQ,即相等跳转到DATAEVENADDS R1,R1,#1 ;加法指令,R1+1=R1 影响CPSR 寄存器,带有SSUBNES R1,R1,#0xD;条件执行减法运算(NE),R1-0xD=>R1,影响CPSR 寄存器,带有S(2)第2个操作数在ARM 指令中,灵活的使用第2个操作数能提高代码效率,第2个操作数的形式如下:#immed_8r常数表达式,该常数必须对应8 位位图,即常数是由一个8 位的常数循环移位偶数位得到。

合法常量0x3FC、0、0xF0000000、200、0xF0000001等都是合法常量。

非法常量0x1FE、511、0xFFFF、0x1010、0xF0000010等都是非法常量。

常数表达式应用举例如下:MOV R0,#1 ;R0=1AND R1,R2,#0x0F ;R2 与0x0F,结果保存在R1LDR R0,[R1],#-4 ;读取R1 地址上的存储器单元内容,且R1=R1-4Rm寄存器方式,在寄存器方式下操作数即为寄存器的数值。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ARM常用的指令符号特殊符号对应指令含义= DCB 分配一片连续的字节存储单元并用指定的数据初始化& DCD 分配一片连续的字存储单元并用指定的数据初始化% SPACE 分配一片连续的存储单元^ MAP 定义一个结构化内存表的首地址# FILED 定义一个结构化内存表的数据域(经常和MAP一使 用,一个定义起始地址,一个定义长度)* EQU 为程序中的常量、标号等定义一个等效的字符名称,! 地址更新,结果写回到Rn中,Rn不允许是R15[ | ] 相当于IF ELSE ENDIF其他:LDM中{∧}为可选后缀,当指令为LDM且寄存器列表中包含R15,选用该后缀时表示:除了正常的数据传送之外,还将SPSR复制到CPSR。

同时,该后缀还表示传入或传出的是用户模式下的寄存器,而不是当前模式下的寄存器。

TST R1,#%1 // 用于测试在寄存器R1中是否设置了最低位(%表示二进制数)$:如果在串变量前有一个$则在汇编时编译器将用该串变量的数值取代该串变量,如: GBLS STR1GBLS STR2STR1 SETS “pen.”STR2 SETS “This is a $STR1"编译后的结果是STR2的值为This is a pen.如果$后是数字变量(与串变量区分),在汇编时编译器将该数字变量的数值转换成十六进制的串,然后用该十六进制的串取代$后的数字变量。

如果$后是逻辑变量,在汇编时编译器将该逻辑变量替换成它的取值(T或者F)。

如果程序中需要$,则用$$来表示,编译器将不进行变量替换。

注意:在两个竖线“|”之间的$并不表示进行变量替换,但如果“|”是在双引号内,则将进行变量替换。

B . //表示程序进入死循环。

'.'为location counter,可在源文件中指示当前地址。

该符号可以被引用或赋值。

ARM汇编程序中的符号在ARM汇编语言中,符号(symbols)可以代表地址(addresse)、变量(variables)和数字常量(numeric constants)。

当符号代表地址时,又称为标号(lable)。

当标号以数字开头时,其作用范围为当前段(当前段没有使用ROUT伪操作时),这种标号又称为局部标号(lacal lable)。

符号变量包括变量、数字常量、标号和局部标号。

1、变量在程序中,变量的值在汇编处理过程中可能会发生改变。

在ARM汇编中变量有数字变量、逻辑变量和串变量3种类型。

变量的类型在程序中是不可以改变的。

数字变量的取值范围为数字常量和数字表达式所能表示的数值;逻辑变量的取值范围为{true}和{flash};串变量的取值范围为串表达式可以表达的范围。

在ARM汇编语言中,使用GBLA、GBLL及GBLS声明全局变量;使用LCLA、LCLL及LCLS声明局部变量;使用SETA、SETL及SETS为这些变量赋值。

2、数字常量数字常量是32位的整数。

在ARM汇编语言中,使用EQU来定义数字常量。

数字常量一经定义就不可修改。

进行大小比较时,认为数字常量都是无符号数。

3、汇编时变量的替换如果在串变量前有一个$字符,在汇编时编译器将用改串的数值来取代该串变量。

对于数字变量来说,如果该变量前面有一个$字符,在汇编时编译器将该数字变量的数值转换成十六进制的串,然后用该十六进制的串取代$字符后的数字变量。

对于逻辑变量来说,如果该逻辑变量前面有一个$字符,在汇编时编译器将该逻辑变量替换成它的取值(T或者F)如果程序中需要字符$,则用$$来表示,编译器将不进行变量替换,而是将$$当作$.通常情况下,包含在两个竖线(|)之间的$并不表示进行变量替换。

但是如果竖线(|)是在双引号内,则将进行变量替换。

使用“.”来表示变量名称的结束。

4、标号标号是表示程序中的指令或者数据地址的符号。

根据标号的生成方式可分为3种:基于PC的标号。

基于PC的标号是位于目标指令前或者程序中数据定义伪操作前的标号。

这种标号在汇编时将被处理成PC值加上(或减去)一个数字常量。

常用于表示跳转指令的目标地址,或者代码段中所嵌入的少量数据。

基于寄存器的标号。

基于寄存器的标号常用MAP和FIELD未定义操作,也可以该用EQU伪定义。

这种标号在汇编时将被处理成寄存器的值加上(或减去)一个数据常量。

常用于访问数据段中的数据。

绝对地址。

绝对地址是一个32位数据。

它可以寻址2^32 -1,即直接可以寻址整个内存空间。

5、局部标号局部标号主要在局部范围内使用。

它由两部组成:开头是一个0-99直接的数字,后面紧接一个通常表示该局部变量作用范围的符号。

局部变量的作用范围通常为当前段,也可以用伪操作ROUT来定义局部变量的作用范围。

局部变量定义的语法格式如下:N{routname},其中,N为0~99之间的数字。

routname为符号,通常为该变量作用范围的名称(用ROUT伪操作定义的)。

局部变量引用的语法格式如下:%{F|B}{A|T}N{routname}其中,N为局部变量的数字号。

routname 为当前作用范围的名称(用ROUT伪操作定义的)%表示引用操作F指示编译器只向前搜索B指示编译器只向后搜索A指示编译器搜索宏的所有嵌套层次T指示编译器搜索宏的当前层次如果F和B都没有指定,编译器先向前搜索,再向后搜索如果A和T都没有指定,编译器搜索所有从当前层次到宏的最高层次,比当前层次低的层次不再搜索。

如果指定了routname,编译器向前搜索最近的ROUT伪操作,若routname与该ROUT伪操作定义的名称不匹配,编译器报告错误,汇编失败。

ARM汇编语言中的表达式表达式是由符号、数值、单目或多目操作符以及括号组成的。

1、字符串表达式字符串表达式由字符串、字符串变量、操作符以及括号组成。

字符串的最大长度为512字节,最小长度为0.下面介绍字符串表达式的组成元素。

字符串:由包含在双引号内的一系列的字符组成。

字符串的长度受到ARM汇编语言语句长度的限制。

当在字符串中包含美元符号$或者引号"时,用$$表示一个$,用""表示一个"。

字符串变量:用伪操作GBLS或者LCLS声明,用SETS赋值。

操作符:(1)LEN:返回字符串的长度:LEN:A其中,A为字符串变量(2)CHR:可以将0~255之间的整数作为含一个ASCII字符的字符串。

当有些ASCII字符不方便放在字符串中时,可以使用CHR将其放在字符串表达式中。

:CHR:A其中,A为某一字符的ASCII值(3)STR:将一个数字量或者逻辑表达式转换成串。

对于32位的数字量而言,STR将其转换成8个十六进制数组成的串;对于逻辑表达式而言,STR将其转换成字符串T或者F:STR:A其中,A为数字量或者逻辑表达式(4)LEFT:返回一个字符串最左端一定长度的子串A:LEFT:B其中,A为源字符串,B为数字量,表示LEFT将返回的字符个数(5)RIGHT:返回一个字符串最右端一定长度的子串A:RIGHT:B其中,A为源字符串,B为数字量,表示RIGHT将返回的字符个数(6)CC:用于连接两个字符串。

A:CC:B其中,A为第1个源字符串。

B为第2个源字符串。

CC操作符将字符串B连接在字符串A的后面。

2、数字表达式数字表达式由数字常量、数字变量、操作符和括号组成数字变量用伪操作GBLA或者LCLA声明,用SETA赋值,它代表一个32位的数字量。

操作符:(1)NOT:按位取反:NOT:A其中,A为一个32位数字量(2)+、—、×、/及MOD算术操作符A+B,A-B,A×B,A/BA:MOD:B表示A除以B的余数(3)ROL,ROR,SHL,SHR移位A:ROL:B将整数A循环左移B位A:SHL:B将整数A左移B位(4)AND、OR及EOR按位逻辑操作符A:AND:B将数字表达式A和B按位作逻辑与操作3、基于寄存器和基于PC的表达式基于寄存器的表达式表示了某个寄存器的值加上(或者减去)一个数字表达式基于PC的表达式表示了PC寄存器的值加上(或减去)一个数字表达式。

基于PC的表达式通常由程序中的标号与一个数字表达式组成。

相关的操作符:(1)BASE:返回基于寄存器的表达式中的寄存器编号。

:BASE:A A为基于寄存器的表达式(2)INDEX:返回基于寄存器的表达式相对于其基址寄存器的偏移量。

:INDEX:A A为基于寄存器的表达式(3)+、﹣:正负号,可以放在数字表达式或者基于PC的表达式前面。

+A(﹣A) A为基于PC的表达式或者数字表达式4、逻辑表达式由逻辑量、逻辑操作符、关系操作符以及括号组成,取值范围为{FLASE}和{TRUE}关系操作符:用于表示两个同类表达式之间的关系。

关系操作符和它的两个操作数组成一个逻辑表达式,其取值为{FALSE}或{TRUE}如A=B 表示A等于BA/=B,A<>B表示A不等于B逻辑操作符:进行两个逻辑表达式之间的基本逻辑操作。

操作的结果为{FLASE}或{TRUE} :LNOT:A 逻辑表达式A的值取反A:LAND:B逻辑表达式A和B逻辑与5、其他的一些操作符(1)?:返回定义符号A的代码行所生成的可执行代码的字节数?A其中,A为一个符号(2)DEF:判断某个符号是否已定义:DEF:A如果符号A已经定义,上述结果为{TRUE},否则为{FLASE}(3)SB_OFFSET_19_12:SB_OFFSET_19_12:label 其中,label为一个标号返回(label-SB)的bits[19:12](4)SB_OFFSET_11_0:SB_OFFSET_11_0:label。

相关文档
最新文档