基础语法、汇编初探

Swift版本

编译流程


程序的本质


寄存器与内存


编程语言的发展


编程语言的发展


汇编语言的种类


常见汇编指令

小括号代表里面装的是内存地址
-ox18(%rbp) 意思是 %rbp-0x18

movq -ox18(%rbp), %rax
mov是将内存空间存储的地址对应的值取出来,赋值给raxq代表单位(8个字节)
leaq -0x18(%rbp), %rax
lea是直接算出地址将地址赋值给rax
jump跳转,跳转以后不回头
call跳转到指定地址执行代码,后面跟函数地址,一般跟ret配合使用,ret后回到call后的下一个地址
call *%rax 函数地址存储在rax中,记得加*

rip存储的是指令的地址
CPU要执行的下一条指令地址就存储在rip 

寄存器

ah high 高位
al low 低位

r开头:64位,8个字节
e开头:32位,4个字节
ax,bx,cx : 16位,2字节
ah,al : 8位,1字节
bh bl

规律


lldb常用指令


规律


基础语法

Hello World


Playground - View


Playground - ViewController


Playground – 多Page


注释

//单行注释

/*
 多行注释
 */

/*
 1
 /* 多行注释的嵌套 */
 2
*/

//: 开始markup

/* :
 开始markup
 */

常量


标识符


常见数据类型

值类型(value type) 枚举(enum) Optional
  结构体(struct) Bool、Int、Float、Double、Character
    String、Array、Dictionary、Set
引用类型(reference type) 类(class)  

字面量

//字符串
let string = "熊熊熊"

//字符(可存储ASCII字符、Unicode字符)
let character: Character = "🐶"

//布尔
let bool = true //取反是false

//整数
let intDecimal = 17 //十进制
let intBinary = 17 //二进制
let intOctal = 17 //八进制
let intHexadecimal = 17 //十六进制

//浮点数
let doubleDecimal = 125.0 //十进制,等价于1.25e2,0.0125等价于1.25e-2
let doubleHexadecimal1 = 0xFp2 //十六进制,意味着15x2^2,相当于十进制的60.0
let doubleHexadecimal2 = 0xFp-2 //十六进制,意味着15x2^-2,相当于十进制的3.75

//数组
let array = [1, 3, 5, 7, 9]

//字典
let dictionary = ["age" : 18, "height" : 168, "weight" : 120]

类型转换

//整数转换
let int1: UInt16 = 2_000
let int2: UInt8 = 1
let int3 = int1 + UInt16(int2)

//整数、浮点数转换
let int = 3
let double = 0.14159
let pi = Double(int) + double
let intPi = Int(pi)

元祖

let http404Error = (404, "Not Found")
print("The status code is \(http404Error.0)")

let (statusCode, statusMessage) = http404Error
print("The status code is \(statusCode)")

let (justTheStatusCode, _) = http404Error

let http200Status = (statusCode: 200, description: "OK")
print("The status code is \(http200Status.statusCode)")