NoteDeep
指令
mov
add
jmp
sub ax, bx (ax <- ax - bx)

P26
1字 = 2字节

CPU概述

组成

运算器、控制器、寄存器等
这些期间通过内部总线相连

寄存器

8086CPU有14个寄存器, 名称:
AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW
通用寄存器不会改变

通用寄存器:
8086CPU的所有寄存器都是16位的, 可以存放两个字节
AX、BX、CX、DX是通用寄存器

AX的逻辑结构
18放入AX中:
字在寄存器中的存储
通用寄存器可以分为两个8位寄存器独立使用
AH:高位 AL:低位
BH/BL
CH/CL
DH/DL

几条汇编指令

可以大写, 也可以小写
当存放的值大于寄存器的上限时, 寄存器会把溢出的值放到别的地方----

物理地址

所有的内存单元构成的一维的线性空间, 将这个唯一的地址称为物理地址

16位结构的CPU

特征
1.运算器一次可以处理16位数据
2.寄存器最大宽度位16
3.寄存器和运算器之间的通路是16位的

8086CPU物理地址

有20位地址线, 寻址能力1M
内部为16位结构, 只能传送16位的地址, 表现出的寻址能力为64K
将两个16位地址合成的方法形成一个20位的物理地址
地址加法器
物理地址 = 段地址 * 16 + 偏移地址(即段地址左移四位)
CPU可以通过不同的段地址和偏移地址形成同一个物理地址。
描述:
21F60H:2000:1F60单元
2000段中的1F60单元

段的概念

将若干地址连续的内存单元看作一个段
段地址 * 16 定位段的起始地址, 用偏移地址定位内存单元
短地起始地址一定是16(最低)的倍数, 一个8086的寻址能力为64kB, 段的最大长度为64kB

段寄存器

8086CPU有四个段寄存器
CS、DS、SS、ES

CS(代码段)、DS(数据段)、SS(堆栈段)、ES(附加段)

CS和IP
CS为代码段寄存器
IP为指令指针寄存器(偏移地址)

指令读取过程
1.CS:IP指向内存单元读取指令, 读取的指令进入指令缓冲器
2.IP = IP + 所读取的指令长度, 指向下一条指令
3.执行指令, 转到步骤一, 执行下一条指令

工作过程
初始化(开机、复位):CS = FFFFH, IP = 0000H, CPU从内存FFFF0H单元中读取指令执行

修改CS:IP的指令
在CPU中, 程序员只能用指令读写寄存器, 可以改变寄存器中的内容实现对CPU的控制
CPU从何处执行指令是由CS:IP决定的, 可以通过改变CS:IP中的内容来控制CPU执行目标指令

如何改变CS:IP的值
专门指令:转移指令
jmp 段地址:偏移地址
jmp 2AE2:3

仅修改IP中的内容, 用寄存器的值修改IP
jmp 某一合法寄存器
jmp ax (类似于mov IP, ax)
jmp bx

代码段
将长度为N(N <= 64KB)的一组代码, 存在一组地址连续, 起始地址为16的倍数的内存单元中, 这段内存是用来存放代码的, 从而定义了代码段
代码段的存在是人为的安排, CPU并不care
执行代码段需要将CS:IP的指向代码段的第一个字节的地址

P47

实验一 : 查看CPU和内存, 用机器指令和汇编指令编程

Debug

调试工具, 也可以用来写程序
不区分大小写

win10 64位安装 DOSBox
将debug改成debug32

debug32.zip 55.9 kB


R:命令查看、改变CPU寄存器的内容

D:命令查看内存中的内容

查看指定范围的内存

E:命令改写内存中的内容

U:命令将内存中的机器指令翻译成汇编指令u

T:命令执行一条机器指令

A:命令以汇编指令的格式在内存中写入一条机器指令





评论列表

    CPU概述实验一 : 查看CPU和内存, 用机器指令和汇编指令编程