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

1、内存中字的存储

2、ds和【address】

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

其中,段地址存放在段寄存器DS中,DS称作数据段寄存器。

如果我们要将内存地址为14A70的内存单元中的数据送入AL中,可以用如下的程序段进行:

Mov bx,1000H    ;把段地址1000H送入bx中。

mov ds,bx        ;把bx中的数值送入ds中。

Mov al,[4a70]     ;把段地址为1000H,偏移地址位4a70H的内存单元中的数据送入al中。

[address]表示一个内存单元,内存单元中的address表示偏移地址,它的中文翻译就是地址的意思。

内存单元[address],我们可以知道它的地址是多少,但它的数值是多少,我们并不知道。
3、mov指令

传送指令mov可以完成以下4种传送:

1:将数据直接送入寄存器。    如:mov ax,1230H。

2:将一个寄存器中的数据送入另一个寄存器。    如:mov ax,bx

3:将一个内存单元中的数据送入一个寄存器。    如:mov ax,[27b0]

4:将一个寄存器中的数据送入内存单元中。    如:mov [607c],bx

注意:不能直接用数据送给段寄存器,如:mov ds,1230H 是错误的,必须要用一个寄存器来进行中转。比如:

Mov bx,1230H

Mov ds,bx

这样就行了。为什么8086CPU不支持将数据直接送入段寄存器呢?这属于8086CPU硬件设计的问题,我们只要知道这一

点就行了。
4、add和sub指令

Mov指令有两个操作对象,add和sub同样有两个操作对象。

Add为加法指令,格式:add 操作对象1,操作对象2。功能:两数相加,并把结果保存到操作对象1中。

Add有以下几种形式:

Add 寄存器,数据    如:add ax, 8

Add 寄存器,寄存器    如:add ax, bx

Add 寄存器,内存单元    如:add ax, [27a0]

Add 内存单元,寄存器    如:add [46e9], bx

Sub为减法指令,格式:sub 操作对象1,操作对象2。功能:两数相减,即从操作对象1减去操作对象2,其结果保存到

操作对象1中。

Sub 也有以下几种形式:

Sub 寄存器,数据    如:sub ax, 9

Sub 寄存器,寄存器    如:sub ax, bx

Sub 寄存器,内存单元    如:sub ax, [b027]

Sub 内存单元,寄存器    如:sub [8601], bx
5、数据段

前面讲过(参见2.7节),对于8086PC机,在编程时,可以根据需要,将一组内存单元定义为一个段。我们可以将一组长度

为N(N≤64KB)、地址连续、起始地址为16的倍数的内存单元当作专门存储数据的内存空间,从而定义了一个数据段。

比如:用123B0H~123B9H这段内存空间来存放数据,我们就可以认为123B0H~123B9H这段内存是一个数据段,长度

为10个字节。

如何访问数据段中的数据呢?首先用DS存放数据段的段地址,然后用相关的指令访问数据段中的内存单元。

更多请见:http://www.mark-to-win.com/tutorial/51915.html 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值