zoukankan      html  css  js  c++  java
  • 汇编语言 第三章 寄存器

    3.1 内存中字的存储:

          在内存存储时,由于内存单元是字节单元(一个单元存放一个字节),所以一个字要用两个地址连续的内存单元来存放,这个字的低位字节存放在低地址单元中,高位字节则会存放在高地址的单元中。

    字单元,即存放一个字型数据的内存单元,由两个地址连续的内存单元组成。高地址内存单元中存放字型数据的高位字节,低地址内存单元中存放字型数据的低位字节。

    3.2 Ds和address:

          CPU想要读取一个内存单元时,必须先给出这个内存单元的地址。8086中有一个DS寄存器,通常用来存放要用的数据的段地址,正常情况下如果我们想要赋值ds会通常用类似:mov ds 1000h的这种赋值方式,但是,现实并不是如此,8086不支持将数据直接送入寄存器的操作,因为ds是寄存器所以上面的方法是非法的,所以我们会先将1000放入一个一般的寄存器,之后再赋值给ds。

    例如 mov bx,1000h

             mov ds,bx

    这样的做法才是比较好的。可以把bx的值放入ds中。

    3.3 3.4 3.5 字的传送 指令 数据段:

          因为80806有16根数据线,所以可以一次性传送16位的数据,也就是说可以一次性传送一个字。

    例如 mov ax 1000h

            mov  ds,ax

            mov  ax,[0]

    前两条指令目的是将ds设为1000h

    之后再将1000:0里存的数据放到ax中。

    用mov指令访问内存单元,可以在mov指令中给出单元的偏移地址,此时,段地址默认在ds寄存器中

    在内存和寄存器之间传送字型数据时,高地址单元和高8位寄存器,低地址单元和低8位寄存器相对应。

    mov,add,sub是具有两个操作对象的指令。而jmp是具有一个操作对象的指令。

    3.6   3.7 3.8 3.9关于栈的相关知识

    栈有2个基本的操作:入栈和出栈。入栈就是将一个新的元素放到栈顶,出栈就是从栈顶取出一个元素。栈顶的元素总是最后入栈,需要出栈时,又最先被从栈中取出。

    在8086中最主要的是push和pop两个操作。 push ax表示将寄存器ax中的数据送入栈中,pop ax表示从栈顶取出数据送入ax。8086中的入栈和出栈的操作都是以字为单位的。

    8086提供了栈的操作机制, 在ss,sp中存放栈顶的段地址和偏移地址:

    提供入栈和出栈指令,他们会根据ss和sp指示的地址,按照栈的方式访问内存单元

    8086只会记录栈顶,栈的空间的大小我们要自己管理。

    用栈来暂存以后需要恢复的寄存器的内容时,寄存器出栈的顺序要和入栈的顺序相反。

     3.10 相关知识

    将一段内存当做栈段,仅仅只是我们在编程时候的安排,CPU并不会由于这种安排,就在执行push和pop等操作指令时自动的将我们定义的的栈段当做栈的空间来访问。

    一段内存,可以既是代码的存储空间,又是数据的存储空间,还可以是栈空间,也可以什么也不是。关于在于CPU中寄存器的设置,即CS,IP,SS,SP,DS的指向。

  • 相关阅读:
    Git从远程分支创建本地分支
    Git删除远程分支
    git查看某次commit的修改
    translatesAutoresizingMaskIntoConstraints
    微信公众平台开发实战Java版之如何网页授权获取用户基本信息
    Oracle中的instr()函数 详解及应用
    eclipse查看方法被那些代码调用open call hierarchy
    Eclipse怎么全局搜索和替换(整个项目)
    Java中的final关键字--浅析
    shell脚本-成长之路
  • 原文地址:https://www.cnblogs.com/QiaoGeGe/p/9821286.html
Copyright © 2011-2022 走看看