Men的博客

欢迎光临!

0%

常见的汇编指令

AT&T
寄存器名称 %rax
操作数顺序 movq %rax %rdx
常数、立即数 movq $3 %rax
内存赋值 movq $0xa, 0x1ff7(%rip)
取内存地址 leaq -0x18(%rbp),%rax
jmp指令 jmp 0x4000102
call指令 call *%rdx
操作长度 movl %eax %edx
B = byte 8
S = short 16
W = word 16
L = long 32
Q = quad 64
T = ten bytes 80

常见的寄存器:
rax 、rbx、rcx、rdx、rsx、rdi、rbp、rsp
r8、r9、r10、r11、r12、r13、r14、r15
寄存器的具体用途:
rax、rdx常作为函数返回值使用
rdi、rsi、rdx、rcx、r8、r9等寄存器常用于存放函数参数
rsp、rdp用于栈操作
rip 作为指令指针

规律:
内存地址格式为: 0x4bdc(%rip), 一般是全局变量,全局区(数据段)
内存地址格式为:-0x78(%rbp), 一般是局部变量,栈空间
内存地址格式为:0x10(%rax), 一般是堆空间

guard语句最大的优势就是在解包(Optional)时候, 比用 if 语句解包更优雅, 避免在大量串行解包的时候出现金字塔.
// guard let 保证变量/常量一定有值,没有值则返回。
var a: String? = “ddd”
guard let b = a else { print(“a is nil”) }
print(b) //注意解包之后b的作用域仍然有效

//if
var a: String? = “ddd”
if let b = a {
print(b) //解包之后b的只有在 { … } 内才有作用域
}

ArrayList、LinkedList