基础的就跳过了,也就是一开始的16进制运算

我们简要复习一下基础内容

汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。 在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。 在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。

也就是汇编语言经机器转换成二进制机器码让机器执行,汇编语言是最接近计算机的语言。

计算机CPU由寄存器,加法器,控制器和逻辑总线构成,常见的CPU有很多年前的8080和8086CPU

8080CPU是8bit的,一次能处理8位数据,也就是能够一次性处理,传输,暂时存储的信息的最大长度是8位的

8086CPU是16bit的,一次最多处理16位。

8086有20位地址总线,可以传送20位地址,如果从内部来看,只将地址从内部简单的发出,只能传送16位,8086CPU采用从内部用两个16位地址合成的方法(见数字电子技术基础(第七版))来形成一个20位的物理地址。

image-20220215235804963

常用寄存器有AX,BX,CX,DX等等

一般寄存器里面有4个十六进制数,也就代表了16个二进制位。

比如25DC H就代表16进制的25DC,后面的H就是hex(十六进制)的意思。

一般寄存器里面还分低位和高位,比如25就是高位,用AH表示,而DC就是低位,用AL表示。

image-20220216003811837

image-20220216000033711

一些简单的汇编指令如

1
2
3
ax=1111h;
bx=12dch;
mov ax,bx;

就代表将寄存器BX中的内容放到AX中。BX中的值不变。

image-20220216000204929

我们看到

1B = 8bit也就是8个二进制数,最多2^8.

1KB = 1024B = 2^10 B = 2^13 b

1MB = 1024 KB = 2^10 * 2^10 B = 2^20 B

所以后面的

1GB = 2 ^30 Bimage-20220216000515358

如图是内存地址空间。BIOS代表basic input/output system是用来硬件和内存空间之间交互的,就像键盘输入,屏幕输出一样。

CPU内合成20位地址时,提供两个16位地址,一个称为段地址,一个称为偏移地址。

段地址和偏移地址被送进加法器。

加法器用

1
物理地址 = 段地址*16 + 偏移地址  

段地址*16也被称为基础地址。

公式得到20位的地址,显然,段地址16之后就由4位变成5位了。5*4 = 20

image-20220216001156390

image-20220216001243774

上面利用纸条法来形象解释了CPU只能传递16位,用两个16位拼出了20位地址。(上图也是10进制加法的解释)。

其实8086PC机CPU在传递地址访问内存时,必须向内存提供两个16位地址,而且能让他看出来那个20位地址。这是为什么?

如果只提供一个20位地址,会出现什么情况?

对于

1
2
3
4
5
6
7
2160F H = 2000H + 160FH
2160F H = 2160H + 000FH
两种情况都可以。
也就是CPU可以用不同的段地址和偏移地址形成同一个物理地址。
如果给定一个段地址,仅用偏移地址进行寻址,最多可寻64KB个内存单元。
比如10000H - 1FFFFH显然是65535个地址。

1
PC机一般不说数据在2160F单元中,而是说在内存2000:160F单元中,或者说在内存2160:000F中。

image-20220216002837315

先往后看着,太多了,记笔记下来太慢。