[BX]和loop指令

本文详细讲解了内存单元的描述方法,包括地址和长度,以及[bx]和[0]的用法。重点介绍了段前缀、偏移地址在汇编指令中的作用,以及如何通过cx和loop指令实现循环。涵盖了段寄存器、内存访问方式和debug指令的实例分析。
摘要由CSDN通过智能技术生成

要完整地描述一个内存单元,需要两种信息:(1)内存单元的地址 (2)内存单元的长度(类型)

用[0]表示一个内存单元时,0表示单元的偏移地址,段地址默认在ds中,单元的长度(类型)可以由具体指令中的其他操作对象(比如说寄存器)指出。

[bx]同样也表示一个内存单元,它的偏移地址在bx中,比如下面的指令:

mov ax, [bx] : 将一个内存单元的内容送入ax,这个内存单元的长度为2字节,存放一个字,偏移地址在bx中,段地址在ds中。
mov al, [bx] : 将一个内存单元的内容送入a1,这个内存单元的长度为1字节,存放一个字节,偏移地址在bx中,段地址在ds中。

loop和循环有关。

()表示一个寄存器或一个内存单元中的内容。()中的元素可以有3种类型:1> 寄存器名 2> 段寄存器名 3> 内存单元的物理地址
注:(ax)表示ax中的内容

(X)所表示的数据有两种类型:1>字节  2>字   是哪种类型由寄存器或者具体的运算决定

约定符号 idata 表示常量,在 [ ] 中使用

[BX]

mov ax,[bx]
功能∶ bx 中存放的数据作为一个偏移地址 EA,段地址 SA 默认在 ds 中,将SA∶EA 处的数据送入 ax中。即∶(ax)=((ds)*16+(bx))。
mov [bx], ax
功能∶ bx 中存放的数据作为一个偏移地址 EA,段地址 SA 默认在 ds中,将 ax中的数据送入内存SA∶EA 处。即∶((ds)*16+(bx))=(ax)。

Loop指令

格式:loop 标号,CPU 执行 loop 指令的时候,要进行两步操作,①(cx)=(cx)-1; ②判断 cx 中的值,不为零则转至标号处执行程序,如果为零则向下执行。

通常我们用loop指令来实现循环功能,cs中存放循环次数。

总结:
(1)在cx中存放循环次数
(2)loop指令中的标号所标识地址要在前面
(3)要循环执行的程序段,要写在标号和loop指令的中间

用cx 和loop指令相配合实现循环功能的程序框架如下 (s为标号):

mov cx,循环次数

s:
循环执行的程序段

loop s

debug命令g:
“g 0012” : 表示执行程序到当前代码段 ( 段地址在CS中 ) 的0012h处。
也就是说:将使debug从当前的CS:IP指向的指令执行,一直到(IP)==0012h为止。


在 Debug中∶
mov ax,[0]
表示将 ds∶0处的数据送入 ax中。
 (使用-a命令输入汇编指令执行)
但是在汇编源程序中,指令"mov ax,[0]"被编译器当作指令"mov ax,0"处理。
 (编译-连接-执行)

方法:
1> 可将偏移地址送入bx寄存器中,用 [bx] 的方式来访问内存空间。
mov ax,2000h
mov ds,ax ;段地址2000h送入ds
mov bx,0 ;偏移地址送入bx
mov al,[bx] ;ds:bx单元中的数据送入al

2> 要在 “[ ]” 前面显式地给出段地址所在的段寄存器。就可以在 “[ ]” 中直接给出内存单元的偏移地址。
mov ax,2000h
mov ds,ax
mov al, ds:[0]

在这里插入图片描述

小结:

(1) 在汇编源程序中,如果用指令访问一个内存单元,则在指令中必须用"[…]“来表示内存单元,如果在”[ ]“里用一个常量 idata 直接给出内存单元的偏移地址,就要在”[ ]“的前面显式地给出段地址所在的段寄存器。比如
mov al, ds:[0]
如果没有在”[ ]“的前面显式地给出段地址所在的段寄存器,比如mov al, [0],那么,编译器 masm 将把指令中的”【idata】“解释为"idata”。
(2) 如果在"[ ]"里用寄存器,比如 bx,间接给出内存单元的偏移地址,则段地址默认在 ds 中。当然,也可以显式地给出段地址所在的段寄存器。

这些出现在访问内存单元的指令中,用于显式地指明内存单元的段地址的"ds∶" “cs∶” “ss∶” “es∶”,在汇编语言中称为段前缀。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

hvk_l

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

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

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

打赏作者

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

抵扣说明:

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

余额充值