Skip to content

Latest commit

 

History

History
58 lines (49 loc) · 4.28 KB

汇编代码阅读.md

File metadata and controls

58 lines (49 loc) · 4.28 KB

汇编代码阅读

ADD    X0,X1,X2                                 ;寄存器X1和X2的值相加后传送到X0
AND    X0,X0,#0xF                               ;X0的值与0xF相位与后的值传送到X0
ADRP  {cond}  Rd  label                           ;以页为单位的大范围的地址读取指令,P=page。Rd加载的目标寄存器。lable为地址表达式。
B/BL                                              ;绝对跳转#imm, 返回地址保存到LR(X30)
BLR   Xm                                          ;跳转到由Xm目标寄存器指定的地址处,同时将下一条指令存放到X30寄存器中。
BR    Xm                                          ;跳转到由Xm目标寄存器指定的地址处。不是子程序返回
CBZ                                               ;比较(Compare),如果结果为零(Zero)就转移(只能跳到后面的指令)
CBNZ                                              ;比较,如果结果非零(Non Zero)就转移(只能跳到后面的指令)
CMP                                               ;比较指令,相当于SUBS,影响程序状态寄存器CPSR 
EOR    X0,X0,#0xF                               ;X0的值与0xF相异或后的值传送到X0
LDR    X5,[X6,#0x08]                            ;X6寄存器加0x08的和的地址值内的数据传送到X5
LDP  x29, x30, [sp,0x10]                        ;出栈指令

LDRB R0,[R1,#8]                                 ;将存储器地址为R1+8的字节数据读入寄存器R0,并将R0的高24位清零。
LDRH R0,[R1,R2]                                  ;将存储器地址为R1+R2的半字数据读入寄存器R0,并将R0的高16位清零。
LDMFD     SP! ,   {R0, R1, R2}                    ;把sp指向的3个连续地址段中的数据拷贝到r0,r1,r2这3个寄存器中去。
MOV    X1,X0                                     ;将寄存器X0的值传送到寄存器X1
ORR    X0,X0,#9                                 ;X0的值与9相位或后的值传送到X0
STMFD      SP!,   {R0}                            ;把R0保存到堆栈(sp指向的地址)中。
STR   R0,[R1],#8                                ;将R0中的字节数据写入以R1为地址的存储器中,并将新地址R1+8写入R1。
STR   R0,[R1,#8]                                ;将R0中的字节数据写入以R1+8为地址的存储器中。
STP  x29, x30, [sp,0x10]                       ;入栈指令
STRB R0,[R1]                                      ;将寄存器R0中的字节数据写入以R1为地址的存储器中。
STRB R0,[R1,#8]                                 ;将寄存器R0中的字节数据写入以R1+8为地址的存储器中。
STRH R0,[R1]                                      ;将寄存器R0中的半字数据写入以R1为地址的存储器中。
STRH R0,[R1,#8]                                 ;将寄存器R0中的半字数据写入以R1+8为地址的存储器中。
SUB    X0,X1,X2                                 ;寄存器X1和X2的值相减后传送到X0
RET  {Xm}                                         ;跳转到由Xm目标寄存器指定的地址处。是子程序返回。Xm可以不写,默认是X30.
操作码	条件码助记符	                           标志	含义
0000	EQ	                                   Z=1	相等
0001	NE(Not Equal)	                       Z=0	不相等
0010	CS/HS(Carry Set/High or Same)	       C=1	无符号数大于或等于
0011	CC/LO(Carry Clear/LOwer)	           C=0	无符号数小于
0100	MI(MInus)	                           N=1	负数
0101	PL(PLus)	                           N=0	正数或零
0110	VS(oVerflow set)	                   V=1	溢出
0111	VC(oVerflow clear)	                   V=0	没有溢出
1000	HI(HIgh)		                       C=1,Z=0	无符号数大于
1001	LS(Lower or Same)		               C=0,Z=1	无符号数小于或等于
1010	GE(Greater or Equal)		           N=V	有符号数大于或等于
1011	LT(Less Than)	                       N!=V	有符号数小于
1100	GT(Greater Than)		               Z=0,N=V	有符号数大于
1101	LE(Less or Equal)		               Z=1,N!=V	有符号数小于或等于
1110	AL		                               任何	无条件执行(默认)
1111	NV		                               任何	从不执行