美文网首页
汇编语言学习(Assembly Language-8086)

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

作者: CrazySteven | 来源:发表于2021-12-11 20:27 被阅读0次

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

    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 参数)

    函数调用流程

    • push参数
    • push函数返回值
    • push bp,保留bp
    • mov bp,sp保留sp
    • sub sp,开辟局部变量
    • 保护可能会用到的寄存器
    • rep stosw使用CC填充局部空间
    • 执行业务逻辑
    • 恢复保护的寄存器
    • mov sp,bp恢复sp
    • pop bp恢复bp
    • ret 将函数返回地址出栈,执行下一条指令
    • 恢复栈平衡

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

    相关文章

      网友评论

          本文标题:汇编语言学习(Assembly Language-8086)

          本文链接:https://www.haomeiwen.com/subject/snmgxrtx.html