汇编学习笔记--寄存器

一个典型的CPU是由运算器、控制器、寄存器等器件组成,对汇编程序员来

说,CPU的主要部件是寄存器,我们可以用它来读写指令,通过改变各种寄

存器的内容来实现对CPU的控制。
8086CPU共有14个寄存器,都是16位的。

通用寄存器
AX,BX,CX,DX--通用寄存器
mov ah,123h
编译会报错,第二个参数超过8位
当计算加法时,若加数太大,导致超过最大值,则高位的值会被忽略

mov al,534h
mov bx,56a2h
add bl,191


物理地址
每个内存单元在空间中都有唯一的地址,这个地址称为物理地址
8086CPU是16位结构的,16位结构包括:运算器一次最多可以处理16位数据

;寄存器最大宽度为16;寄存器和运算器之间的通路为16位。但是,地址

总线有20位,也就是内存空间最大为1M。8086CPU采用一种在内部用两个16

位地址合成的方法形成一个20位的物理地址。
这种合成的方式注定了是不可逆的,也就是合成的正向的结果是唯一的,

但是分解的结果则不唯一。
合成方法:两个16位地址其中一个称为段地址,另一个成为偏移地址
物理地址=段地址*16+偏移地址
16=2<<4,那么对于16进制表示则只是左移一位即可。
实际的内存并没有真的分段,这只是一种描述问题的方法,需要注意两点

:段的起始地址一定是16的倍数,也就是最后一位必须为0(16进制下);

段的最大长度为64KB。


段寄存器:CS,DS,SS,ES
CS和IP是两个最关键的寄存器,CS为代码段寄存器,IP为指令指针寄存器
任意时刻,CPU将CS:IP指向的内容当做指令执行。
mov指令不能用于设置CS、IP的值,能够改变其内容的指令称为转移指令,

一个最简单的指令时jmp指令:
jmp 段地址:偏移地址---CS=段地址  IP=偏移地址
jmp 某一合法寄存器---CS不变,IP=某一合法寄存器

DS表示内存的段地址
操作内存是按如下方式
mov ax,[0]
内存地址为DS:0
?mov ah,[0]  有何不同,区别是从内存中读取一个/两个字节的区别吗

8086CPU不支持将数据直接送入段寄存器的操作(硬件设计的原因)
可以将数据先送入通用寄存器,再从通用寄存器送入到段寄存器


入栈和出栈操作都是以字为单位
任意时刻,SS:SP指向栈顶元素

PUSH ax
SP=SP-2,SS:SP 指向的内存单元值为ax
POP ax
将SS:SP指向的内存的数据送入到ax中
SP=SP+2

你可能感兴趣的:(笔记,寄存器,汇编语言)