当前位置:文档之家› 常用ARM指令

常用ARM指令

常用ARM指令
常用ARM指令

常用ARM指令及汇编包括

1、ARM处理器寻址方式

2、指令集介绍

3、伪指令

4、ARM汇编程序设计

5、C与汇编混合编程

ARM处理器寻址方式

1、寄存器寻址:操作数的值在寄存器中,指令中的地址码字段指出的是寄存器编号,指令执行时直接取出寄存器值操作

MOV R1, R2 ;R2->R1

SUB R0, R1,R2 ;R1-R2 -> R0

2、立即寻址:立即寻址指令中的操作码字段后面的地址码部分就是操作数本身,也就是说,数据就包含在指令当中,取出指令就取出了可以立即使用的操作数

SUBS R0,R0,#1 ;R0-1 -> R0

MOV R0,#0xff00 ;0xff00 -> R0

注:立即数要以"#"为前缀,表示16进制数值时以"0x"表示

3、寄存器偏移寻址:是ARM指令集特有的寻址方式,当第2操作数是寄存器偏移方式时,第2个寄存器操作数在与第1个操作数结合之前选择进行移位操作

MOV R0,R2,LSL #3 ;R2的值左移3位,结果存入R0,即R0 = R2 * 8

ANDS R1,R1,R2,LSL R3 ;R2的值左移R3位,然后和R1相与操作,结果放入R1

寄存器偏移寻址可采用的移位操作如下

(1)、LSL(Logical Shift Left)逻辑左移,寄存器中字的低端空出补0

(2)、LSR(Logical Shift Right)逻辑右移,寄存器中字的高端空出补0

(3)、ASR(Arthmetic Shift Right)算术右移,移位中保持符号位不变,即如果源操作数为正数,字高端空出补0,否则补1

(4)、ROR(Rotate Right)循环右移,由字的低端移出的位填入高端空出的位

(5)、RRX(Rotate Right eXtended by 1 place),操作数右移一位,左侧空位由CPSR的C 填充

4、寄存器间接寻址:寄存器间接寻址指令中的地址码给出的是一个通用寄存器的编号,所需要的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作数的地址指针

LDR R1,[R2] ;将R2中的数值作为地址,取出此地址中的数据保存在R1中

SWP R1,R1,[R2] ;将R2中的数值作为地址,取出此地址中的数值与R1中的值交换

5、基址寻址:将基址寄存器的内容与指令中给出的偏移量相加,形成操作数的有效地址,基址寻址用于访问基址附近的存储单元,常用于查表,数组操作,功能部件寄存器访问等。LDR R2,[R3,#0x0F] ;将R3的数值加0x0F作为地址,取出此地址的数值保存在R2中STR R1,[R0,#-2] ;将R0中的数值减2作为地址,把R1中的内容保存到此地址位置

6、多寄存器寻址:一次可以传送几个寄存器值,允许一条指令传送16个寄存器的任何子集或所有寄存器

LDMIA R1!,{R2-R7,R12} ;将R1所指向的地址的数据读出到R2-R7,R12,R1自动更新STMIA R0!,{R3-R6,R10} ;将R3-R6,R10中的数值保存到R0指向的地址,R0自动更新

7、堆栈寻址:堆栈是特定顺序进行存取的存储区,堆栈寻址时隐含的使用一个专门的寄存器(堆栈指针),指向一块存储区域(堆栈),存储器堆栈可分为两种:

向上生长:向高地址方向生长,称为递增堆栈

向下生长:向低地址方向生长,称为递减堆栈

如此可结合出四中情况:

1、满递增:堆栈通过增大存储器的地址向上增长,堆栈指针指向内含有效数据项的最高地址,指令如 LDMFA,STMFA

2、空递增:堆栈通过增大存储器的地址向上增长,堆栈指针指向堆栈上的第一个空位置,指令如 LDMEA,STMEA

3、满递减:堆栈通过减小存储器的地址向下增长,堆栈指针指向内含有效数据项的最低地址,指令如 LDMFD,STMFD

4、空递减:堆栈通过减小存储器的地址向下增长,堆栈指针指向堆栈下的第一个空位置,指令如 LDMED,STMED

STMFD SP!,{R1-R7,LR} ;将R1-R7,LR入栈,满递减堆栈

LDMFD SP!,{R1-R7,LR} ;数据出栈,放入R1-R7,LR寄存器,满递减堆栈

8、块拷贝寻址:多寄存器传送指令用于一块数据从存储器的某一位置拷贝到另一位置STMIA R0!,{R1-R7} ;将R1-R7的数据保存到存储器中,存储器指针在保存第一个值之后增加,方向为向上增长

STMIB R0!,{R1-R7} ;将R1-R7的数据保存到存储器中,存储器指针在保存第一个值之

前增加,方向为向上增长

SIMDA R0!,{R1-R7} ;将R1-R7的数据保存到存储器中,存储器指针在保存第一个值之后增加,方向为向下增长

STMDB R0!,{R1-R7} ;将R1-R7的数据保存到存储器中,存储器指针在保存第一个值之前增加,方向为向下增长

不论是向上还是向下递增,存储时高编号的寄存器放在高地址的内存,出来时,高地址的内容给编号高的寄存器

9、相对寻址:是基址寻址的一种变通,由程序计数器PC提供基准地址,指令中的地址码字段作为偏移量,两者相加后得到的地址即为操作数的有效地址

BL ROUTE1 ;调用到 ROUTE1 子程序

BEQ LOOP ;条件跳转到 LOOP 标号处

=================================================================== =============================================

指令集介绍

指令格式: {}{S},,{}

其中<>内的项是必须的,{}内的项是可选的

opcode 指令助记符,如LDR,STR等

cond 执行条件,如EQ,NE等

S 是否影响CPSR寄存器的值,书写时影响CPSR,否则不影响

Rd 目标寄存器

Rn 第一个操作数的寄存器

operand2 第二个操作数

指令格式举例如下:

LDR R0,[R1] ;读取R1地址上的存储器单元内容,执行条件AL(无条件执行)

BEQ DATAEVEN ;跳转指令,执行条件EQ,即相等跳转到DATAEVEN

ADDS R1,R1,#1 ;加法指令,R1+1 => R1 影响CPSR寄存器,带有S

SUBNES R1,R1,#0xD ;条件执行减法运算(NE),R1-0xD => R1,影响CPSR寄存器,带有S

条件码表

条件码应用举例:

1、比较两个值大小,C代码如下:

if(a>b) a++;

else b++;

写出相应的ARM指令

代码如下:设R0为a,R1为b

CMP R0, R1 ; R0与R1比较

ADDHI R0,R0,#1 ; 若R0>R1,则R0=R0+1

ADDLS R1,R1,#1 ; 若R0<=R1,则R1=R1+1

2、若两个条件均成立,则将这两个数值相加

C代码为: if((a!=10)&&(b!=20)) a=a+b;

对应的ARM指令为:

CMP R0,#10 ;比较R0是否为10

CMPNE R1,#20 ;若R0不为10,则比较R1是否为20

ADDNE R0,R0,R1; 若R0不为10且R1不为20,则执行 R0 = R0+R1

3、若两个条件有一个成立,则将这两个数值相加

C代码为:if((a!=10)||(b!=20)) a=a+b;

对应的ARM指令为:

CMP R0,#10

CMPEQ R1,#20

ADDNE R0,R0,R1

ARM存储访问指令:

LDR、STR、LDM、STM、SWP

LDR/STR:加载/存储字和无符号字节指令

从寻址方式的地址计算方法分,加载/存储指令有以下4种形式:

1,零偏移:LDR Rd,[Rn]

2,前索引偏移: LDR Rd,[Rn,#0x04]!,LDR Rd,[Rn,#-0x04] Rn不允许为R15

3,程序相对偏移:LDR Rd,label,label为程序标号,该形式不能使用后缀!

4,后索引偏移: LDR Rd,[Rn],#0x04,Rn不允许是R15

指令举例如下:

LDR R2,[R5] ;加载R5指定地址上的数据(字),放入R2中

STR R1,[R0,#0x04] ;将R1的数据存储到 R0+0x04存储单元,R0的值不变(若有!,则R0就要更新)

LDRB R3,[R2],#1 ;读取R2地址上的一字节数据并保存到R3中,R2=R2+1

STRH R1,[R0,#2]! ;将R1的数据保存到R0+2的地址中,只存储低2字节数据,R0 =R0+2

LDM和STM是批量加载/存储指令,LDM为加载多个寄存器,STM为存储多个寄存器,主要用途是现场保护,数据复制、参数传递等,其模式有8种,前4种用于数据块的传输,后4种用于堆栈操作

IA:每次传送后地址加4

IB:每次传动前地址加4

DA:每次传送后地址减4

DB:每次传送前地址减4

FD:满递减堆栈

ED:空递增堆栈

FA:满递增堆栈

EA:空递增堆栈

批量加载/存储指令举例如下:

LDMIA R0!,{R3-R9} ;加载R0指向的地址上的多字数据,保存到R3-R9中,R0值更新STMIA R1!,{R3-49} ;将R3-R9的数据存储到R1指向的地址上,R1值更新

STMFD SP!,{R0-R7,LR} ; 现场保存,将R0~R7、LR入栈

LDMFD SP!,{R0-R7,PC}^ ;恢复现场,异常处理返回

使用LDM/STM进行数据复制

LDR R0,=SrcData ;设置源数据地址,LDR此时作为伪指令加载地址要加 =

LDR R1,=DstData ;设置目标地址

LDMIA R0,{R2-R9} ;加载8字数据到寄存器R2 ~ R9

STMIA R1,{R2-R9} ;存储寄存器R2-R9到目标地址上

使用LDM/STM进行现场保护,常用在子程序或异常处理中

STMFD SP!,{R0-R7,LR} ;寄存器入栈

.....

BL DELAY ;调用DELAY子程序

.....

LDMFD SP!,{R0-R7,PC} ;恢复寄存器,并返回

SWP是寄存器和存储器交换指令,可使用SWP实现信号量操作

12C_SEM EQU 0x40003000 ;EQU定义一个常量

12C_SEM_WAIT ;标签

MOV R1,#0

LDR R0,=12C_SEM

SWP R1,R1,[R0] ;取出信号量,并设置为0

CMP R1,#0 ;判断是否有信号

BEQ 12C_SEM_WAIT ;若没有信号,则等待

ARM数据处理指令包括

1、数据传送指令

2、算术逻辑运算指令

3、比较指令

4、乘法指令

ADC指令:带进位加法指令,将操作数2的数据与Rn的值相加,再加上CPSR中C条件标志位,结果保存到Rd中

使用ADC指令实现64位加法

ADDS R0,R0,R2 ; R0+R2 => R0,影响CPSR中的值

ADC R1,R1,R3 ;(R1、R0) = (R1、R0)+(R3、R2)

SBC指令:带借位减法指令,用寄存器Rn减去操作数2,再减去CPSR中的C条件标志位的非(即若C标志清零,则结果减去1),结果保存在Rd中

使用SBC实现64位减法

SUBS R0,R0,R2

SBC R1,R1,R3 ;使用SBC实现64位减法,(R1,R0) - (R3,R2)

AND指令:按位与操作

ANDS R0,R0,#0x01 ;取出最低位数据

ORR指令:按位或操作

ORR R0,R0,#0x0F ;将R0的低4位置1

EOR指令是进行异或操作,BIC指令是位清除指令(遇1清0)

TST:位测试指令

TST R0,#0x01 ; 判断R0的最低位是否是为0

TEQ:相等测试指令

TEQ R0,R1 ; 比较R0与R1是否相等,也可看作相减,相等则为0,Z=1

MUL指令:乘法指令

MUL R1,R2,R3 ; R1=R2*R3

MULS R0,R3,R7 ; R0=R3*R7,同时设置CPSR中的N位和Z位

MLA是乘加指令,将操作数1和操作数2相乘再加上第3个操作数,结果的低32位存入到Rd中

UMULL是64位无符号乘法指令

UMULL R0,R1,R5,R8 ; (R1、R0) = R5 * R8

BL指令:带链接的跳转指令,指令将下一条指令拷贝到R14(即LR)链接寄存器中,然后跳转到指定地址运行

BL指令用于子程序调用,例如:BL DELAY

BX指令:带状态切换的跳转指令,例如 BX R0 ;跳转到R0指定的地址,并根据R0的最低位来切换处理器的状态

MCR:ARM寄存器到协处理器寄存器的数据传送指令

MRC:协处理器寄存器到ARM寄存器的数据传送指令

MRC/MCR指令格式如下:

MRC/MCR {cond} coproc,opcode1,Rd,CRn,CRm{,opcode2}

coproc是指令操作的协处理器名,标准名为pn,n为0-15

opcode1 协处理器的特定操作码

Rd MRC操作时,作为目标寄存器的协处理器寄存器,MCR操作时,作为ARM处理器的寄存器

CRn 存放第1个操作数的协处理器寄存器

CRm 存放第2个操作数的协处理器寄存器

opcode2 可选的协处理器特定操作码

MRC/MCR指令举例如下:

mcr/mrc p15,0,r0,c1,c0,0

SWI指令:SWI指令用于产生中断,从而实现用户模式变换到管理模式,CPSR保存到管理模式的SPSR中,执行转移到SWI向量

SWI 0x123456 ;软中断,中断立即数 0x123456

在SWI异常中断处理程序中,取出SWI立即数的步骤为:首先确定引起软中断的SWI指令是ARM指令还是THUMB指令,这可通过对SPSR访问得到,然后要取得该SWI指令的地址,这可通过访问LR寄存器得到,接着读出指令,分解出立即数

程序代码如下:

T_bit EQU 0x20 ;0010 0000

SWI_Hander

STMFD SP!,{R0-R3,R12,LR} ;现场保护

MRS R0,SPSR ;读取SPSR

STMFD SP!,{R0} ;保存SPSR

TST R0, #T_bit ;测试T标志位,0为ARM,1为THUMB

LDRNEH R0,[LR,#-2] ;若是THUMB指令,读出产生中断的指令码(16位)

BICNE R0,R0,#0xFF00 ;取得THUMB指令的8位立即数

LDREQ R0,[LR,#-4] ;若是ARM指令,读取产生中断的指令码(32位)

BICEQ R0,R0,#0xFF000000 ;取得ARM指令的24位立即数

BL C_SWI_Handler

LDMFD SP!,{R0-R3,R12,PC}^ ;SWI异常中断返回

MRS指令:读状态寄存器指令,在ARM处理器中,只有MRS指令可以从状态寄存器CPSR或SPSR读出到通用寄存器

MRS R1,CPSR ;将CPSR状态寄存器读取,保存到R1

MRS R2,SPSR ;将SPSR状态寄存器读取,保存到R2

MRS应用:

1、使能IRQ中断

ENABLE_IRQ

MRS R0,CPSR

BIC R0,R0,#0x80 ;1000 0000

MSR CPSR,R0

MOV PC,LR

2、禁止IRQ中断

DISABLE_IRQ

MRS R0,CPSR

ORR R0,R0,#0x80

MSR CPSR,R0

MOV PC,LR

MSR:写状态寄存器指令,在ARM处理器中,只有MSR指令可以直接设置状态寄存器CPSR 或SPSR

=================================================================== =============================================

ARM伪指令介绍

ARM伪指令不是ARM指令集中的指令,只是为了编程方便编译器定义了伪指令

ARM地址读取伪指令有四条,分别是

ADR 伪指令

ADRL 伪指令

LDR 伪指令

NOP 伪指令

作用的范围不一样,由小到大: ADR,ADRL,LDR

ADR、ADRL指令将基于PC相对偏移的地址读取到存储器中,例如

ADR R0 , DISP_TAB ; 加载转换表地址

LDR R1, [R0,R2] ;使用R2作为参数,进行查表

.....

DISP_TAB

DCB

0xc0,0xf9,0xa4,0x99,0x92,0x82,0xf8,0x80

LDR伪指令用于加载32位的立即数或一个地址值到指定寄存器,前加 =

LDR R0,=0x123456 ;加载32位立即数0x123456

LDR R0,=DATA_BUF+60 ;加载DATA_BUF地址+60

NOP是空操作伪指令

宏是一段独立的程序代码,它是通过伪指令定义的,在程序中使用宏指令即可调用宏,当程序被汇编时,汇编程序将对每个调用进行展开,用宏定义取代源程序中的宏指令

符号定义伪指令

1、全局变量声明:GBLA、GBLL 和 GBLS

2、局部变量声明:LCLA、LCLL 和 LCLS

3、变量赋值:SETA、SETL、和 SETS

4、为一个通用寄存器列表定义名称:RLIST

5、为一个协处理器的寄存器定义名称:CN

6、为一个协处理器定义名称:CP

最后一个字符 A代表算术变量,初始值为0,L代表逻辑变量,初值为FALSE,S代表字符串,初值为空

伪指令应用举例如下:

MACRO ;声明一个宏

SENDDAT $dat ;宏的原型 $表示后面是变量

LCLA bitno ;声明一个局部算术变量

...

bitno SETA 8 ;设置变量值为8

...

MEND ;结束

RLIST指令格式:

name RLIST {reglist},例如: LoReg RLIST {R0-R7} ;定义寄存器列表LoReg

CN指令的用法:

name CN expr,其中name是要定义的协处理器的寄存器名称,expr对应的协处理器的寄存器编号,数值范围 0 ~ 15

MemSet CN 1 ;将协处理器的寄存器1名称定义为 MemSet

CP指令的用法,举例如下:

DivRun CP 5 ;将协处理器5名称定义为DivRun

数据定义伪指令:

1、声明一个文字池:LTORG

2、定义一个结构化的内存表的首地址:MAP 或 ^

3、定义结构化内存表中的一个数据域:FIELD 或 #

4、分配一块内存空间,并用0初始化: SPACE 或 %

5、分配一段字节内存单元,并用指定的数据初始化: DCB

6、分配一段字的内存单元,并用指令的数据初始化: DCD 和 DCDU

7、分配一段双字的内存单元,并用64位整数数据初始化: DCQ 和 DCQU

8、分配一段半字的内存单元,并用指定的数据初始化: DCW 和 DCWU

LTORG 用于声明一个文子池,在使用LDR伪指令时,要在适当的地址加入LTORG声明文子池,这样就会把要加载的数据保存在文子池内,再用ARM的加载指令读出数据(若没有使用LTORG

声明文子池,则汇编器会在程序末尾自动声明)

LTORG伪指令应用举例如下:

...

LDR R0,=0x12345678

ADD R1,R1,R0

MOV PC,LR

LTORG ;声明文子池

DCD 0x333

DCD 0x555

MAP 用于定义一个结构化的内存表的首地址,^与MAP同义

MAP 0x00, R9 ;定义内存表的首地址为R9

FIELD 用于定义一个结构化内存表的数据域,#与FIELD同义

^ _ISR_STARTADDRESS ; ^ is synonym for MAP

HandleReset # 4 ; 定义数据域 HandleReset,长度为4字节

SPACE用于分配一块内存单元,并用0初始化,%与SPACE同义

伪指令应用举例如下:

AREA DataRAM,DATA,READWROTE ;声明一数据段,名为DataRAM

DataBuf SPACE 1000 ;分配1000字节空间

DCB伪指令格式:

{label} DCB expr{,expr} ...

加{}的代表可有可无,DCD、DCW指令格式与DCB基本相同

ASSERT为断言错误伪指令,在汇编编译器对汇编程序的第二遍扫描中,若其中ASSERT条件不成立,ASSERT伪指令将报告该错误信息

ASSERT Top<>Temp ;断言Top 不等于 Temp

ASSERT :DEF:ENDIAN_CHANGE

汇编控制伪指令

1、条件汇编控制:IF、ELSE 和 ENDIF

IF、ELSE 和 ENDIF 伪指令能够根据条件把一段代码包括在汇编程序内或将其排除在程序之外

[ 与 IF同义,| 与 ELSE 同义, ] 与 ENDIF 同义

伪指令应用举例如下:

[ {CONFIG} = 16 ; [ 代表 IF

BL __rt_udiv_1

| ; | 代表 ELSE

BL __rt_div0

] ; ] 代表 ENDIF

2、MACRO 和 MEND

MACRO 和 MEND 伪指令用于宏定义,MACRO表示宏定义的开始,MEND表示宏定义的结束,用MACRO和MEND定义的一段代码,称为宏定义体,伪指令应用如下:

MACRO

CSI_SETB ;宏名为CSI_SETB,无参数

LDR R0,=rPDATG ;读取GPG0 口的值

LDR R1,[R0]

ORR R1,R1,#0x01 ;CSI置位操作

STR R1,[R0] ;输出控制

MEND

3、WHILE 和 WEND

WHILE 和 WEND 伪指令用于根据条件重复编相同的或几乎相同的一段源程序

伪指令应用举例

WHILE no< 5

no SETA no+1

...

WEND

杂项伪指令:在汇编程序设计较为常用,如段定义伪指令,入口点设置伪指令,包含文件伪

指令,标号导出或引入声明

1、边界对齐:ALIGN

2、段定义: AREA

3、指令集定义:CODE16 和 CODE32

4、汇编结束: END

5、程序入口: ENTRY

6、常量定义:EQU

7、声明一个符号可以被其它文件引用:EXPORT 和 GLOBAL

8、声明一个外部符号:IMPORT 和 EXTERN

9、包含文件: GET 和 INCLUDE

10、给特定的寄存器命名: RN

ARM伪指令详述

1、AREA 语法格式: AREA 段名属性1,属性2,…… AREA伪指令用于定义一个代码段或数据段。其中,段名若以数字开头,则该段名需用―|‖括起来,如|1_test|。 属性字段表示该代码段(或数据段)的相关属性,多个属性用逗号分隔。常用的属性如下:— CODE属性:用于定义代码段,默认为READONL Y。 — DATA属性:用于定义数据段,默认为READWRITE。 — READONL Y属性:指定本段为只读,代码段默认为READONL Y。 — READWRITE属性:指定本段为可读可写,数据段的默认属性为READWRITE。—ALIGN属性:使用方式为ALIGN 表达式。在默认时,ELF(可执行连接文件)的代码段和数据段是按字对齐的,表达式的取值范围为0~31,相应的对齐方式为2表达式次方。—COMMON属性:该属性定义一个通用的段,不包含任何的用户代码和数据。各源文件中同名的COMMON段共享同一段存储单元。 一个汇编语言程序至少要包含一个段,当程序太长时,也可以将程序分为多个代码段和数据段。 使用示例: AREA Init,CODE,READONL Y 指令序列 ;该伪指令定义了一个代码段,段名为Init,属性为只读 2、ALIGN 语法格式: ALIGN {表达式{,偏移量}} ALIGN伪指令可通过添加填充字节的方式,使当前位置满足一定的对其方式|。其中,表达式的值用于指定对齐方式,可能的取值为2的幂,如1、2、4、8、16等。若未指定表达式,则将当前位置对齐到下一个字的位置。偏移量也为一个数字表达式,若使用该字段,则当前位置的对齐方式为:2的表达式次幂+偏移量。 使用示例: AREA Init,CODE,READONL Y,ALIEN=3 ;指定后面的指令为8字节对齐。 指令序列 END 3、CODE16、CODE32 语法格式: CODE16(或CODE32) CODE16伪指令通知编译器,其后的指令序列为16位的Thumb指令。 CODE32伪指令通知编译器,其后的指令序列为32位的ARM指令。 若在汇编源程序中同时包含ARM指令和Thumb指令时,可用CODE16伪指令通知编译器其后的指令序列为16位的Thumb指令,CODE32 伪指令通知编译器其后的指令序列为32位的ARM指令。因此,在使用ARM指令和Thumb指令混合编程的代码里,可用这两条伪指令进行切换,但注意他们只通知编译器其后指令的类型,并不能对处理器进行状态的切换。使用示例: AREA Init,CODE,READONL Y …… CODE32 ;通知编译器其后的指令为32位的ARM指令

cmd常用命令大全

windows XP cmd命令大全 一,ping 它是用来检查网络是否通畅或者网络连接速度的命令。作为一个生活在网络上的管理员或者黑客来说,ping命令是第一个必须掌握的DOS命令,它所利用的原理是这样的:网络上的机器都有唯一确定的IP地址,我们给目标IP地址发送一个数据包,对方就要返回一个同样大小的数据包,根据返回的数据包我们可以确定目标主机的存在,可以初步判断目标主机的操作系统等。下面就来看看它的一些常用的操作。先看看帮助吧,在DOS窗口中键入:ping /? 回车,。所示的帮助画面。在此,我们只掌握一些基本的很有用的参数就可以了(下同)。 -t 表示将不间断向目标IP发送数据包,直到我们强迫其停止。试想,如果你使用100M 的宽带接入,而目标IP是56K的小猫,那么要不了多久,目标IP就因为承受不了这么多的数据而掉线,呵呵,一次攻击就这么简单的实现了。 -l 定义发送数据包的大小,默认为32字节,我们利用它可以最大定义到65500字节。结合上面介绍的-t参数一起使用,会有更好的效果哦。 -n 定义向目标IP发送数据包的次数,默认为3次。如果网络速度比较慢,3次对我们来说也浪费了不少时间,因为现在我们的目的仅仅是判断目标IP是否存在,那么就定义为一次吧。 说明一下,如果-t 参数和 -n参数一起使用,ping命令就以放在后面的参数为标准,比如"ping IP -t -n 3",虽然使用了-t参数,但并不是一直ping下去,而是只ping 3次。另外,ping命令不一定非得ping IP,也可以直接ping主机域名,这样就可以得到主机的IP。 下面我们举个例子来说明一下具体用法。 这里time=2表示从发出数据包到接受到返回数据包所用的时间是2秒,从这里可以判断网络连接速度的大小。从TTL的返回值可以初步判断被ping主机的操作系统,之所以说"初步判断"是因为这个值是可以修改的。这里TTL=32表示操作系统可能是win98。 (小知识:如果TTL=128,则表示目标主机可能是Win2000;如果TTL=250,则目标主机可能是Unix) 至于利用ping命令可以快速查找局域网故障,可以快速搜索最快的QQ服务器,可以对

STM 常用汇编指令

在嵌入式开发中,汇编程序常常用于非常关键的地方,比如系统启动时初始化,进出中断时的环境保护,恢复等对性能有要求的地方。 ARM指令集可以分为六大类,分别为数据处理指令、Load/Store指令、跳转指令、程序状态寄存器处理指令、协处理器指令和异常产生指令。 ARM指令使用的基本格式如下: 〈opcode〉{〈cond〉}{S}〈Rd〉,〈Rn〉{,〈operand2〉} opcode操作码;指令助记符,如LDR、STR等。 cond可选的条件码;执行条件,如EQ、NE等。 S可选后缀;若指定“S”,则根据指令执行结果更新CPSR中的条件码。 Rd目标寄存器。 Rn存放第1操作数的寄存器。 operand2第2个操作数 arm的寻址方式如下: 立即寻址 寄存器寻址 寄存器间接寻址 基址加偏址寻址 堆栈寻址 块拷贝寻址 相对寻址 这里不作详细描述,可以查阅相关文档。 数据处理指令 Load/Store指令 程序状态寄存器与通用寄存器之间的传送指令 转移指令 异常中断指令 协处理器指令 在S3C2410、S3C2440的数据手册中对各种汇编指令有详细的描述;这里只对较常见的作写介绍。 1、相对跳转指令:b、bl 这两条指令的不同之处在于bl指令除了跳转之外,还将返回地址(bl的下一条指令的地址)保存在lr寄存器中。 这两条指令的可跳转范围是当前指令前后32M。 b funa .... funa: b funb ....

funb: .... 2、数据传送指令mov,地址读取伪指令ldr mov指令可以把一个寄存器的值赋给另外一个寄存器,或者把一个常数赋给寄存器。 mov r1,r2 mov r1,#1024 mov传送的常数必须能用立即数来表示。当不能用立即数表示时,可以用ldr命令来赋值。ldr是伪命令,不是真实存在的指令,编译器会把它扩展成真正的指令;如果该常数能用“立即数”来表示,则使用mov指令,否则编译时将该常数保存在某个位置,使用内存读取指令把它读出来。 ldr r1,=1024 3、内存访问指令ldr、str、ldm、stm ldr既可以指低至读取伪指令,也可以是内存访问指令。当他的第二个参数前面有'='时标伪指令,否则表内存访问指令。 ldr指令从内存中读取数据到寄存器,str指令把寄存器的指存储到内存中,他们的操作数都是32位的。 ldr r1,[r2,#4] ldr r1,[r2] ldr r1,[r2],#4 str r1,[r2,#4] str r1,[r2] str r1,[r2],#4 寄存器传送指令可以用一条指令将16个可见寄存器(R0~R15)的任意子集合(或全部)存储到存储器或从存储器中读取数据到该寄存器集合中。与单寄存器存取指令相比,多寄存器数据存取可用的寻址模式更加有限。多寄存器存取指令的汇编格式如下: LDM/STM{}Rn{!}, 4、加减指令add、sub add r1,r2,#1 sub r1,r2,#1 5、程序状态寄存器的访问指令msr,mrs ARM指令中有两条指令,用于在状态寄存器和通用寄存器之间传送数据。修改状态寄存器一般是通过“读取-修改-写回”三个步骤的操作来实现的。这两条指令分别是: 状态寄存器到通用寄存器的传送指令(MRS) 通用寄存器到状态寄存器的传送指令(MSR) 其汇编格式如下: MRS{}Rd,CPSR|SPSR 其汇编格式如下:

[实用参考]Flac3d-5.0常用命令集锦.doc

建模 1、调用文件: ①文件与工程在同一个文件夹,只写文件名即可:Ifthecalledfileislocatedinthesamefolderasthe FLAC3D projectfile,thenonlyt hefilenameneed beenteredwiththe CALL command. ②不在同一个文件夹,全路径:Otherwise,thefilemaybecalledbyspecifyingitscompletepath(e.g.,c:\myfol der\file.dat). Undo;撤销上一条命令 2、创建旋转缩放视图 3、建模命令 modelmechmohr;莫尔库伦模型 modelmechelastic;弹性模型 setgrav0,0,-9.81;重力加速度negative z-direction.(垂直向下!常用的) 下下面面这这代代码码,,是是沿沿着着--y y方方向向的的重重力力加加速速度度,,注注意意区区别别!!!!!!!! genzonebricksize6,8,8p0-10,-10,-20...;省略号表示写不下后面继续 p110,-10,-20... p2-10,10,-20... p3-10,-10,0 plotzone

genzonebricksize6,8,8p0-10,-10,-20...;不规则六面体 p110,-10,-20p2-10,10,-20... p3-10,-10,0p410,10,-20... p5-10,10,10p610,-10,0... p710,10,10 plotcurrentplotPlot01 plotclear plotzone Undo;撤销命令 setlogfile127G1001.tGt setlogontruncate setlogoff listzoneprinrangeG01y01z01;显示指定范围内各单元的主应力,结果如下 Hist命令: ①命令编号按顺序从1开始:eachhistoryisnumberedsequentiallyfrom1asitisenteredviathe HISTORY co mmand. ②查找显示所有的his命令:ReturntotheFlac3D>promptandtype listhist foralistingofthehistoriesandtheircorrespondingnumbers. histnstep5;每5步记录1次。默认是10步记录1次

ARM的汇编指令讲解

汇编知识点的要求: 1、能看的懂 2、可以做修改 3、不需要用汇编直接编写程序 汇编代码的应用场合: 1、ARM的启动代码必须要汇编,如:uboot最开始初始化硬件的代码 2、内核在最开始初始化的位置。。。。 一、ARM汇编指令的编码格式 1、编码格式 ARM汇编指令编译成机器码以后,机器码的长度是32bits,这32bits的编码有一个固定的格式。不同ARM 汇编指令,编码格式不同。 2、举例 C: if(a==10) a++; else a--;

汇编1: CMP R0, #10; ADDEQ R0,R0,#1 SUBNE R0,R0,#1 汇编2 SUBS R1, R0, #10; //S ---运算的结果会影响条件码标志位:CPSR:NZCV ADDEQ R0,R0,#1 SUBNE R0,R0,#1 提示: 空指令NOP,实际上是占用CPU的时间,但是执行后,没有什么意义。 NOP ---- MOV R0,R0 3、条件码标识 10 -10 Z = 1 C = 0 N = 0 V = 0 ================================================================================= 二、ARM的寻址方式 1、立即数寻址 操作数,有立即数。 ADD R0,R0,#1

MOV R1,#10 ORR R1,R1,#0xf @ R1=R1 | 0xf BIC R1,R1,#0xf @R1 = R1&(~(0xf)) 错误: ADD R1,#1,#2 注意:立即数合法的条件 在ARM汇编指令中,并不是所有的立即数,立即数是有一定的限制的。 什么样的立即数是合法的??? 1、如果一个立即数是小于256的(即该立即数是8bits以内的,0~255),该立即数是合法的。 2、如果一个立即数是大于等于256,该立即数经过循环左移偶数位,可以得到一个小于256的数,则该立即数合法。 256 = 0x100 ------→左移20位0x10000000----→左移4 0x1 合法 0x111 非法 0x102 非法 0x104 合法 0xfff 0xff00 0x12000 0x450000 0xab 原因: 在数据处理指令编码的时候,立即数用12bits来表示: 高4bits:循环左移左移偶数位除以2 低8bits:循环左移后的结果。 重要问题: ADD R1,R0,#0xffff 非法 解决: LDR R2,=0xffff // R2=0xffff,将立即数0xffff的值传送给R2 ADD R1, R0, R2 2、寄存器寻址 所有的操作数都是寄存器,没有立即数 ADD R0,R0,R1 MOV R1,R0 ORR R1,R1,R0 @ R1=R1 | 0xf BIC R1,R1,R0 @R1 = R1&(~(0xf))

(完整版)CAD最常用命令大全(实用版)

cad命令大全 L, *LINE 直线 ML, *MLINE 多线(创建多条平行线) PL, *PLINE 多段线 PE, *PEDIT 编辑多段线 SPL, *SPLINE 样条曲线 SPE, *SPLINEDIT 编辑样条曲线 XL, *XLINE 构造线(创建无限长的线) A, *ARC 圆弧 C, *CIRCLE 圆 DO, *DONUT 圆环 EL, *ELLIPSE 椭圆 PO, *POINT 点 DCE, *DIMCENTER 中心标记 POL, *POLYGON 正多边形 REC, *RECTANG 矩形 REG, *REGION 面域 H, *BHATCH 图案填充 BH, *BHATCH 图案填充 -H, *HATCH HE, *HATCHEDIT 图案填充...(修改一个图案或渐变填充)SO, *SOLID 二维填充(创建实体填充的三角形和四边形)*revcloud 修订云线 *ellipse 椭圆弧 DI, *DIST 距离 ME, *MEASURE 定距等分 DIV, *DIVIDE 定数等分

DT, *TEXT 单行文字 T, *MTEXT 多行文字 -T, *-MTEXT 多行文字(命令行输入) MT, *MTEXT 多行文字 ED, *DDEDIT 编辑文字、标注文字、属性定义和特征控制框ST, *STYLE 文字样式 B, *BLOCK 创建块... -B, *-BLOCK 创建块...(命令行输入) I, *INSERT 插入块 -I, *-INSERT 插入块(命令行输入) W, *WBLOCK “写块”对话框(将对象或块写入新图形文件)-W, *-WBLOCK 写块(命令行输入) -------------------------------------------------------------------------------- AR, *ARRAY 阵列 -AR, *-ARRAY 阵列(命令行输入) BR, *BREAK 打断 CHA, *CHAMFER 倒角 CO, *COPY 复制对象 CP, *COPY 复制对象 E, *ERASE 删除 EX, *EXTEND 延伸 F, *FILLET 圆角 M, *MOVE 移动 MI, *MIRROR 镜像 LEN, *LENGTHEN 拉长(修改对象的长度和圆弧的包含角)

强大的80X86常用汇编指令集

80X86常用汇编指令集ZZ 作者 : 赵振东ZZD 80X86汇编过程中经常用到的一些汇编指令如下所示。 从功能分类: 1、数据传送指令:MOV、XCHG、LEA、LDS、LES、PUSH、POP、PUSHF、POPF、CBW、CWD、CWDE。 2、算术指令:ADD、ADC、INC、SUB、SBB、DEC、CMP、MUL、DIV、DAA、DAS、AAA、AAS。 3、逻辑指令:AND、OR、XOR、NOT、TEST、SHL、SAL、SHR、SAR、RCL、RCR、ROL、ROR。 4、控制转移指令:JMP、Jcc、JCXZ、LOOP、LOOPZ、LOOPNZ、LOOPNE、CALL、RET、INT。 5、串操作指令:MOVS、LODS、STOS、CMPS、SCAS。 6、标志处理指令:CLC、STC、CLD、STD。 7、32位CPU新增指令(后续补充并完善) -----------------数据传送指令开始------------------------------- 1、MOV(传送) 指令写法:MOV target,source 功能:将源操作数source的值复制到target中去,source值不变 注意事项:1)target不能是CS(代码段寄存器),我的理解是代码段不可写,只可读,所以相应这地方也不能对CS执行复制操作。2)target 和source不能同时为内存数、段寄存器(CS\DS\ES\SS\FS\GS)3)不能将立即数传送给段寄存器4)target和source必须类型匹配,比如,要么都是字节,要么都是字或者都是双字等。4)由于立即数没有明确的类型,所以将立即数传送到target时,系统会自动将立即数零扩展到与target 数的位数相同,再进行传送。有时,需要用BYTE PTR、WORD PTR、 DWORD PTR明确指出立即数的位数 写法示例:MOV dl,01H;MOV eax,[bp]; eax =ss:[bp] 双字传送。 2、 XCHG(交换) 指令写法:XCHG object1,object2 功能:交换object1与object2的值 注意事项:1)不能直接交换两个内存数的值 2)类型必须匹配3)两个操作数任何一个都不能是段寄存器【看来段寄存器的写入的限制非常的严格,MOV指令也不能对段寄存器进行写入】,4)必须是通用寄存器(ax、bx、cx、dx、si、di)或内存数 写法示例:XCHG ax,[bx][si]; XCHG ax,bx; 3、 LEA(装入有效地址) 指令写法:LEZ reg16,mem 功能:将有效地址MEM的值装入到16位的通用寄存器中。 写法示例:假定bx=5678H,EAX=1,EDX=2 Lea si,2[bx] ;si=567AH Lea di,2[eax][edx] ;di=5 注意,这里装入的是有效地址,并不是实际的内存中的数值,如果要想取内存中该地址对应的数值,还需要加上段地址才行,而段地址有可能保存在DS中,也有可能保存在SS或者CS中哦:>不知道我的理解可正确。。。。 4、 LDS\LES\LGS\LSS(注意,与LEA不同的是,这里是装入的值,而不是有效地址) 这几个指令,名称不同,作用差不多。 写法:LDS reg16,mem32 功能描述:reg16等于mem32的低字,而DS对应于mem32的高字(当为LES时,这里就是ES对应于mem32的高字) 用来给一个段寄存器和一个16位通用寄存器同时复制。 注意事项:第一个操作数必须是16位通用寄存器 先熟悉下堆栈的概念。堆栈,位于内存的堆栈段中,是内存的一部分,具有“先进后出”的特点,堆栈只有一个入口,即当前栈顶,当堆栈为空时,栈顶和栈底指向同一内存地址,在WINDOWS中,可以把堆栈理解成一个倒着的啤酒瓶,上面的地址大,下面的地址小,当从瓶口往啤酒瓶塞啤酒时(进栈),栈顶就会往瓶口下移动,也就是往低地址方向移动,同理,出栈时,正好相反,把啤酒给倒出来,栈顶向高地址方向移动。这就是所谓的堆栈,哼哼,很Easy吧。

CASS常用命令大全

1.CASS屏幕菜单不见了? 答: 如果关掉了,打开CAD设置,显示屏幕菜单就可以了,如果最小化了,拉下来就行了 2.我在cass5.1中画的图怎么保存不了,会出对话框说: 写入/关闭文件时出错? 答: 选取有用的图纸内容,用cass5.1的窗口存盘或多边形存盘功能将图纸另存为另一文件。 3.CASS5.0中在图幅整饰中,为什么不能完全删除图框外实体? 答南方CASS在图纸分幅中,确实存在一些问题,特别是采用批量分幅,还存在分幅后缺这少那的问题。其中: 1、一部份是操作者的问题,在分幅时要求图纸全屏显示,关闭对象捕捉等; 2、一部份是软件平台AUTOCAD本身存在,如图幅边有不可分割的字体、块等; 3、还有是CASS软件存在的缺陷,特别是在CASS5.1以前的版本。实际上这个问题南方公司早就注意到了,在推出的最新版6.1中问题就较少。 建议楼主使用南方CASS新版。 4.如何从cass的界面切换到autocad的界面? 答: 在CASSxx,按下例选项操作既可: 文件-AUTOCAD系统配置-配置-UNNAMED PROFILE-置为当前-确定。

5.在cass软件上怎么才能显示点号呀 答: 数据文件上的点号有的话,通过展点就可以了 6.断面图文字不能修改,表格也没法修改,整个断面及表格、文字就像一个块,且不能打断。是什么原因? 答: 把编辑里的编组选择关闭即可 7.在CASS6.0中成图时为什么高程点位与数据不能分开,当数据压盖地物时不好只移位数据而点位不变?在CASS6.0的“编辑”中“图层控制”子菜单中为什么象“实体层→当前层”等好多菜单命令都是无效命令? 答: 在cass6.1中将“文件-cass6.1参数配置-地物绘制-展点注记”设为分置即可分开。 8.CASS6.0使用问题请问来自何方: CASS6.0制图时,高程注记和高程点(如: . 350)是否为一个块?不能对其进行编辑,如我想移动"350",而又不移动".",利用软件怎样操作才能做到? 答: 在绘图处理里有“打散高程注记”,用它将高程注记和点位打散就可以移动和编辑了。 9.为什么CASS5.1在改变当前比例尺时,问是否改变符号大小,选2不改变时,那些坎线,坟墓等地物还是会变大或变小呢?有时会很难看答:

Eviews常用命令集

武汉大学实践教改项目 Eviews命令集 武汉大学经济学系数量经济学教研室《教改项目组》编译本命令集几乎涵盖了Eviews中所有命令,视图和过程的完整列表,我们分为基本命令,矩阵和字符串函数以及编程语言三个面加以介绍,在每一个面的列表按照字母顺序排列。每条记录包括该命令关键词,关键词的各种用法,其功能描述和语法,在大多数记录中,我们还提供了附加参数的列表和示例。 一、基本命令 add add group过程| pool过程 向组添加一个序列或者向pool中添加截面元。 语法 group过程:group_name.add ser1 ser2 ser3 group过程:group_name.add grp1 grp2 pool过程:pool_name.add id1 id2 id3 列出要添加到组中的序列名称或者序列组,或者列出要添加到pool中的截面标识符。 示例 dummy.add d11 d12 向组DUMMY中添加两个序列D11和D12。 countries.add us gr 向pool对象COUNTRIES中添加US和GR两个截面元素。 addtext addtext图过程 在图中放置文本。 语法 图过程:graph_name.addtext(options) text 在addtext命令后跟随要放置到图中的文本。 选项 t 顶部(在图的上部并居中)。 l 左旋转。 r 右旋转。 b 下方并居中。

x 把文本包含在框中。 要在图中放置文本,可以明确的使用座标来指定文本左上角的位置。座标由一个数对h,v设定,单位是虚英寸。单独的图通常是43虚英寸(散点图是33虚英寸),不管它们当前的显示大小。座标的原点位于图的左上角。第一个数值h指定从原点向右偏离的虚英寸距离。第二个数值v指定从原点向下偏离的虚英寸距离。文本的左上角将被放置在指定的座标上。 ●座标可以于其他选项一起使用,但是它们必须位于选项列表的前两个位置。座标 受指定位置的其他选项控制。 ●当addtext对多重图使用时,文本应用于整个图,而不是每个单独的图。 示例 freeze(g1) gdp.line g1.addtext(t) Fig 1: Monthly GDP (78:1-95:12) 把文本“Fig1: Monthly GDP (78:1-95:12)”放置于图G1的顶部中央位置。 g1.addtext(.2,.2,x) seasonally adjusted 把文本“seasonally adjusted”放置在图中的一个框中,稍稍从左上角缩进。 align align Graph视图 对齐多个图形的位置。 语法 Graph视图:graph_name.align(n,h,v) 选项 n 指定图形放置的列数。 h 图形之间的水平间隔。 v 是图形之间的垂直间隔。 必须在括号中按顺序指定以上3个参数(用逗号隔开)。间隔大小的单位为虚英寸。 示例 mygraph.align(3,1.5,1) 把MYGRAPH与第三列中的图形对齐,水平间隔为1.5英寸,垂直距离为1英寸。 append append Logl 过程| Model过程| System过程| Sspace过程 向Logl对象,Model对象,System对象,或者Sspace空间对象添加一行。 语法

ARM汇编语言源程序格式

ARM汇编语言源程序格式ARM汇编语言源程序格式2010-11-16 13:52 来源:MCU嵌入式领域 常用ARM源程序文件类型 汇编语言程序的结构1 汇编语言程序的结构2 汇编语言程序的结构3 汇编语言程序的结构4 ARM的汇编语言程序一般由几个段组成,每个段均由AREA伪操作定义。 段可以分为多种,如代码段、数据段、通用段,每个段又有不同的属性,如代码段的默认属性为READONLY,数据段的默认属性为READWRITE。 本程序定义了两个段,第一个段为代码段codesec,它在存储器中存放用于程序执行的代码以及main函数的本地字符串;第二个段为数据段constdatasec,存放了全局的字符串,由于本程序没有对数据进行写操作,该数据段定义属性为READONLY。 汇编语言的行构成1 格式: [标签]指令/伪操作/伪指令操作数[;语句的注释] 所有的标签必须在一行的开头顶格写,前面不能留空格,后面也不能跟C 语言中的标签一样加上":";

ARM汇编器对标识符的大小写敏感,书写标号及指令时字母的大小写要一致; 注释使用";"符号,注释的内容从";"开始到该行的结尾结束 汇编语言的行构成2 标签 标签是一个符号,可以代表指令的地址、变量、数据的地址和常量。 一般以字母开头,由字母、数字、下划线组成。 当符号代表地址时又称标号,可以以数字开头,其作用范围为当前段或者在下一个ROUT伪操作之前。 指令/伪操作 指令/伪操作是指令的助记符或者定义符,它告诉ARM的处理器应该执行什么样的操作或者告诉汇编程序伪指令语句的伪操作功能。 汇编语言的标号1 标号代表地址。 标号分为段内标号和段外标号。段内标号的地址值在汇编时确定,段外编号的地址值在链接时确定。 在程序段中,标号代表其所在位置与段首地址的偏移量。根据程序计数器(PC)和偏移量计算地址即程序相对寻址。 在映像中定义的标号代表标号到映像首地址的偏移量。映像的首地址通常被赋予一个寄存器,根据该寄存器值与偏移量计算地址即寄存器相对寻址。 例如:

VB常用指令集

VB常用指令集 Abs 求绝对值 ActiveControl 得到焦点的对象ActiveForm 得到焦点的表单 Array 指定数组 App 得知程序信息 AppActivate 激活执行中的应用程序Asc 求字符的内码 AscB 求字符的ASCII AscW 求字符的UniCode Atn 求Tan-1 Beep 发出预设的警示声 Call 调用子程序 Calendar 选择月历 Choose 取出一列值的某个值 CBool 数值转成布尔数 CByte 数值转成位元格式 CCur 数值转成货币格式 CDate 数据转成时间 CDbl 数值转成双精度浮点数 CDec 数据转成十进数 ChDir 改变目前路径缓充的路径ChDrive 改变目前磁盘缓充的磁盘 Chr 由内码求得一字符 ChrB 由ASCII求得一字符 ChrW 由UniCode求得一字符 CInt 数据转成Integer CLng 数据转成Long Command 读出程序的参数 Const 定义常数 Cos COSCSng 数值转成单精度浮点数CurDir 得知目前路径缓充的路径CVar 数值转成可变变量 Date 得到目前电脑的时间 Date$ 得到目前电脑时间字符串DateAdd 日期加法得日期 DateDiff 日期相减得数值 DatePart 日期部份资讯 DateSerial 字符串转日期 DateValue 数字转日期 Day 得知日期变量内是几号 DDB 折旧的计算 DeleteSetting 删除系统登录内的数据

Dir 得知目前路径内的文件名 DoEvents 闲置函数 End 结束程序 Environ 取得环境变量的数据 EOF 某个文件缓冲的指标是否到档尾 Erase 重新初始化数组 Err 错误资讯 Error 错误代码信息 Exp 得到自然对数 Fix 去除小数 FileCopy To 复制文件 FileAttr 文件开启模式 FileDateTime 文件存档日期 FileLen 文件长度 Filter 筛选数组 VB6提供 Format 数据格式化输出 FreeFile 空的文件编号 FV 求得定期、定额支付且固定利率下之年金的值GetAllSetting 得到所有系统登录的资讯 GetAttr 得知文件属性 GetSetting 得到系统登录的资讯 Hex 将数值转成16进数表示的字符串 Hour 得知日期变量内是几时 If . Then . Else 判断结构 IMEStatus 得知IME输入法状态 InStr 寻找字符串里的字符串 InStrB 寻找字符串里的ASCII IntStrRev 由字符串右边开始寻找字符串里的字符串 VB6提供Int 取整数 Join 将数组数据加入分隔字符后组合成一新字符串 VB6提供Kill 删除文件 LBound 得知数组最小起始范围 LCase 字符串转小写 Left截取字符串左边几个字 Len 得知字符串的字数 LenB 得知变量占用记忆体几个Byte LoadPicture 载入图形 Log 求对数值 LSet 字符串向左对齐 LTrim 移除字符串最左边的空白字符 Mid 截取字符串里某些字符串 Minute 得知日期变量内是几分 MkDir 建立新的数据颊 Month 得知日期变量内是第几月

伪指令

A51汇编解释---伪指令 2011-05-11 17:51:46| 分类:默认分类| 标签: |举报 |字号大 中 小订阅 一:定义符号的伪指令 1)SEGMENT 格式: 段名符号 SEGMENT 段类型 [再定位类型] SEGMENT指令可声明一个可再定位(区别于CSEG,DSEG,XSEG,BSEG,ISEG等定义的在相对应的空间固定地址定义的绝对段—在连接的过程中不允许重新定位)的段符号和一个可选的再定位类型,段符号可以用来定义段,L51连接器可将多个模块内的具有相同段名和再定位类型的几个段合成为一个段.段类型说明了段所处的地址空间. 如果是编写的汇编程序要与C源程序接口,即被C源程序调用,则全部的汇编子程序所命名的定义的代码段的段名必须是可用SEGMENT来定义的,而且名字的命名的方法也应该参照C51编译器产生的局部段的段名的转换规则.段名的作用主要是在汇编的时候用RSEG来激活的,在连接定位的时候用到的.与段名相应的是用于存储和传递参数的别名,可以在汇编源程序中直接应用局部段的别名,这个别名主要是在传递函数参数的时候用的.在汇编程序中要用PUBLIC 声明被其他模块引用的全局符号. DATA (可直接寻址的内部RAM空间) IDATA (可间接寻址的内部RAM空间) XDATA (外部数据存储空间) BIT (内部RAM低地址区的可位寻址的空间) CODE (程序存储器空间) 可选的再定位类型定义了L51连接时的定位方式,再定位类型: UNIT:定义一个可开始于任一单元的段对于BIT型的段,一个单元是一个位, 其它所有的段一个单元是一个字节. PAGE:定义一个起始地址必须是256的整数倍的段,段的绝对地址由L51自己计算,该类型只允许用于XDATA和CODE类型段. INPAGE:定义一个由L51连接后必须包含在256B的块中,只适用于XDATA和CODE段. INBLOCK:定义一个L51连接后必须包含在2KB中的段,只适用于CODE段. OVERLAYABLE:定义一个可与其他段交叠的覆盖段,其段名符号必须按C51或者PL/M51的规则命名.C51把局部数据段和局部位段定义成?DT?FUNCTIONNAME?MODULENAME 和?BI?FUNCTIONNAME?MODULENAME这是在small模式下.其他的模式略有不同。BITADDRESSABLE:定义一个L51连接后位于可位寻址的区,段长不能超过16B. 2) EQU 格式: 符号名 EQU 表达式 符号名 EQU 寄存器名 EQU伪指令定义一表示数值或寄存器的符号,该符号可用于表达式或助记符指令的操作数,EQU指令定义的符号不能被改变或重新定义,其段类型取决于表达式中的操作数类型类型,无类型的EQU符号可用于任何表达式中. LIMIT EQU 200 VALUE EQU LIMIT-100+’A’

51单片机汇编指令集(附记忆方法)

51单片机汇编指令集 一、数据传送类指令(7种助记符) MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送; MOVC(Move Code)读取程序存储器数据表格的数据传送; MOVX (Move External RAM) 对外部RAM的数据传送; XCH (Exchange) 字节交换; XCHD (Exchange low-order Digit) 低半字节交换; PUSH (Push onto Stack) 入栈; POP (Pop from Stack) 出栈; 二、算术运算类指令(8种助记符) ADD(Addition) 加法; ADDC(Add with Carry) 带进位加法; SUBB(Subtract with Borrow) 带借位减法; DA(Decimal Adjust) 十进制调整; INC(Increment) 加1; DEC(Decrement) 减1; MUL(Multiplication、Multiply) 乘法; DIV(Division、Divide) 除法; 三、逻辑运算类指令(10种助记符) ANL(AND Logic) 逻辑与; ORL(OR Logic) 逻辑或; XRL(Exclusive-OR Logic) 逻辑异或; CLR(Clear) 清零; CPL(Complement) 取反; RL(Rotate left) 循环左移; RLC(Rotate Left throught the Carry flag) 带进位循环左移; RR(Rotate Right) 循环右移; RRC (Rotate Right throught the Carry flag) 带进位循环右移; SWAP (Swap) 低4位与高4位交换; 四、控制转移类指令(17种助记符) ACALL(Absolute subroutine Call)子程序绝对调用; LCALL(Long subroutine Call)子程序长调用; RET(Return from subroutine)子程序返回; RETI(Return from Interruption)中断返回; SJMP(Short Jump)短转移; AJMP(Absolute Jump)绝对转移; LJMP(Long Jump)长转移; CJNE (Compare Jump if Not Equal)比较不相等则转移;

CentOS7 常用命令集合

CentOS7 常用命令集合 常用命令 文件与目录操作 命令解析 cd /home 进入‘/home’ 目录 cd .. 返回上一级目录 cd ../.. 返回上两级目录 cd - 返回上次所在目录 cp file1 file2 将file1复制为file2 cp -a dir1 dir2 复制一个目录 cp -a /tmp/dir1 . 复制一个目录到当前工作目录(.代表当前目录) ls 查看目录中的文件 ls -a 显示隐藏文件 ls -l 显示详细信息 ls -lrt 按时间显示文件(l表示详细列表,r表示反向排序,t表示按时间排序)pwd 显示工作路径 mkdir dir1 创建‘dir1’ 目录 mkdir dir1 dir2 同时创建两个目录 mkdir -p /tmp/dir1/dir2 创建一个目录树 mv dir1 dir2 移动/重命名一个目录 rm -f file1 删除‘file1’ rm -rf dir1 删除‘dir1’ 目录及其子目录内容 查看文件内容

命令解析 Ctrl + t 交换光标位置前的两个字符 Ctrl + y 粘贴最后一次被删除的单词 Ctrl + Alt + d 显示桌面 Alt + b 光标往回(backward)移动到前一个单词 Alt + d 删除从光标位置到当前所处单词的末尾 Alt + F2 运行 Alt + F4 关闭当前窗口 Alt + F9 最小化当前窗口 Alt + F10 最大化当前窗口 Alt + Tab 切换窗口 Alt + 左键移动窗口(或在最下面的任务栏滚动鼠标滑轮) 操作小技巧 鼠标中间键:粘贴突出显示的文本。(使用鼠标左键来选择文本。把光标指向想粘贴文本的地方。点击鼠标中间键来粘贴。) Tab:命令行自动补全。使用shell 提示时可使用这一方式。键入命令或文件名的前几个字符,然后按[Tab] 键,它会自动补全命令或显示匹配键入字符的所有命令。 在滚动条的空白处点击鼠标中键:屏幕即滚动到那个地方。 在桌面或文件管理器中直接按/ 就可以输入位置,打开文件管理器。 在vi 或Firefox 中直接按/ 即可进入快速搜索状态。 网站链接和图片可直接拖放到桌面或者目录,可以马上下载。 直接将文件管理器中的文件拖到终端中就可以在终端中得到完整的路径名。 结束语 其实要学好Linux的操作并不是很困难的事情,在平常的使用过程中,碰到问题,学会去网上寻找答案不失为一个非常好的手段!谢谢大家!

access2010常用指令集合

Access常用宏命令及其功能 Access常考控件属性 Access常考控件事件

ACCESS输入掩码的含义 常用函数 文本函数

打开窗体时,发生事件的顺序:打开(Open )→加载(Load )→调整大小(Resize )→激活(Activate )→成为当前(Current ) 关闭窗体时,发生事件顺序:卸载(Unload )→停用(Deactivate )→关闭(Close ) GotFocus 之前

VBA 编程中常用命令: Docmd.close 关闭界面 Docmd.Open 特殊考点: 数据访问对象DAO 模型 DBEngine 对象:表示Microsoft Jet 数据库引擎。它是DAO 模型的最上层对象,而且包含并控制DAO 模型对象。 Workspace 对象:表示工作区。 RecordSet 对象:表示数据操作返回的记录集 Database 对象:表示操作的数据库对象。 Field 对象:表示记录集中的字段数据信息 Query Def 对象:表示数据库查询信息 Error 对象表示数据提供程序出错似的扩展信息。 ADO 对象模型 特殊聚合函数: Ns 函数:用于将Null 值转换为0,空字符串或者其他指定值 格式:Ns (表达式或字段属性值,[规定值]) DLookup 函数:是从指定记录集里检索特定字段的值。 DBEngine Workspace(s) Database(s) RecordSet(s) Field(s) Error(s) Query Def(s) Connection Error(s) Command RecordSet Field(s)

ARM汇编伪指令宏的用法详解_MACRO-MEND_.

ARM 汇编伪指令宏的用法详解(MACRO-MEND 宏是一段独立的程序代码,它是通过伪指令定义的,在程序中使用宏指令即可调用宏。当程序被汇编时,汇编程序将对每个调用进行展开,用宏定义取代源程序中的宏指令。 MACRO 、MEND 语法格式: MACRO [$ label] macroname{ $ parameter1, $ parameter,…… } 指令序列 MEND MACRO 伪操作标识宏定义的开始,MEND 标识宏定义的结束。用MACRO 及MEND 定义一段代码,称为宏定义体,这样在程序中就可以通过宏指令多次调用该代码段。 其中, $ label在宏指令被展开时,label 会被替换成相应的符号,通常是一个标号。在一个符号前使用$表示程序被汇编时将使用相应的值来替代$后的符号。 macroname 为所定义的宏的名称。 $parameter为宏指令的参数。当宏指令被展开时将被替换成相应的值,类似于函数中的形式参数,可以在宏定义时为参数指定相应的默认值。 宏指令的使用方式和功能与子程序有些相似,子程序可以提供模块化的程序设计、节省存储空间并提高运行速度。但在使用子程序结构时需要保护现场,从而增加了系统的开销,因此,在代码较短且需要传递的参数较多时,可以使用宏汇编技术。首先使用MACRO 和MEND 等伪操作定义宏。包含在 MACRO 和 MEND 之

间的代码段称为宏定义体,在MACRO 伪操作之后的一行声明宏的原型(包含宏名、所需的参数),然后就可以在汇编程序中通过宏名来调用它。在源程序被汇编时,汇编器将宏调用展开,用宏定义体代替源程序中的宏定义的名称,并用实际参数值代替宏定义时的形式参数。 宏定义中的$label是一个可选参数。当宏定义体中用到多个标号时,可以使用类似$label.$internallabel的标号命名规则使程序易读。 MACRO 、 MEND 伪操作可以嵌套使用。 使用示例: MACRO $HandlerLabel HANDLER $HandleLabel ;宏的名称为HANDLER ,有1个参数$HandleLabel $HandlerLabel sub sp,sp,#4 stmfd sp!,{r0} ;decrement sp(to store jump address ;PUSH the work register to stack(lr does not push because it return to original address ;load the address of HandleXXX to r0 ;load the contents(service routine start address of HandleXXX ;store the contents(ISR of HandleXXX to stack ;POP the work register and pc(jump to ISR ldr r0,=$HandleLabel ldr r0,[r0] str r0,[sp,#4] ldmfd sp!,{r0,pc} MEND ;在程序中调用该宏

相关主题
文本预览
相关文档 最新文档