汇编语言学习(Assembly Language-8086)

2021-12-11  本文已影响0人  CrazySteven

利用闲暇时间学习了小码哥的汇编课程,平时能用到的不多,做个笔记记录一下

1.与机器语言一一对应,可相互编译反编译
2.一般不能反编译出高级语言
3.不区分大小写

地址合成

段地址:1200H
偏移地址::1000H
物理地址:段地址16+偏移地址=1200H10H+1000H = 12000H+1000H=13000H(*16就是加个0)
单位:
字节:byte,1个字节由8bit组成,可以存储在8位寄存器中
字:word,1个字由2个字节组成,分别称为高字节和低字节

寄存器

通用寄存器:AX,BX,CX,DX
段寄存器:代码段(Code Segment),数据段(Data Segment),堆栈段(Stack Segment),附加段(Extra Segment)
指针寄存器:指令指针寄存器(IP),栈顶指针寄存器(SP),基指针寄存器(BP)

8086CPU工作过程:

1.从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器
2.IP=IP+指令长度,从而指向下一条指令
3.重复1

Jmp

Jmp到 段地址:偏移地址
直接jmp到 偏移地址

注释:

;

大小端

大端模式,指数据的高字节保存在内存的低地址中,数据的低字节保存在内存的高地址中

数据段DS

全局变量的地址在编译的时候就已经确认了,偏移地址固定,作为数据段的段地址,mov ax,[address]就是取出DS:address的内存数据放到ax寄存器中

代码段CS

作为代码段的段地址,将CS:IP指向的指令作为下一条需要取出执行的指令,存放程序员写的代码

栈段SS

作为栈段的段地址,任意时刻,SS:SP指向栈顶元素,局部变量,push入栈,写入数据,栈指针下移,pop出栈,数据赋值,栈指针上移,push入栈和pop出栈,出栈入栈都是两个字节

栈平衡

定义:函数调用前后的栈顶指针要一致,若不平衡,栈空间将会用完,如死循环
栈平衡方法:
1.外平栈(add sp +参数)
2.内平栈(ret 参数)

函数调用流程

版权声明:本文为 Crazy Steven 原创出品,欢迎转载,转载时请注明出处!

上一篇下一篇

猜你喜欢

热点阅读