标签:原因 寻址 汇编语言 大致 包含 空间 简单 访问内存 基本
汇编指令 |
控制CPU完成的操作 |
用高级语言的语法描述 |
mov ax,18 |
将18送入寄存器AX |
AX=18 |
mov ah,78 |
将78送入寄存器AH |
AH=78 |
add ax,8 |
将寄存器AX中的数值加上8 |
AX=AX+8 |
mov ax,bx |
将寄存器BX中的数据送入寄存器AX |
AX=BX |
add ax,bx |
将AX和BX的数值相加,结果存在AX中 |
AX=AX+BX |
9.16位结构的cpu
运算器一次最多可以处理16位的数据
寄存器的最大宽度为16位
寄存器和运算器之间的通路为16位
10.8086CPU给出物理地址的方法
11.段地址×16+偏移地址=物理地址的本质含义
CPU在访问内存时,用一个基础地址(段地址*16)和一个相对于基础地址的偏移地址相加,给出内存单元的物理地址。
12.修改CS、IP的指令
在CPU中,程序员能够用指令读写的部件只有寄存器,程序员可以通过改变寄存器中的内容实现对CPU的控制。CPU从何处执行指令是由CS、IP中的内容决定的,程序员可以通过改变CS、IP中的内容来控制CPU执行目标指令。
我们如何改变CS、IP的值呢?显然,8086CPU必须提供相应的指令。我们如何修改AX中的值?可以用mov指令,如mov ax,123将ax中的值设为123,显然,我们也可以用同样的方法设置其他寄存器的值,如mov bx,123,mov cx,123,mov dx,123等。其实,8086CPU大部分寄存器的值,都可以用mov指令来改变,mov指令被称为传送指令。
但是,mov指令不能用于设置CS、IP的值,原因很简单,因为8086CPU没有提供这样的功能。8086CPU为CS、IP提供了另外的指令来 改变它们的值。能够改变CS、IP的内容的指令被统称为转移指令(我们以后会深入研究)。我们现在介绍一个最简单的可以修改CS、IP的指令:jmp指 令。
若想同时修改CS、IP的内容,可用形如"jmp段地址:偏移地址"的指令完成,如
jmp 2AE3:3,执行后:CS=2AE3H,IP=0003H,CPU将从2AE33H处读取指令。
jmp 3:0B16,执行后:CS=0003H,IP=0B16H,CPU将从00B46H处读取指令。
"jmp 段地址:偏移地址"指令的功能为:用指令中给出的段地址修改CS,偏移地址修改IP。
若想仅修改IP的内容,可用形如"jmp 某一合法寄存器"的指令完成,如
jmp ax,指令执行前:ax=1000H,CS=2000H,IP=0003H |
段地址在8086CPU的段寄存器中存放。当8086CPU要访问内存时,由段寄存器提供内存单元的段地址。8086CPU有4个段寄存器,其中CS用来存放指令的段地址。
CS存放指令的段地址,IP存放指令的偏移地址。
8086机中,任意时刻,CPU将CS:IP指向的内容当作指令执行。
8086CPU的工作过程:
从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器;
IP指向下一条指令;
执行指令。(转到步骤1,重复这个过程)
8086COU提供转移指令修改CS、IP的内容。
标签:原因 寻址 汇编语言 大致 包含 空间 简单 访问内存 基本
原文地址:https://www.cnblogs.com/onioneer/p/9734450.html