第一章 基础知识
硬件的体系结构
机器指令 | 二进制数字 | 解析成高低电压,电子元件收到驱动,进行运算 |
机器语言 | 机器指令的集合 | 每一种cpu设计上的不同导致机器语言的不同 |
汇编语言 | 一种需要解释的语言 | 为了将机器指令表示为一些易记得符号 |
存储器 | 放置指令和数据的容器 | cpu运行的关键 |
存储单元 | 存储器计量单位 | 单位为1byte=8bit 1024b=1k |
地址总线 | 储存单位的地址 | cpu和其他元件通信的导线 |
数据总线 | 数据 | cpu和其他元件通信的导线 |
控制总线 | 选项,读或写 | cpu和其他元件通信的导线 |
地址线宽 | 寻址范围 | 一根导线可以发出两种信号,n根导线2的n次方 |
数据线宽 | 传输速度 | 1次传输为n根导线的数据 |
随机存储器RAM | 存放程序和数据 |
|
只读存储器ROM | Bios |
|
内存地址空间 | 统一的存储器访问方式 |
|
运算器 | 信息处理 |
|
控制器 | 控制 |
|
寄存器 | 信息存储 |
|
Ax 16位一个字 | Ah+al | 高八位加第八位 |
Mov Ax,[0] | 将段ds寄存器内存地址偏移0个单位,取一个字 |
|
cpu栈的实现 | 如何将一个段地址表示为栈,任意时刻ss:sp指向栈顶 | 利用ss段存储器和sp偏移存储器 |
段 | 一段内存 数据段代码段栈段 | 对于数据段只要将地址放置ds寄存器 代码段放置cs 栈段ss |
code段,data,stack段 | Code-1=stack | Code-2=data |
X86汇编指令
Mox ax,18 | 将18送入寄存器AX | AX=18 |
Mov ah,78 | 将78送入寄存器AH | AH=78 |
Add ax, 8 | 将AX寄存器的值加8 | AX=AX+8 |
8086是16位结构的cpu就是说数据传输,寻址范围为2的16次方也就是65k
外部地址总线为20位,有1m寻址能力。cpu只能使用65k的存储单元
于是cpu采用了两个16位地址合成一个20位的方法
CPU相关部件提供两个16位的地址,一个为段地址,一个为偏移地址
段地址和偏移地址通过数据总线送入一个地址加法器的部件
将两个16位地址合并成一个20位物理地址
地址加法器将20位物理地址送入输入输出控制电路
输入输出控制电路将20位地址送到外部地址总线
外部地址总线送到存储器
地址加法器采用 段地址*16+偏移地址的方式和成物理地址
比如8086CPU访问物理地址为123c8h的内存单元
1230 1230*16=12300
00c8 00c8
一个十进制数向左移动一位等于这个数乘10
一个2进制数向左移动一位等于这个数*2
一个16进制数向左移动一位等于这个数*16
段地址*16+偏移地址的方式和成物理地址的本质就是为了使2个数相加表示一个大的数
CPU中cs:ip就是段地址和偏移地址,cs和ip提供了指令的地址 8086加电启动和复位后cs指向ffffh ip指向0000h
mov不能修改csip的值只有转移指令可以修改
栈
last in first out
push ax 由两部完成
1 sp=sp-2 ss:sp指向新的栈顶
2 将ax的值送入新的栈顶
cpu在设置栈时,必须是往低地址存,从低地址取,所以说栈顶是由高地址向低地址增长
push ax
1 将栈顶的值取到ax
2 将sp+=2