汇编(3)- 访问数据

1)字单元

前面说过,寄存器一般存放的是一个字(16位),而内存单元存放的是字节,所以当寄存器从内存地址空间中存取字的时候,需要从连续两个内存单元中存取,于是提出了“字单元”的概念:存放一个字的存储单位,由地址连续的两个内存单元组成,高地址内存单元存放高字节,低地址单元存放低字节。字单元的地址就是低地址内存单元的地址,例如地址为N和N+1的单元组成的字单元的地址是N,N+1和N+2单元组成的字单元的地址则是N+1。

2)访问内存单元

CPU要访问一个内存单元,则必须要先给出这个内存单元的地址,DS段寄存器通常用来存放要访问数据的内存单元段地址,比如要访问10000H单元的内容:

mov bx,1000H
mov ds,bx
mov al,[0]

上面的指令将1000H:0中的数据读到al中。

DS:[address]得到CPU访问的内存单元的物理地址。

[address]表示一个内存单元,address表示内存单元的偏移地址,而段地址直接取ds寄存器中的内容。

上面的指令用到了mov指令的三种用法:1、将数据传送到寄存器;2、将寄存器中内容传递到另一个寄存器;3、将内存单元中的数据传递到寄存器。但也说明了另外一个问题:不能将立即数直接传送到段寄存器!而是先将其存入一个通用寄存器,再将通用寄存器中的内容传送到段寄存器中。

3)字的传送

上面的例子传送的是一个字节到寄存器的低地址部分,其实8086CPU是16位结构,也可以一次传送一个字的数据。

mov bx,1000H
mov ds,bx
mov ax,[0] //从内存中取数据 
mov [0],ax //将一个字传送到字单元

4)指令

mov是最常用的两操作数指令,有以下几种行式

  • mov 寄存器,数据  //注意不能直接将数据传送到段寄存器中
  • mov 寄存器,寄存器
  • mov 寄存器,内存单元
  • mov 内存单元,寄存器
  • mov 段寄存器,内存单元
  • mov 内存单元,段寄存器
  • mov 段寄存器,寄存器
  • mov 寄存器,段寄存器

add和sub与mov的操作几乎一样

5)数据段

对于8086CPU(16位),可以将一组内存单元定义为一个段,长度N<64KB,地址连续,起始地址为16的倍数的内存单元用做专门存放数据的段,从而定义了数据段,比如用123B0H至123B9H这段内存空间来存放数据,则知道改数据段的短地址是123BH,长度为10字节。

数据段是编程时的一种安排,将段地址写入DS中后,即可对数据段中的数据进行操作。

mov ax,123BH
mov ds,ax
mov ax,0
add al,[0]
add al,[1]
add al,[2]

将数据段的前三个内存单元数据叠加。

【参考】

https://www.jianshu.com/p/0cfcf7cddbb5

《汇编语言》-王爽

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值