[001][x86汇编语言]1.计数法 2. 处理器、内存和指令

使用书籍《x86汇编语言:从实模式到保护模式》

https://www.jianshu.com/p/d481cb547e9f

学习笔记

前言部分

尽管汇编语言不适合用来编写大型程序,但它对于理解计算机原理很有帮助,
特别是处理器的工作原理和运行机制。就算是为了这个目的,也应该让汇编语言回归它的本位,
那就是访问和控制硬件(包括处理器),而不仅仅是编写程序,
输入几个数字,找出正数有几个、负数有几个,大于30的有几个。

事实上,汇编语言对学习和理解高级语言,比如C语言,也有极大的帮助。
直接访问硬件,发挥汇编语言的长处,才能深刻体会到汇编语言的妙处。

第1章 计数法

  • 学习汇编语言,要能够在二进制(Binary)、十进制(Decimal)、十六进制(Hexadecimal)这三种进制之间熟练地进行转换

[进制转换] 十进制 二进制 十六进制 8421码
https://www.jianshu.com/p/e2c4943eb945

  • 使用 Windows 自带计算器进行多种进制计算


    windows 自带计算器,菜单-查看-程序.PNG

    使用 Windows 自带计算器进行多种进制计算.PNG
  • 在线进制转换计算工具

http://tool.oschina.net/hexconvert/

https://codebeautify.org/decimal-hex-converter

https://octave-online.net

octave-online.net

输入十六进制  0xF
十进制转十六进制 dec2hex(0xF)
octave-online.net 十进制转十六进制 dec2hex(0xF)

第2章 处理器、内存和指令

概念

  • 处理器(processer)
以自己的生活经验来尽力理解这些名词,做了下面的类比:

INTEL 8086 
Sony PlayStation 2/3/4

INTEL x86 处理器家族
Sony PlayStation 系列
  • 引脚(pin): 可以接受从外面来的信号,或者向外发出电信号
复用:可以重复使用的引脚
  • 寄存器(register):本质是电路
双向器件,可以在一端接受输入并加以锁存,同时,它也会在另一端产生一模一样的输出

寄存器可以保存 4比特、8比特、16比特的数据
分别被叫做 4位、8位、16位寄存器
现在的寄存器,一般都是32位、64位甚至更多

(字节)1 Byte = 8 bit
(字)1 word = 16 bit
(双字)1 double word = 32 bit

字节
|7 6 5 4 3 2 1 0|

字
|高字节  |低字节  |

双字
|高字        |低字        |
  • 算术逻辑部件(ALU,arithmetic logic unit):专门负责运算的电路
加 减 乘 除 逻辑运算
  • 存储器(storage、memory):本质也是电路
内存条
内存储器或主存储器
内存或主存
《x86汇编语言:从实模式到保护模式》 内存和内存访问示意图

《x86汇编语言:从实模式到保护模式》 第13页

  • 指令(instruction):本质是数
机器指令,是集中放在内存里的,一条接着一条;
处理器的工作就是自动按照顺序取出并加以执行。
  • 低端字节序(little endian)
对于Intel处理器来说,如果访问内存中的一个字,高字节位于高地址部分,低字节位于低地址部分
  • 立即数(immediate operand)
指令执行和操作的对象是数时,
如果这个数已经在指令中给出了,不需要再次访问内存,那么这个数就是立即数;
相反,如果指令中给出的是地址,真正的数还需要用这个地址访问内存才能得到,那么它就不能称为立即数。
  • Intel 8086 处理器
Intel 8086 处理器 是 intel 公式第一款16位处理器,诞生于1978年(距今整整40年前);
是整个 Intel 32位架构处理器(IA-32)的开山鼻祖。
  • 段:代码段与数据段
完成某个工作的所有指令,必须集中在一起,处于内存的某个位置,形成一个段,叫做代码段;
程序要操作大量的数据,这些数据应该集中在一起,位于内存中的某个地方,形成一个段,叫做数据段。
  • 物理地址:真实的内存地址
在编写程序时,只能使用相对地主或者逻辑地址,而不能使用真实的物理地址
  • 逻辑地址: 段地址:偏移地址
《x86汇编语言:从实模式到保护模式》8086处理器内部组成框图.png

《x86汇编语言:从实模式到保护模式》 第22页

代码段寄存器 code segment CS
数据段寄存器 data segment DS
附加段寄存器 extra segment ES

指令指针 instruction pointer IP

CS 指向代码段的起始地址
IP 指向段内偏移
CS与IP 共同形成逻辑地址,并由总线接口部分变换成物理地址来取得指令
  • 段的个数、段的长度 与 内存大小 计算
段的个数 x 段的长度 = 内存大小
内存按字节Byte来组织,一个内存单元存一个字节

1MB 的内存 = 1M 个内存单元 = 2^10K 个内存单元 = 2^20 个内存单元
------------------------------------------------------------------------------
2^16   x   2^4     = 2^20
段数    单个段长度    内存大小

单个段长度是 2^4 = 16 个字节
偏移地址从 0000~000FH

------------------------------------------------------------------------------
2^4   x   2^16     = 2^20
段数    单个段长度    内存大小

段数 = 2^4 = 16 段

段地址
0000H
1000H
2000H
...
F000H
------------------------------------------------------------------------------

Intel 8086 的段寄存器和IP寄存器都是16位的,
16位的物理地址只能访问 64KB(2^16 Byte = 2^6 KB = 64 KB)的内存,
地址范围是 0000~FFFFH,共65536个字节。

偏移地址要求从 0000H 开始,8086处理器的逻辑分段,起始地址都是16的倍数,称为按16字节对齐。

段地址 如果是 DS = 8226H
段的长度最长可以是 64KB
对应的逻辑地址范围是 8226H:0000H ~ 8226H:FFFFH
转换成物理地址范围是 82260H ~ 9225FH
dec2hex(0x82260+0xFFFF) ans = 9225F
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 8086汇编 本笔记是笔者观看小甲鱼老师(鱼C论坛)《零基础入门学习汇编语言》系列视频的笔记,在此感谢他和像他一样...
    Gibbs基阅读 37,857评论 8 114
  • 编程语言的发展 机器语言由0和1组成 汇编语言(Assembly Language)用符号代替了0和1,比机器语言...
    阿凡提说AI阅读 9,920评论 0 15
  • 王爽汇编全书知识点大纲 第一章 基础知识 机器语言 汇编语言的产生 汇编语言的组成 存储器 cpu对存储器的读写 ...
    2c3ba901516f阅读 7,332评论 0 1
  • 一个典型的 CPU由运算器、控制器、寄存器等器件构成,这些器件靠内部总线相连。前面所说的总线,相对于 CPU 而言...
    刘桂良阅读 5,551评论 1 3
  • 初识汇编 我们在学习逆向开发之前,我们要了解一个基本的逆向原理.首先我们是逆向iOS系统上面的APP.那么我们知道...
    SunnyLeong阅读 4,610评论 0 3

友情链接更多精彩内容