汇编语言的那些事------学习闲谈(一)

作者:嵌入式历练者

ID : Eterlove

记下相关笔记,记录我的学习生活!站在巨人的肩上Standing on Shoulders of Giants!

该文章为原创,转载请注明出处和作者:https://blog.csdn.net/Eterlove/article/details/120642629

目录
 

1.汇编的诞生

2.基本汇编指令

3.详解第三条指令:mov al,[0]

4.思考分析:将al中的数据送到内存单元10000H中


1.汇编的诞生

操作:寄存器BX的内容送到AX中
机器指令:1000 1001 1101 1000

你看到这道二进制机器指令可能觉得还行,可当指令一多,你可能开始迷糊了,当然那些大神也不例外,所以他们创造了人们较为接受和学习的汇编语言来描述机器指令。这些汇编语言通过汇编编译器来编译形成机器指令。
汇编语言:mov ax,bx

2.基本汇编指令

(图片来自汇编语言_第2版)

 在写一条汇编指令或写一个寄存器名称时不区分大小写,大小写表示的含义相同,ax和AX含义相同。

 在进行数据传送和运算时,要注意指令的两个操作对象的位数应当一致,对于mov ax,bx这条指令,ax如果是8位寄存器,而bx是16位寄存器,则这条指令是错误的。

  •  CPU读写一个内存单元时,必须给出内存单元的地址,就像给人写信寄东西总要知道别人家的地址吧!
  • 在8086PC中,内存地址由段地址和偏移地址组成,而在8086CPU中有个寄存器叫DS寄存器,存放要访问数据的段地址。

3.详解第三条指令:mov al,[0]

  • 比如说我们要读取10000H单元的内容,可用如下的程序指令
mov bx,1000H
mov ds,bx
mov al,[0]
  • 上面三条指令将内存单元为10000H(1000:0)中的数据读到al中
  • 接下来,我们详解下第三条指令:mov al,[0]
  • 在表2.1中,我们使用mov指令用途只有两种方式:

【!】mov指令将数据直接送入寄存器中

【!】mov指令将一个寄存器中的内容送入另一个寄存器中

  • 现在对于内存单元来说,也可以使用mov指令,将一个内存单元中的内容送到寄存器中,在指令中必须指明,寄存器用寄存器名指明,内存单元则需要用内存单元的地址指明。
  • 用这样的形式 [...] 来表示一个内存单元,[...] 中的0表示内存单元的偏移地址
  • 说到偏移地址,你应该联系到段地址,因为只靠偏移地址是不能定位到一个内存单元的(前面提到8086CPU中有个寄存器叫DS寄存器,存放要访问数据的段地址)
  • 再来逐磨下10000H这个地址如何用段地址和偏移地址来表示   10000H = 1000:0(段地址为1000,0则为偏移地址)
  • 所以,先将段地址放入ds,1000H的段地址数据被mov指令先送到bx寄存器,然后通过mov指令从bx寄存器再送到ds寄存器(段寄存器),中间通过bx寄存器进行中转
  • 然后用mov al,[0]完成传送,[ ]表明操作对象是一个内存单元,[0]中的0说明这个内存单元的偏移地址为0,它的段地址默认放在ds中,指令执行时,8086CPU会自动从ds中取出
  • 还有一个问题,前面mov指令为什么不直接把段地址1000H送到ds寄存器,为什么要中转?不麻烦吗?因为在8086CPU(这个是重点)中,不支持将数据直接送入段寄存器ds中,是非法的。
  • 那为什么8086CPU不支持将数据直接送入段寄存器的操作?这属于8086CPU硬件设计的问题,我们只需要知道这一点就行了 。

4.思考分析:将al中的数据送到内存单元10000H中

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

                                动手才能收获。最后感谢大家阅读!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式历练者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值