汇编语言--寄存器(内存访问)

本文介绍了8086汇编语言中关于内存中字的存储方式,包括高低位字节的存储位置。详细阐述了DS和[address]的概念,以及如何使用mov指令在寄存器和内存之间进行数据传输。此外,文章还讨论了字的传送、add和sub指令的使用。接着,讲解了数据段的定义和访问,以及如何通过DS寄存器访问数据段中的数据。栈的概念、CPU的栈机制、栈顶超界问题、push和pop指令的使用也进行了详细解释。最后,讨论了栈段的定义和管理,强调了SS和SP寄存器在栈操作中的作用。
摘要由CSDN通过智能技术生成

知识点:内存中字的存储、DS和[address]、字的传送、mov,add,sub指令、数据段、栈、CPU提供的栈机制、栈顶超界的问题、push,pop指令、栈段。

 

内存中字的存储

CPU中,用16位寄存器来存储一个字。高8位存放高位字节,低8位存放低位字节。

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

 

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

 

任何两个地址连续的内存单元,N号单元和N+1号单元,可以将它们看成两个内存单元,也可看成一个地址为N的字单元中的高位字节单元和低位字节单元。

 

 

DS和[address]

CPU要读写一个内存单元的时候,必须先给出这个内存单元的地址,在8086CPU中,内存地址由段地址和偏移地址组成。

8086CPU中有一个DS寄存器,通常用来存放要访问数据的段地址。

 

mov指令,可完成三种传送:

(1)将数据直接送入寄存器;

mov 寄存器名,数据

(2)将一个寄存器中的内容送入另一个寄存器;

mov 寄存器名,寄存器名

(3)将一个内存单元中的内容送入一个寄存器中。

mov 寄存器,[内存单元的偏移地址]

 

“[...]”表示一个内存单元的偏移地址,我们知道,只有偏移地址是不能定位一个内存单元的,那么内存单元的段地址是多少呢?

指令执行时,8086CPU自动取ds中的数据为内存单元的段地址。

 

所以,我们需要根据情况,改变ds中的数据。

比如 mov ds, 1000H

但是,8086CPU不支持将数据直接送入段寄存器的操作,ds是一个段寄存器,所以mov ds, 1000H这条指令是非法的。

 

那么如何将1000H送入ds呢?只好用一个寄存器来进行中转,即先将1000H送入一个一般的寄存器,如bx,再将bx中的内容送入ds。

 

 

怎样将数据从寄存器送入内存单元?

从内存单元到寄存器的格式是:mov 寄存器名,内存单元地址

从寄存器到内存单元则是:mov 内存单元地址,寄存器名。

 

将al中的数据送入内存单元10000H。

10000H可表示为1000:0,用ds存放段地址1000H,偏移地址是0,则:mov [0], al可完成从al到10000H的数据传送。

mov bx, 1000H

mov ds, bx

mov [0], al

 

 

字的传送

mov指令在寄存器和内存之间进行字节型数据的传送。

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

 

我们只要在mov指令中给出16位的寄存器就可以进

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值