汇编-寄存器

来源:互联网 发布:韩国网络女主播李秀彬 编辑:程序博客网 时间:2024/05/22 06:27

一个字可以存放在16位寄存器中,这个字的高位字节和低位字节自然就存放在这个寄存器的高8位寄存器和第八位寄存器中。
在对寄存器进行计算的过程中,在计算单个寄存器的时候会出现丢失,但是这里的丢失指的是进位制不能在8位寄存器中保存,但是CPU并不是真的丢弃这个进位值。

  1. 物理地址
    所有的内存单元构成的存储空间是一个一维的线性空间。我们将这个唯一的一维的线性空间的地址称之为物理地址。

  2. 8086CPU给出物理地址的方法
    CPU的相关部件提供两个16位的地址,一个称为段地址,另一个称为便宜地址;
    段地址和偏移地址通过内部总线送入一个被称为地址加法器的部件;
    地址加法器将两个16位地址合并成为一个20位的地址;
    在CPU看来内存并不分段的只是人为的将内存进行分段,内存是线性的只是为了方便管理在进行管理的时候人为的将内存分为几个不同的段;

  3. CPU访问内存单元的时候必须向内存单元提供内存单元的物理地址;
    如果给定一个段地址,仅通过变化偏移地址来进行寻址最多可以定位64K的内存单元;
  4. 数据在21F60H内存单元中。对于8086PC机中有两种描述:
    (a)数据存放在2000:1F60单元中
    (b)数据存在内存的2000段中的1F60H单元中

在windows7上进入DOS形式的步骤:
打开DOSBox输入:mount c d:\
再输入:c:
在输入:debug
命令的形式:
书本的第二章的主要内容就是学会操作这几个命令,并能够在学习汇编的时候将这几个命令熟练的运用

  • R:命令查看、改变CPU寄存器的内容
  • D命令查看内存中的内容
  • E命令改写内存中的内容
  • U命令将内存中的机器指令翻译成汇编指令
  • T命令执行一行机器指令
  • A命令以汇编指令的格式在内存中写入一条机器指令

在开始汇编的时候可以使用
-a 2000:0 开始写汇编程序就会在2000:0的地址处开始书写汇编语言

内存中字的二道存储;
在8086CPU中有一个DS寄存器,通常用来访问要访问的数据得到段地址;
mov的作用

  1. mov将数据直接送入寄存器;
  2. 将一个寄存器中的内容送入另一个寄存器;
  3. mov指令还能将一个内存单元中的内容送入一个寄存器;
  4. mov指令的格式
  5. mov寄存器名,内存单元地址
  6. “[…]”表示一个内存单元,”[…]”中的0表示内存单元的偏移地址。
  7. 执行指令的时候8086CPU会自动获取DS中的数据为内存单元的数据段地址;

8086CPU出栈都是以字为单位进行的,字就是两个字节,是16位的注意与字节的区分;
push ax:将寄存器ax中的数据送入栈中;
pop ax:从栈中取出数据送入ax中去;
寄存器CS和IP中存放着当前指令的段地址和偏移地址
8086CPU中,有两个寄存器:
段寄存器SS 存放栈顶的段地址
寄存器SP 存放栈顶的偏移地址
任意时刻,SS:SP指向栈顶元素
硬盘在进行格式化的时候只是更改了前面的索引,并不是真的将里面的数据进行删除的操作,所以硬盘在进行格式化之后还能将里面的数据进行会大幅
堆是一对零碎的内存,是使用线性表连接起来的,因此使用堆一定记得释放内存。
栈的范围为0~ffffH,从栈空的时候SP = 0,一直压栈,直到栈满时SP = 0,如果再次压栈,栈顶将环绕,覆盖原来栈中的内容。
栈的存在就是为了函数的调用,以及函数的封装,就像局部函数中的变量在局部函数调用结束的时候消失不见,这就是因为堆栈在局部函数调用结束的时候会把堆栈返回给主函数这样堆栈中局部函数的内容就将被覆盖。

在C语言中嵌入汇编语言的好处就是能够防止,函数的寄存器堆栈信息被C语言破坏。