数据处理的两个基本问题

132 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。 目录

image.png  

 

两个基本问题

(1)处理的数据在什么地方

(2)要处理的数据有多长

 

寄存器集合

reg表示一个寄存器

sreg表示一个段寄存器

  image.png

 

8086CPU中,只有这四个寄存器能通过[...]进行内存单元寻址

image.png  

[...]中这四个寄存器可以单个出现,或只能以四种组合出现

image.png  

bx和si

bx和di

bp和si

bp和di

 

正确用法

image.png  

 

[...]中使用寄存器bp,而指令中没有显性的给出段地址,段地址就默认在ss中

bp一定意义上就是帮sp减轻负担

image.png

image.png  

 

8.2机器指令处理的数据所在位置

处理数据的三大分类:

读取

写入

运算

 

机器指令这一层不关心数据的值是多少,而关心指令执行前一刻,将要处理的数据所在的位置

 

指令在执行前,索要处理的数据可以在三个地方:

CPU内部、内存、端口

eg:

image.png  

 

汇编语言中如何表达数据的位置

image.png  

image.png 一般来说,偏移地址中不能在未指明段地址时存放常数,但0比较特殊,表示没有偏移地址。

如果直接mov ax,[9]就会报错

 

 

也可通过显性给出段地址强制给[bx]、[bp]指定段寄存器

image.png  

 

寻址方式小结

image.png

 

直接寻址演示过程

1.读取指令

cs ip寄存器中的值放入地址加法器

通过地址总线传送地址,到代码段中读取指令

image.png

image.png  

image.png 将指令拿下来,通过数据总线传入指令缓冲寄存器中

 

image.png  

 

2.直接寻址

CPU执行指令

将ds和000E放入地址加法器中

image.png 从对应地址中读取数值内容

image.png  

从内存中读取数据之后,通过数据总线传入ax中

image.png  

 

寄存器间接寻址

与直接寻址不同处

CPU执行指令

将ds和寄存器中的值放入地址加法器中

image.png  

寄存器相对寻址

与直接寻址不同处

CPU执行指令

将ds和寄存器和指令缓冲寄存器中的直接数放入地址加法器

image.png  

基址变址和相对基址变址寻址自行衍生(依葫芦画瓢)

 

 

8.5指令要处理的数据有多长?

(1)通过寄存器名指明要处理的数据的尺寸

寄存器指明指令进行字操作

image.png  

 

(2)在没有寄存器名存在的情况下,用操作符X ptr指明内存单元的长度,X在汇编指令中可以为word和byte

强调为字型数据

image.png 强调为字节型数据

image.png 用word ptr和byte ptr显性地指明索要访问的内存单元的长度

 

 

(3)其他方法

有些指令默认了访问的是字单元还是字节单元

 

比如push [1000h]就不用指明访问的是字单元还是字节单元

因为push指令只进行字操作