2021-09-06 19:25:33

2.寄存器-汇编8086-读书笔记2

寄存器

cpu: 运算器、控制器、寄存器。

通用寄存器

AX,BX,CX,DX

8086的CPU寄存器

寄存器 作用 说明
AX 通用寄存器,存放一般性数据。为了兼容老版的8为寄存器,又分为了AH和AL
BX 通用寄存器,存放一般性数据。
CX 通用寄存器,存放一般性数据。
DX 通用寄存器,存放一般性数据。
SI
DI
SP 栈的偏移地址
BP
IP 指令指针寄存器
CS 代码段寄存器。 code stack。指向指令
SS 段寄存器。stack stack。指向栈顶的段地址。SS:SP 指向栈顶元素。
DS 段寄存器。 data stack 。指向数据。 mov AX, [0], 转移内存中的值时,DS指定内存的段地址。
ES 段寄存器
PSW

字在寄存器中的存储

8086CPU所有的寄存器都是16位的,可以存放2个字节。也是俗称的一个字。

一个内存单元可以放8位数据,即8Bit, 1Byte。

H = Hex

B = Binary

几条汇编指令

汇编指令示例

汇编指令 控制CPU完成的指令 用高级语言和描述
mov ax, 18 ax = 18
mov ah, 78 ah = 78
add ax, 8 ax = ax +8
mov ax,bx ax = bx
add ax,bx ax = ax+bx

AX = AH+AL, 当AL+数 进制后,不会存到AH, 而是直接抛弃。 是否进位有个单独的寄存器存放。

物理地址

16位结构的CPU

CPU特征

  1. 运算器一次最多可以处理一个字的数据。
  2. 寄存器的最大宽度为一个字宽。
  3. 寄存器和运算器之间的通路是一个字宽。

8086给出物理地址的方法

  • 8086有20位地址总线,可传送20位地址,寻址能力为1M =
  • 8086内部为16位结构,它只能传送16位的地址,表现出的寻址能力还有64K =

8086CPU采用一种在内部用两个16位地址合成的方法来下形成一个20位的物理地址。即段地址+段偏移

段地址x16+偏移地址=物理地址 的本质含义

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

20位-16位 多出来的4位 能表示 16个值。()

段的概念

内存是连续的内存单元,但是由于CPU的局现性,不得不用 段+偏移量 来表示一个内存地址。

所以看起来就是一个一个段。

段寄存器

CS、DS、SS、ES。

CS和IP

在8086机中,任意时刻,CPU将CS:IP 指向的内容当做指令执行。

8086CPU的工作过程

  1. 从CS:IP 指向的内存单元读取指令,读取的指令进入指令缓冲器。
  2. IP=IP+所取指令的长度,从而指向下一条指令。
  3. 执行指令,回到1.

修改CS和IP

如何修改CS、IP寄存器

  1. jmp 段地址:偏移地址 执行后。CS=段地址, IP=偏移地址
  2. jmp 合法的寄存器: 执行后,IP的内容 更新为 合法的寄存器的内容。

代码段

我们可以将长度为N的一组代码,存在一组地址连续、起始地址为16的倍数的内存单元中,我们可以认为,这段内存是用来存放代码的,从而定义了一个代码段。

设置好CS和IP 就好。

Debug

R 查看/改变 CPU寄存器的内容

D 查看内存中的内容

U 查看内存中的内容,会翻译成汇编指令。

E 改写内存中的内容。

A 改写内存中的内容,汇编指令的格式。

T 执行一条机器指令。

本文链接:http://blog.go2live.cn/post/assemble-2.html

-- EOF --