网站建设包含美工,服饰东莞网站建设,常州个人做网站,网上书店网站建设方案策划一、指令
0.MRS 和MSR
MRS 指令: 对状态寄存器CPSR和SPSR进行读操作。 MSR指令: 对状态寄存器CPSR和SPSR进行写操作。
1.adrp
adrp x0, boot_args把boot_args的页基地址提取出来#xff0c;放到x0中。
2.stp
stp x21, x1, [x0]将 x21, x1 的值存入 x0寄存器记录的地址中…一、指令
0.MRS 和MSR
MRS 指令: 对状态寄存器CPSR和SPSR进行读操作。 MSR指令: 对状态寄存器CPSR和SPSR进行写操作。
1.adrp
adrp x0, boot_args把boot_args的页基地址提取出来放到x0中。
2.stp
stp x21, x1, [x0]将 x21, x1 的值存入 x0寄存器记录的地址中比如 x0存的是boot_args的地址那么 x21, x1 的值存入就会存入boot_args中。
3.ubfm
ubfm \tmp, \tmp, #16, #19
UBFM Xd, Xn, #immr, #imms如果大于或等于则从源寄存器中的位位置开始将(-1)位字段复制到目标寄存器的最低有效位。 如果小于则从源寄存器的最低有效位复制(1)位字段到目标寄存器的位位置(regsize-)其中regsize是32位或64位的目标寄存器大小。 这里是19大于16也就是说把tmp的[16,19]这4位提取出来放到tmp中。
4.tst
tst x1, x3说明TST 来检查是否设置了特定的位。x1 是要测试的数据字x3 是一个位掩码TST指令将x1与x3做逻辑与运算。TST会改变CPSR的条件标志位。这个指令通常与EQNE这些条件码来组合使用但是使用过程中需要注意 与掩码逻辑与运算之后全部测试位为0的时候标志位Z 1此时EQ成立反之则 Z 0NE成立。
5.UBFX
UBFX Xd, Xn, #lsb, #widthUBFX指令的意思是从Xn寄存器的第lsb位开始提取width位到Xd寄存器剩余高位用0填充。
二、宏
1.adr_l
.macro adr_l, dst, sym
adrp \dst, \sym
add \dst, \dst, :lo12:\sym
.endmadr_l这个宏的作用是把给dst赋sym的值。 adr_l这个宏首先通过adrp指令把sym的页基地址提取出来放到dst中然后把dst和sym的低12位相加放到dst中。 最后得出结论就是用于获取基于PC相对偏移/- 4 GB内的符号地址。
2.dcache_line_size
/** dcache_line_size - get the safe D-cache line size across all CPUs*///从这个CPU的CTR寄存器上获取最小D-cache行大小.macro dcache_line_size, reg, tmpread_ctr \tmp // 读取 CTR 寄存器的值ubfm \tmp, \tmp, #16, #19 // 读取ctr_el0比特16到19的数值这个数值和D-cache大小有关mov \reg, #4 // 给reg赋值4lsl \reg, \reg, \tmp // 计算实际的cache 行大小单位字节.endm这个宏的作用是获得所有cpu上的安全D-cache线大小。
3.ldr_l
ldr_l x4, idmap_ptrs_per_pgd .macro ldr_l, dst, sym, tmp.ifb \tmpadrp \dst, \symldr \dst, [\dst, :lo12:\sym].elseadrp \tmp, \symldr \dst, [\tmp, :lo12:\sym].endif.endmldr_l, dst, sym, tmp 这个宏是将符号sym中存放的内容取到dst中这条指令取的是idmap_ptrs_per_pgd的页内偏移地址到x4寄存器。