170315-汇编 寄存器

1625-5 王子昂 总结《2017年3月15日》 【连续第165天总结】

A. 汇编语言 第二章

B. 一个典型的CPU由运算器、控制器、寄存器等器件构成,这些器件靠内部总线相连。

运算器进行信息处理;

寄存器进行信息存储;

控制器控制各种器件进行工作;

内部总线连接各种器件,在它们之间进行数据的传送

人主要通过用指令读写寄存器来实现对CPU的控制。

8086CPU有14个寄存器,都是16位的,分别是AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,SS,DS,ES,PSW

其中AX,BX,CX,DX四个寄存器通常用来存放一般性的数据,被称为通用寄存器

上一代CPU的寄存器是8位的,因此为了兼容,8086的每个通用寄存器都可以拆分成2个独立使用的8位寄存器使用:

AX=AH+AL;BX=BH+BL ...

AX的低8位构成AL寄存器,高8位构成AH寄存器。

*注意:独立使用的意思是,当对AH、AL等8位进行ADD命令时,如果发生溢出,都不会修改下一个寄存器的值而是直接丢弃

十六进制数的一位相当于二进制数的四位,这一点要牢记。

为了区分进制,十六进制数在末尾加H,二进制加B,十进制不加。

简单的汇编指令:

MOV ax,1000H //将1000H赋值给AX

ADD ax,ax //AX=AX+AX(加法,自增运算)

CPU访问内存单元时,需要先通过地址总线给出内存单元的地址。于是在传输之前,先要在内部形成这个物理地址。不同的CPU有不同的形成方法,这里讨论8086CPU。

8086CPU是16位结构的CPU,也就是说运算器一次最多可以处理16位的数据,寄存器的最大宽度为16位,内部总线的通路为16位

而8086CPU有20位地址总线,可以传送20位地址,达到1MB的寻址能力。那么如何让16位的寄存器给出20位的地址呢?

采用一种叫做地址加法器的结构。

CPU中的相关部件提供两个16位的地址,一个称为段地址,另一个称为偏移地址

16位的段地址左移一位(十六进制左移一位等同二进制左移四位),即末尾置零,再加上偏移地址,即可表示二十位的所有数字

段地址的概念:表示一段(64KB)内存地址,因为偏移地址的大小是有限的(64KB),因此当段地址确定下来以后,这个物理地址的范围就确定下来了。

段寄存器:8086有4个寄存器--CS,DS,SS,ES。当CPU要访问内存时,由这4个段寄存器提供内存单元的段地址。

CS和IP是8086CPU中两个关键的寄存器,它们指示了CPU当前要读取指令的地址。CS为代码段寄存器(段地址),IP为指令指针寄存器(偏移地址)

要改变CS和IP的值,不可以使用MOV,因为CPU不允许这样的命令。但有实现这样功能的指令--JMP

JMP可以同时修改CS和IP的值,只需要JMP 1000:0 ,即可为CS赋值1000,IP赋值0

也可以单独修改IP的值,要使用JMP ax,即可把ax的值赋给IP

8086机中,任意时刻,CPU将CS:IPO指向的内容当做指令执行

工作过程:①从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器

②IP指向下一条指令(自动加若干值,若干值为上一条指令的宽度)

③执行指令,然后调到步骤①循环

8086机提供转移JMP指令来修改CS,IP的内容。这样就可以达到指定命令和顺序的意图了。

win10中没有debug,装dosbox太麻烦了,正好虚拟机里有xp的镜像,明天用它来做实验好了

C. 明日计划

xp的debug实验

java日志

qt安装

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值