代码怎么生成网站网站如何优化一个关键词
通用寄存器
- AX,BX,CX,DX,是四种通用寄存器,用于保存数据,是数据寄存器
- 四种寄存器容量都为两个字节,是十六位寄存器,表示范围0-65535,216
- 上述四种寄存器都可以分割成对应的2个8位寄存器,
- AX = AH + AL,高八位成为AH寄存器,H是high的意思,低八位是AL寄存器,L是low的意思
- BX = BH + BL
- CX = CH + CL
- DX = DH + DL
上述的八位寄存器,表示范围0-255
- 将16位寄存器分为两种寄存器:
- 为了兼容性,低位寄存器是为了保证原先的八位的就程序也能够读取,原先的CPU仅仅有八位寄存器去书写程序
- 8X86CPU一共有16条数据线,一次可以处理8位数据和16位数据,两种数据
- 8位数据,字节型数据 byte = 8 bits;16位数据,字型数据,2 byte = 16bits,一个字型数据有两个字节型数据构成,分别是高位字节和低位字节,高位字节存在AH,BH,CH,DH,低位字节存放在AL,BL,CL,DL
寄存位实验
寄存器实验1,移动数据
- 在用寄存器移动数据时,数据的位数要和寄存器的容量相适应,AX寄存器是16位寄存器,对应的应该是四个16位进制的数字,不能够将AL八位寄存器的数据转移到十六位寄存器中去,同样的,也不可以将AX16位寄存器中的数据直接传给AL8位寄存器中去
寄存器实验二,加法
八位寄存器,进行八位运算,并不会将多出来的位进到高位寄存器中去,仅仅只会自动清零,然后再接着运算,
总结:
- 寄存器是相互独立的,并不会出现进位的,如果八位计算超出了八位,那就仅仅保存最后的八位,多余的消失。
- 寄存器的加法是与位数相关的,八位寄存器和八位寄存器相加,十六位寄存器和十六位寄存器相加。八位相加出现多于八位,仅保留八位。
- 基本操作 a——输入基本的指令
* r——展示寄存器的值
地址寄存器
- 基本操作 摁“r”,然后在摁“d”,显示出对应的寄存器
- 073F:0100》》段地址:偏移地址
- 段地址:DS,ES,CS,SS
- 偏移地址:SP,BP,SI,DI,IP,BX
- 寄存器的位数是16位,但是CPU是有20根地址线,寄存器的表达局限性,限制了CPU的寻址能力,为了让16位能够表达二十位,就出现了地址加法器,地址的计算方式,将十六位表达,变成二十位表达。
- 地址加法器:段地址 X 16 (十进制的16,10H在十六进制之下) + 偏移地址 = 物理地址
- 段地址 X 16 = 基础地址(就是往后移了一位,扩大了一位,使之能够满足二十位的需求),基础地址 + 偏移地址 = 物理地址
- 实际操作:一个最终的物理地址只要满足公式,都可以找到同样的物理地址,段地址的范围是0 - ffff,只要满足公式,那么最终到达的物理地址都是相同的。
练习题
有一个数据放在内存为20000H的单元格,现在给段地址位SA,若想将偏移地址寻找到此单元格,则SA应该满足的条件最小:10H,最大1001H,这是一个问题,十六位的范围:0 - FFFF,始终少了一个一,而整除的时候会自动舍弃末位的1,所以不可取。
CPU如何区分数据和指令
- u指令:将某个内存地址开始的字节,全部当作指令
- d指令:将某个内存地址开始的字节,全部当作数据
- 两次相同的地址,但是是完全不同的指令,显示的结果也不同
- 两次相同的地址,但是是完全不同的指令,显示的结果也不同
- r + 空格 + ds,修改对应的段地址寄存器的值;r 显示CPU中所有寄存器的值。:
- 虽说内存中的数据和指令是一致的,但是CPU还是能够区分出来,CPU是将CS:IP地址所指向的内容全部当作指令来执行。
在8086CPU,在任意时刻,CPU将CS:IP所指向的内容,全部当作指令去执行
实验——CPU区分指令和数据
将我输入的对应的二进制代码,变成对应的命令去执行,修改CS:IP的地址,让其去执行对应的输入的代码,用e指令修改2000:0的地址,使其为下列相关的地址,去执行。
执行之后,指令行左侧地址已经改变,读取地址,就按照地址里的数据进行执行,问题在于,平常读取数据难道会切换吗?
为什么每一次u都是不一样的,难道再写入数据吗?
指令执行的过程
- CPU从CS:IP所指向的内存单元中读取指令,存放到指令缓存器中去
- IP = IP + 所读指令的长度,从而指向下一条指令
- 执行指令缓存器中的内容,回到步骤一
IP寄存器指令的长度关系
在2000:0中输入如下的数字
修改控制寄存器的命令,然后进行运算。第一次运算,是以b8204e作为第一个控制指令开始计算的,mov占了三个字节,下一次执行,ip的值就会加3。
分别对应的是:
CS:IP 当前控制符的对应的字符串 控制指令 操作的数据
问题是:操作的数据从哪里来?
第一次执行
第二次执行
下述显示的是073F:0100对应的数据形式
下述显示的是073F:0100对应的汇编指令的形式
下述时开始运行
未运行时
JMP指令
- 转移指令,可以修改CS和IP这两个寄存器,决定了CPU从哪里读取数据