首页 > 系统相关 >三--寄存器(内存访问)

三--寄存器(内存访问)

时间:2022-08-21 11:23:51浏览次数:70  
标签:-- SP mov 内存 寄存器 ax 单元

3.1内存中字的存储

  内存单元是字节单元(即一个单元存一个字节)

  一个字用两个地址连续的单元存放,低位字节存在低地址,高位字节存在高地址

  字单元:存放一个字型数据(16位)的内存单元,由两个地址连续内存单元组成

  将起始地址为N的字单元简称为N地址字单元

3.2DS和[address]

  ds:通常用来存放要访问的数据的段地址

  [...]表示一个内存单元,"..."是偏移地址,cpu自动取ds中的数据作为内存单元的段地址

  如何用mov指令从10000H中读取数据:先将段地址1000H放入ds,然后用mov al,[0]

    但8086不支持将数据直接送入段寄存器,所以:

      mov bx,1000H

      mov ds,bx

3.3字的传送

  8086有16根数据线,在mov指令中给出16位的寄存器就能进行字的传送

3.4mov、add、sub指令

  mov指令可有以下形式:

    mov  寄存器,数据    如:mov ax,8
    mov  寄存器,寄存器   如:mov ax,bx 
    mov  寄存器,内存单元  如:mov ax,[0]
    mov  内存单元,寄存器  如:mov [0],ax
    mov  段寄存器,寄存器  如:mov ds,ax
    mov  寄存器,段寄存器  如:mov ax,ds
    mov  内存单元,段寄存器 如:mov [0],ds
    mov  段寄存器,内存单元 如:mov ds,[0]

  add、sub同mov

3.5数据段

  将一段内存当作数据段,是我们在编程时的一种安排,即用ds存放数据段的段地址
3.6栈

  栈:后进先出(LIFO:last in first out)

3.7cpu提供的栈机制

  push ax将AX中的数据入栈

  pop ax从栈顶取出数据送入AX

  8086的入栈和出栈以字为单位

  SS:栈顶的段地址,SP:栈顶的偏移地址 (SS是段寄存器,不能直接送入数据,但SP可以)

  任意时刻,SS:SP指向栈顶元素

  push ax:

    sp = sp - 2,SS:SP指向当前栈顶前面的单元

    将ax中的内容送入SS:SP指向的内存单元

    (入栈时,栈顶从高地址向低地址方向增长)

  pop ax:

    将SS:SP指向的内存单元处数据送入ax

    SP=SP+2

3.8栈顶超界的问题

  8086不保证我们对栈的操作不会超界,他只知道栈顶在何处,而不知道我们安排的栈空间有多大

  我们要自己考虑栈超界的问题

3.9push、pop指令

  push  寄存器
  pop    寄存器
  push  段寄存器
  pop    段寄存器
  push  内存单元
  pop    内存单元

    可只给出内存单元的偏移地址,段地址从ds获得

3.10栈段

  也是我们在编程时的一种安排

  如果将10000H~1FFFFH当作栈段,栈空时,SP=?

    当只有一个元素时,SS=1000H,SP=FFFEH,此元素出栈,SP=SP+2,所以SP=0

    栈最底部字单元的地址为1000:FFFE,栈空时,SS:SP指向最底部单元下面的单元,即最底部+2,即SP=0000H

  一个栈段最大可以设为多少?

    从栈空时SP=0,一直压栈,直到栈满时SP=0,再次压栈,栈顶将环绕,覆盖原来内容,所以最大0~FFFFH,64KB

标签:--,SP,mov,内存,寄存器,ax,单元
From: https://www.cnblogs.com/cangshiqian/p/16609589.html

相关文章

  • Git基本用法
    管理修改文件Resetgitreset//只会影响tracked的文件Unpackedfilegitclean-f-fd-xfd//删除文件、文件&夹、包含.gitignore指定的gitclean-nf-nfd-nxfd......
  • json转java对象以及校验用户名是否存在案例
    json转java对象使用步骤:1、导入jackson的相关jar包2、创建Jackson核心对象ObjectMapper3、调用ObjectMapper的相关方法进行转换1、readValue(js......
  • 关于layui表格中列的宽度问题怎么修改
    <divclass="layui-card-body"><tableclass="layui-table"><!--这个colgroup就是来控制表格里面每一列的宽度,不加参数就是表明自适应--......
  • 05. Prometheus - 指标处理(PromQL)
    PromQLPromQL是Prometheus内置的数据查询语言,其提供对时间序列数据丰富的查询,聚合以及逻辑运算能力的支持。并被广泛应用在Prometheus的日常数据查询、可视化、告警......
  • RUST基础:类型别名
    Rust基础入门书籍推荐《深入浅出RUST》我们可以用type关键字给同一个类型起个别名(typealias)。实例如下:1typeAge=u32;23fngrow(age:Age,year:u32)->Age{......
  • SpringBoot框架:配置项目在访问后台端口时默认跳转的接口或页面
    一、配置一般需要这种配置的都是前后端一体的项目,在通过后台端口访问时需要默认跳转到某个指定的接口,或者跳转到某个执行的接口。实现WebMvcConfigurer接口,重写a......
  • C语言里的函数 (学习笔记)
    看到CSDN里一篇详解,认为可用,抄录下来以备查询。(https://blog.csdn.net/qq_43469639/article/details/123765064)1、函数是什么在维基百科中,对于函数的定义是子程序。子程......
  • Golang中slice操作的一些坑
    packagego_testsimport("bytes""fmt""testing")//0、引用类型funcTestT0(t*testing.T){s1:=[]int{1,2,3}f1:=func(s[]int......
  • 坐标下降法&块坐标下降法(CD&BCD)
    前言本文简要介绍两种非梯度优化方法:坐标下降法和块坐标下降法。二者用于求解无约束优化问题,属于直接法。我一直没太搞清楚坐标下降和坐标轮换的区别,但感觉应该是一个东......
  • MAMP Pro (PHP/MySQL开发环境)
    mamppro是最优秀的本地服务器搭配软件,也是最好的mysql开发环境和php开发环境,包含了acintosh、Apache、MySQL和PHP四大开发环境,用户只要轻松点选就能对架站、讨论区、论坛......