码迷,mamicode.com
首页 > 其他好文 > 详细

汇编学习笔记02(寄存器CPU工作原理)

时间:2015-05-12 20:42:00      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:

1. 什么是寄存器呢? 就是可以用指令进行读写的部件. 程序员通过改变各种寄存器中的内容实现对CPU的控制. 如果是16位CPU的话, 就是相当于2个存储单元.

2. 字在寄存器中的存储? 8086CPU可以一次性处理两种尺寸的数据

Byte: 字节型数据, 一个字节由8个bit组成, 可以存在8位寄存器中.

Word: 字型数据, 一个字型由16个bit组成, 也就是两个字节, 称为这个字的高位字节和低位字节.

3. 常用汇编指令的学习(需要注意的是汇编指令是不区分大小写的)

mov ax, 3 将3送入寄存器ax

mov bx, 5 将5送入寄存器bx

add ax, 4 将寄存器ax中的值加4

mov ax, bx 将bx中的数据送入ax中

add ax, bx 将ax中的值和bx中的值相加的结果放入ax中

注意事项: 在进行数据传送和运算时, 要注意指令的两个操作对象的位数应当是一致的.

4. 物理地址: 所以的存储单元构成的存储空间是一个一维的线性空间, 每一个内存单元在这个存储空间中都有唯一的地址, 我们将这个唯一的地址称为物理地址.

物理地址怎么来的呢? 物理地址 = 段地址*16 + 偏移地址

5. 什么是16位结构的CPU?

a. 运算器一次可以处理16位的数据 处理

b. 寄存器的最大宽度为16位 暂存

c. 运算器和寄存器之间的通路为16位 传输

不是总结的总结:

总结1. 一个数据的二进制形式左移一位, 相当于该数据乘以2

一个数据的二进制形式左移N位, 相当于该数据乘以2的N次方

总结2. 一个数据的二进制形式左移一位, 相当于该数据乘以2

一个数据的十进制形式左移一位, 相当于该数据乘以10

一个数据的十六进制形式左移一位, 相当于该数据乘以16

一个数据的N进制形式左移一位, 相当于该数据乘以N

6. 段的概念: 其实内存并没有分段, 段的划分来自于CPU, 因为内存里面就是二进制数据, 没有什么段.

如果段地址是固定的, 变化偏移地址, 而16位的CPU, 变化范围为0 - FFFF, 也就是说最多可以寻64KB个内存单元.

7. 段寄存器: 8086CPU有四个段寄存器: CS, DS, ES, SS

CS(Code Segment)为代码段寄存器, 这个段一般用于存放代码, 通常和IP一起使用, 用于处理下一条执行的代码.

DS(Data Segment)为数据段寄存器, 用于存放数据, 相当C语言中的全局变量

ES(Extra Segment)为扩展寄存器

SS(Stack Segment)为栈段寄存器, 作为栈来使用, 通常和SP一起使用, 存放的数据相当于C语言中的局部变量

  SS为栈段的首地址, SP为栈段的偏移地址

8. IP指令指针寄存器

在CPU中我们能够用指令读写的部件只有寄存器, 我们可以通过改变寄存器中的内容实现对CPU的控制.

通过jmp转移指令来改变CS:IP的值

jmp 段地址:偏移地址 同时修改CS:IP的内容

jmp ax 只修改IP中的内容

9. 任意时刻, CPU都把CS:IP指向的内容当作指令执行

8086CPU的工作过程:

a. 从CS:IP中指向的内存单元中读取指令, 读取的指令进入指令缓冲器

b. IP指向下一条指令

c. 执行指令

d. 重复a, b, c步骤

总结: 自己感觉, 第一章的学习是那么的新鲜和好奇, 而从第二章开始就慢慢的进入了枯燥的过程, 同时也让自己对计算机有了一个崭新的认识, 以前在用C语言或者Java的时候, 只是停在会用的阶段, 你知道再多的函数或者方法也都是只知其表, 而不知其根, 在慢慢的接触Assembly后, 自己对高级语言有了一个更深层次的认识, 知道了他们的运行过程, 知道了代码为什么这么写才是优化, 知道了怎样才能写出更优化的代码. 

自己一直都在坚持:

没有最简化的代码, 只有更简化的代码.

没有最优化的代码, 只有更优化的代码.

 

汇编学习笔记02(寄存器CPU工作原理)

标签:

原文地址:http://www.cnblogs.com/ZeroHour/p/4498325.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!