- 博客(28)
- 收藏
- 关注
原创 内联汇编简要笔记
Assembler code:汇编代码部分,需要使用“”包括,所有汇编代码必须用双引号括起来,如果多行汇编代码,每一条语句都要用双引号括起来,代码后面加上换行符(“\n"或”\n\t"),具体形式;outputOperands:输出操作数列表;inputOperands:输入操作数的列表;Clobbers:受损坏的部分,“memory”告诉GCC内嵌汇编指令 改变了内存的值,强迫编译器在执行该汇编代码前,存储所有缓存的值,在执行完汇编代码之后重新加载该值,目的是防止编译乱序;
2023-12-27 10:49:58
485
原创 每天一条汇编指令之SVC
linux执行系统调用的时候,通过x0-x7传参,x8记录着对应的系统调用号,系统调用表应该在linux-arch\arm64\include\asm\unistd32.h中(5.9版本)该指令可以使CPU陷入SYNC异常中,linux中一般是el0t_sync,之后会调用el0t_64_sync_handler函数处理该异常,为系统调用号。cpu的sync异常种类有多种,可以从ESR_ELx寄存器中获取具体的异常类型,通过查阅手册,SVC对应的异常为0x15。
2023-11-29 23:38:11
2225
原创 AArch64指令集主要指令
AArch64指令集主要指令指令类型指令名称数据处理指令移动:MOV, MOVK ;加减:ADD{S}, SUB{S}, CMP;乘除: MUL, MADD, MSUB, UDIV, SDIV; 逻辑运算:AND, ORR, EOR, MVN, TST;移位:LSL, LSR, ASR, ROR;位段操作:UXTB, UXTH, SXTB, SXTH, SXTW存储器访问指令载入:LDR, LDP;存储:STR, STP;地址生成:ADR, ADRP;流程控制指令无条
2023-11-25 00:33:28
773
原创 ARM V8 特殊寄存器之SPSR、ELR和SP
ELR (exception link register) 保存exception返回地址;SPSR (saved processor state register) 执行exception前保存当前的processor state。
2023-10-26 17:47:01
2228
原创 ARM V8汇编中符号的意义
其中包含的任何符号都是可选的。对于每个可选符号,都有一个描述,说明该符号代表什么,以及如何对其存在或不存在进行编码。在一些汇编程序语法原型中,一些大括号是强制性的,例如,如果它们包围了一个寄存器列表。当强制使用大括号时,它们与其他语法项之间用一个或多个空格分隔。其中包含的任何符号都是用户提供的名称或值。对于每个符号,都有一个符号所代表内容的描述。描述通常还指定哪个或多个编码字段对符号进行编码。在A64汇编程序源代码中,#的所有使用都是可选的。ARM建议反汇编程序在汇编程序语法原型包含#的位置输出#。
2023-07-26 14:44:47
126
1
原创 ARM64指令集之加载与存储指令
汇编代码里通常使用标签(label)来标记代码段,LDR还提供一种访问标签的地址模式。当第二个参数前有“=”,表示伪指令,没有则是普通的内存访问指令。有两种,加载或存储前变基地址,和加载或存储后变基地址。把Xt寄存器中的内容存储到Xn寄存器所指向的地址中。加载Xn寄存器所指向的地址的数据到Xt寄存器。offset为地址偏移量。x0寄存器的值为0x40。有点小麻烦,之后补充。
2023-07-18 17:28:26
274
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人