汇编语言学习笔记2--寄存器
一个cpu是由运算器,控制器,寄存器等期间组成,这些器件是有内部总线连接的。运算器进行运算(信息处理),寄存器进行信息存储的,控制器进行控制各种期间的工作。程序员对cpu的控制就是通过指令改变寄存器中的存储信息进行间接地控制cpu的。当然不同的cpu,寄存器的结构个数不尽相同。8086cpu具有14个寄存器分别是
ax,bx,cx,dx,si,di,ss,cs,ds,es,bp,sp,ip,psw(程序状态字寄存器)。各个寄存器的名字用途以后慢慢介绍.当然限于本人水平目前介绍的都是16位寄存器,本人的学习目前也是限于16位汇编语言。
这些寄存器又按照用途分为不同的寄存器种类。
通用寄存器--用来存放一般性的数据(ax,bx,cx,dx)这四个寄存器可以相应的划分成两个8位寄存器使用,可以方便的进行字节操作。例如ax->ah+al,bx->bh+bl;这四个通用寄存器都可以这样划分使用,呵呵凡是xl都表示低8位(0-7位—),xh都表示高8位(8-15位)注意其他的寄存器可不能转换成两个使用。
寄存器的存储
16位寄存器可以存放一个字单元的信息,高8位存放高字节,低八位存放低字节。下面介绍几条简单的汇编指令进行练习。
mov ax,12 ;
呵呵此处解释一下汇编指令语句一般都是有原操作数(前边),目的操作数(后边)组成,两个操作数中间用逗号隔开,后边的分号相当于C语言中的//起到了揭示书名分隔符的作用(有一定的其他编程语言基础的童鞋你懂的)
此语句就是将操作数12移动到ax寄存器中 mov就是英文单词move移动的意思么。在汇编语言中这类汇编指令很常见以后不再讲解。
物理地址
cpu访问内存单元总要有地址才能访问,而物理地址是由段地址*10H+偏移地址组成的(以后解释,寻址方法很多很实用,但是也是很难掌握的) 8086的上代产品4004是4位结构,8080和8085是8微结构到了8086就成了16微结构。这其中的意思是cpu一次性处理信息的位数,呵呵目前的cpu不是32位么。。。。8086cpu用两个16位地址合成一个20位地址来增大自己的寻址空间(cpu寻址范围越大,cpu性能越好,就能快捷的访问更多的数据),这就引出了段地址,偏移地址。。基本寻址操作是这样的:
1 cpu相关器件提供两个16位地址,
2 地址加法起将两个地址合成一个20位地址
3 地址加法器将合成地址传送到相应控制电路
4 控制电路将合成地址送到地址总线
前边所说的 物理地址=段地址*16(或10H)+偏移地址;具体解释为16地址中每一位都是二进制位其中16不就是2的4次方么。换成16进制不就是10H么(这个你也懂得)。所以16微结构的cpu就能够进行20位寻址了。不过段的概念是比较难懂的。
段的解释
段地址就是说的段概念。虽然成为段,但是存储单元并没有划分成一个一个的段,划分成段的说法只是为了好管里,好理解,实际上并没有进行划分。由于前边的说法物理地址=段地址*16+偏移地址。那么段地址一定能被6整除喽。就是每个段的起始地址都是16的倍数。
另外除了通用寄存器,xs类的寄存器叫做段寄存器,这个正好和和物理地址的合成相对应,其中cs是重点要介绍的。cs是代码段寄存器,相应的ip是指令指针寄存器,这二者和起来共同确定cpu所处理的指令地址当然他们二者共同确定cpu将要执行的指令地址。也是遵循20位物理地址合成规则cs:ip指向的地址就是cpu将要执行指令的的地址。此时cpu没执行一条指令ip的值都会自加2,cpu工作简介如下
1 cpu从cs:ip指向的存储单元取指令,把指令放入指令缓冲器
2 cpu执行指令
3 ip自动加2
4 执行下一条指令呗。
不过 8086cpu电启动时cs初始值=F000H,ip=FFFFh
修改cs和ip的指令
一般的mov指令可以对大多数寄存器进行操作。但是ipcs寄存器就不能这样用。此时就用jmp指令jmp就是jump缩写呗 若是单纯的想修改ip里边的数值可以 jmp xx这样段地址不便偏移地址就到了xx处。若是同时修改就是
jmp 段地址:偏移地址 完成。。当然也可以 jmp ax(等其他通用寄存器)。。意思是ip的偏移地址跳转到其他通用寄存器存储的数值地方去,相当于mov ip,ax。只是这条指令cpu是不执行的。
代码段。。
对于代码段也不是无穷大无限制的8086pc机定义最大段不能超过64Kb
关于课后实验解析
debug解释:dos windows提供的实模式调试工具,用来查看寄存器内容,内存情况
debug相应的命令
r: 查看,改变寄存器的数值

使用方法 debug情况下输入 r 寄存器 就显示寄存器数值 然后等待你输入数值进行修改(途中我输入了1) 若是不想修改直接按 enter键跳过。
其他命令相应如上格式 。。一截图为主。。

d命令查看内存。。。相应操作如图。。。。
e 命令可以进行内存的改写。。。
u 命令是进行将机器指令翻译成汇编指令
t 命令是执行一条汇编指令
a 命令将汇编指令写入内存。。
截图如下。。
