汇编语言->编译器->机器语言(计算机所识别)
汇编语言组成
-> 汇编指令
-> 伪指令
-> 其他符号
预备知识
CPU80x86微处理器结构
寄存器: 存储0/1串
寄存器组:有8个32位寄存器
数据寄存器组:EAX(累加器),EBX(基址寄存器),ECX(计数器),EDX(数据寄存器)
指示器组:ESI(源变址寄存器),EDI(目的变址寄存器),ESP(堆栈指示器),EBP(堆栈基址寄存器)
指令预取组件
指令指示器:EIP/IP保存着下一条被CPU执行的指令的偏移地址
分段和分页部件
虚拟存储空间->分段部件->一堆线程地址->分页部件->物理存储空间
6个16位的段寄存器
CS:代码段寄存器
DS:数据段寄存器
SS:堆栈段寄存器
ES:附加数据寄存器
FS/GS
三种工作方式
1.实地址方式
相当于8086 CPU32位/16位数据总线/20位地址总线
2.保护方式
支持多任务环境的工作方式,建立保护机制
存储区采用分段/分页的存储管理机制
为每个任务提供一台虚拟处理器
3.虚拟8086方式
主存储器(内存)
基本单位:bit(位)
1byte = 8bit 字节是最小的寻址单位
相邻的两个字节组成一个字,四个连续的字节组成双字
字地址:低字节的地址
字数据:低8位在低字节,高8位在相邻的高字节
CPU通过不同总线结合控制和传达指令和数据
1.地址总线
->一个CPU有N根地址总线,一次可以处理数值2^N数据量大小
2.数据总线
->数据总线宽度决定CPU和外界数据传输速度
3.控制总线
堆栈
特点:一端固定,另一端活动,只允许在活动一端插入或删除数据
// 建立一个16位段,地址的形式是16位段地址,16位偏移,使用16位寄存器SP指向栈顶
MY_S SEGMENT USE16 STACK
MY_S ENDS
1.PUSH OPS
将立即数,寄存器,段寄存器,存储器中的一个字/双字数据压入堆栈中
2.POP OPS
将栈顶元素弹出送至某一寄存器,段寄存器(CS除外),存储器中
3.PUSHA/PUSHAD
将8个16/32位寄存器内容顺序入栈
4.POPA/POAD
将8个16/32位寄存器内容顺序出栈
物理地址形成
分段
段址 * 16 + 偏移地址 = 物理地址
段中某一存储单元的地址是用两部分来表示的”段首地址:偏移地址”,称它为二维的逻辑地址
代码段中取指令时
PA = CS 左移四位+ IP
数据段中读/写数据
PA = DS/ES 左移四位 + 16位偏移地址
堆栈操作时
栈顶的物理地址 PA = SS 左移四位 + SP
隔离手段
CPU特权级 3级应用程序 / 2级扩展级别程序 / 1级操作系统和程序服务 / 0级内核级
段信息 - 描述符
描述符表
局部描述符表
全局描述符表