汇编语言——第5章 [BX]和loop指令

本文详细介绍了汇编语言中[BX]作为内存单元地址的用法,以及Loop指令的执行过程和配合CX实现循环的方法。通过实例展示了如何在Debug中跟踪Loop指令的执行,并探讨了段前缀的使用,以及在处理连续内存单元数据时,如何利用Loop和[BX]的联合应用提高效率。
摘要由CSDN通过智能技术生成

目录

引言

5.1 [BX]

5.2 Loop指令

5.3 在Debug中跟踪用loop指令实现的循环程序

5.4 Debug和汇编编译器masm对指令的不同处理

5.5 loop和[BX]的联合应用

5.6 段前缀

5.7 一段安全的空间

5.8 段前缀的使用


引言

1、[bx]和内存单元的描述

要完整地描述一个内存单元,需要两种信息:①内存单元的地址;②内存单元的长度(类型)(由具体指令中的其他操作对象指出)

[bx]也表示一个内存单元,它的偏移地址在bx中,段地址默认在ds中。

例子:

mov ax,[bx]

将一个内存单元中的内容送入ax,这个内存单元的长度为2字节(字单元),存放一个字,偏移地址在bx中,段地址在ds中。

mov al,[bx]

将一个内存单元中的内容送入al,这个内存单元的长度为1字节(字单元),存放一个字,偏移地址在bx中,段地址在ds中。

2、loop

3、描述性符号:“()”

“()”表示一个寄存器或者一个内存单元中的内容。例如(ax)=0010H表示ax中的内容为0010H;(21000H)=0010H,表示2000:1000处的内容为0010H。

“()”中的元素可以有3种类型:①寄存器名;②段寄存器名;③内存单元的物理地址(一个20位数据)。

4.约定符号idata表示常量

5.1 [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)。

5.2 Loop指令

loop指令的格式是:loop标号

CPU在执行loop指令的时候,要进行两步操作:

①(cx)=(cx)-1;②判断cx中的值,不为零则转至标号处执行程序,如果为零则向下执行。

用loop指令来实现循环功能,cx中存放循环次数。

用cx和loop指令相配合实现循环功能的3个要点:

(1)在cx中存放循环次数;

(2)loop指令中的标号所标识地址要在前面;

(3)要循环执行的程序段,要写在标号和loop指令的中间。

用cx和loop指令相配合实现循环功能的程序框架如下:

        mov cx,循环次数

s:

        循环执行的程序段

        loop s

计算2^12

assume cs:code

code segment

       mov ax,2

       mov cx,11

s:    add,ax,ax      

       loop s

       mov ax,4c00H;

       int 21H

code ends

end

编程计算123*236,结果放在ax

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

关了个尔

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

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

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

打赏作者

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

抵扣说明:

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

余额充值