汇编第二节-寄存器

第二节寄存器

1. 通用寄存器:

AXBXCXDX:可分为两个可独立使用的8位寄存器来用。

AX{AH(高八位0),AL(低八位)} BX{BHBL};同理;

2. 字在寄存器中的存储:

字节(byte):一个字节由8bit组成,可以存在8位寄存器中。

字(word):一个字由两个字节组成,分为高位字节和低位字节。

3. 几条汇编指令:

 Mov  ax18   18送入寄存器AX  ax=18

 Mov  axbx   将寄存器BX中的数据送入寄存器AX  AX=BX

 Add  ax8    将寄存器AX中的数值加上8  AX=AX+8

 (汇编指令和寄存器名不区分大小写)

 寄存器存在溢出:

 比如:add  axbx  ax=bx=8226H  相加后都为1044CH

      但是ax16位寄存器,只能存放4位十六进制的数据,所以高位1不能在ax中保存,ax中的数据为:044CH

Add al93H

CPU在执行这条指令认为AHAL是两个不相关的寄存器。AL溢出不会的项不会加到AH

Add ax,93H:

8位的进位会存储在ah中,执行指令时只有一个16位寄存器ax

 

4. 物理地址:

CPU访问内存单元时,要给出内存单元的地址。所有的内存单元构成的存储空间是一个一维的线性空间,每一个内存单元在这个空间中都有唯一的地址:物理地址

 

5.16位结构CPU

运算器一次最多可以处理16位的数据;

寄存器的最大宽度位16;

寄存器和运算器之间的通路为16位。

 

8086内部能够一次性处理,传输,暂时存储的信息的最大长度为16位。

 

6.8086CPU给出物理地址的方法:

8086CPU20位地址总线,可以传送20位地址,达到1MB寻址能力。

8086CPU16位结构,只能送出16位的地址,表现出的寻址能力只有64KB

段地址和偏移地址————>地址加法器(216位地址合成为一个20位的物理地址)---------->输入输出控制电路----------->地址总线---------->存储器

 

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

(段地址*16 即左移一位)

 

7. 段地址*16+偏移地址=物理地址 的本质含义:

基础地址(段地址*16+偏移地址=物理地址

CPU访问内存时,用一个基础地址和一个相对于基础地址的偏移地址相加,给出内存单元的物理地址

 

8. 段的含义:

段的划分来自于CPU,将若干地址连续的内存单元看作一个段,用段地址*16定位段的起始地址(基础地址),用偏移地址定位段中的内存单元。

CPU可以用不同的段地址和偏移地址形成同一个物理地址。

 

9. 段寄存器:

段地址在8086CPU的段寄存器中存放。8086CPU4个段寄存器:CSDSSSES

 

10. CSIP

CS为代码段寄存器,IP为指令指针寄存器。任意时刻,CPUCSIP指向的内容当作指令执行。

工作过程:

CSIP指向的内存单元读取指令,读取的指令进入指令缓存器;

IP=IP+所读取指令的长度,从而指向下一条指令;

执行指令,转向步骤1,重复过程;

 

CPU从内存FFFF0H单元中读取指令执行,是8086PC机开机后执行的第一天指令)

 

11. 修改CSIP指令:

同时修改CSIP的内容  jmp 段地址:偏移地址

CS存放指令的段地址,IP存放指令的偏移地址

Jmp 2AE3:3 执行后:CS=2AE3HIP=0003H CPU2AE33H处读取指令

用指令中给出的段地址修改CS,偏移地址修改IP

 

仅修改IP的内容 jmp 某一合法寄存器

Jmp ax, 指令执行前:AX=1000HCS=2000H IP=0003H

指令执行后:AX=1000H,CS=2000H,IP=1000H

用寄存器中值修改IP

12. 代码段:

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

 

13. Debug指令:

Debug查看各种寄存器中的内容,内存的情况和在机器码级跟踪程序的运行。

Debug -r 查看,改变CPU寄存器的内容。

Debug -d 查看内存中的内容。

Debug -e 改写内存中的内容。

Debug -u 将内存中的机器指令翻译成汇编指令。

Debug -t 执行一条机器指令。

Debug -a 以汇编指令的格式在内存中写入一条机器指令。

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页