汇编loop_汇编语言 第五章 [BX]和loop指令

本文详细介绍了汇编语言中的[BX]和LOOP指令的使用。[BX]作为内存单元的偏移地址,LOOP指令用于实现循环,通过减1CX并检查其值来控制循环流程。在Debug中,讲解了如何跟踪使用LOOP指令的程序,并对比了Debug与汇编编译器MASM对指令的不同处理。此外,还讨论了LOOP与[BX]的联合应用,段前缀的使用,以及在汇编编程中的一段安全内存空间。
摘要由CSDN通过智能技术生成

第五章 [BX]和loop指令

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

[bx] 表示内存单元,它的偏移地址是 bx,和 [0] 类似。

dce0547e0b77d6807f1cbbd0ab5526b8.png
  1. loop

这个指令和循环有关。

  1. 我们定义的描述性符号:“()”

用 () 描述一个寄存器或一个内存单元中的内容。

ef9cabc28fa9be002377d26267953bae.png
  1. 约定符号 idata 表示常量

2e01c92e35902b376e29284dad37a428.png

ed934820528cbe60ed8247670697813e.png

5.1 [BX]

0eff4407956e6eff9a4315825a1f31a6.png

5.2 Loop 指令

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

7d4a69ae22ccb275a1aaee6dce809aeb.png

5f0e28780952341c2257f93e8c424b1f.png

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

  • 在 cx 中存放循环次数;
  • loop 指令中的标号所标识的地址要在前面;
  • 要循环执行的程序段,要写在标号和 loop 指令的中间。

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

在汇编源程序中,数据不能以字母开头,要在前面加 0。

Debug -g 执行到指定位置,再 Debug。

Debug -p 自动执行循环。

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

在 Debug 中,mov ax,[0] 表示将 ds:0 处的数据送入 ax 中,但在汇编源程序中,它被当作 mov ax,0 处理。

那么如何在源程序中,将数据送入寄存器?目前的方式是将偏移地址送入 bs 寄存器中,用 [bx] 的方式来访问内存单元,或者在 [] 前显式地给出段地址所在的段寄存器。

50bf62f4b477bb502cbe10f13a6be680.png

5.5 loop 和 [bx] 的联合应用

6cb9c8533cb3ad05538c02bb213b4ba8.png

4b248dae7e28fbc17678e59b41e8e740.png

85d7d82bcb6e2388da60dcc03f1feb9e.png

5.6 段前缀

在偏移地址 [bx] 前显示地给出段地址 ds 。

mov ax,ds:[bx]

5.7 一段安全的空间

在不能确定一段内存空间中是否存放着中啊哟的数据或代码的时候,不能随意向其中写入内容。0:200~0:2ff(00200h~002ffh) 的 256 个字节的空间一般不会被 DOS 和其他合法的程序使用,所以这段空间是安全的。

e776bffa021ae5fec302e963fd6ff72b.png

ebecb2bb9b3303eae8d4940325b323bc.png

5.8 段前缀的使用

将内存 ffff:0~ffff:b 单元中的数据复制到 0:200~0:20b 单元中。

7d8ea7a13d3b5d19fa7179f48abc1de1.png

每次循环都要设置两次 ds,效率不高,优化如下:

f8eb20b0f8f41ee0491c7b1a67bd562f.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值