「这是我参与11月更文挑战的第17天,活动详情查看:2021最后一次更文挑战」。
栈和队列
栈和队列都是数据存储结构,数据结构大致包含以下几种存储结构:
- 线性表,还可细分为顺序表,链表、栈和队列;
- 树结构,包括普通树,二叉树,线索二叉树;
- 图存储结构
- 队列结构 :先进先出, 和排队一样
- 栈存储结构 : 先进后出, 类似于往往杯子里放饼干, 第一个放的最后一个取出
栈作用 :
- 用于存储临时数据,
- 对数据进行暂时性保护,不被复写
- 寄存器不够用时,使用栈临时代替中转
寄存器和栈同样用于存放临时数据, 那么它们两者有什么区别呢?
寄存器类似于全局变量,是个公共容器,可以被所有函数读写,寄存器中的数据容易被覆盖, 常用于短周期使用
栈空间是累加型结构: 如果想要复写第一个放入的数据,必须先将后面存放的数据丢弃, 类似于递归, 适合嵌套数据,这也是为什么函数和函数中的局部变量都存放在栈中的原因
总线
存在的意义, 内存中的数据不能直接运算,必须将其读取到寄存器中进行处理, cpu运算完毕后,将其保存至内存中, 那么这一系列过程中,涉及到数据传输, 那么这三条线就是干这个用的
x86汇编语法
- 注释
;我是注释
了解: arm汇编注释同为; 而mips汇编注释为#
- 变量取值和赋值(传送指令)
;赋值
mov ax,2000H ;将十六进制2000赋值给十六位寄存器ax 相当于ax=2000H
;取值
mov bx,ax ;将ax中的值取出赋值给bx 相当于bx=ax
无论是x86还是arm传送指令都是mov
存放的数据大小根据使用的寄存器而定, 比如ax是16位寄存器,最大只能存放16位数据,也就是4位十六进制数据
- 函数声明
结构如下:
函数名:
函数体
ret ;结尾标记
示例:
print: ;函数名
mov dx,offset str
mov ah 9ch
int 21h
ret ;函数结尾标记
- 函数调用
x86架构中使用关键指令call, ARM架构中使用关键指令bl
x86架构汇编示例:
call print ;调用print函数
;退出程序
mov ah 4ch
int 21h
print: ;函数名
mov dx,offset str;获取别名对应数据的偏移地址
mov ah 9ch ;9h表示调用显存 从dx总读取偏移地址对应的数据
int 21h
ret
ARM架构汇编代码示例:
.text
.global _A,_B ;定义两个全局函数 A和B
_A:
mov x0 ,#0xa0 ;arm汇编中数据用#开头
bl _B ;调用函数B
mov x1 ,#0x00
add x1 ,x0,#0x14 ;x1=x0+0x14
ret
_B:
add x0, x0,#0x10
ret ;返回到bl指令所对应的下一条指令