汇编语言学习笔记2

本文详细介绍了汇编语言中CPU的组成、寄存器的作用与分类,包括通用寄存器、段寄存器及物理地址的合成原理。通过简单的汇编指令示例,阐述了如何通过寄存器间接控制CPU。此外,还涉及了段地址、偏移地址的概念及其与物理地址的关系,以及代码段、段寄存器和指令指针寄存器的交互作用。最后,提供了使用DEBUG工具查看和修改寄存器内容的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

汇编语言学习笔记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 命令将汇编指令写入内存。。
截图如下。。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值