汇编 (五) [BX] 和 loop 指令

1.1 [bx]和内存单元的描述

mov ax , [0]   //将段地址为ds, 偏移地址为0 的内存单元内容放入ax中。

mov ax , [bx]  //将段地址为ds, 偏移地址为0 的内存单元内容放入ax中。

为什么要用这个[bx]的方式?这样可以直接对bx进行偏移 Inc bx 从而操作连续内存空间。

 

1.2 描述性符号()

使用描述性符号“()” 来表示一个寄存器或者内存单元的  内容

“()”中的元素可以有3种类型:

  • 寄存器名
  • 段寄存器名
  • 内存单元的物理地址

以下是正确用法:

(ax), (ds) , (al) , (cx) , (20000H) , ((ds)*16+(bx))

以下是不正确用法:

(2000:0)  ,  ((ds) : 1000H)

 

1.3 loop指令

loop指令格式: loop 标号

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

  1. 自动执行 (cx) = (cx) -1;
  2. 判断cx中的值,不为0则转至标号处执行程序,若为0则向下执行。

 

  • cx影响着loop指令的执行结果,cx中存放循环次数。(Count)

 

1.4 cx 和 loop 配合

cx和loop相互】配合实现循环功能的框架:

  mov cx , 循环次数

s:

  循环执行的程序段

  loop s

3个要点:

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

 

1.5 debug 和 汇编编译器masm对指令的不同处理

  • 在debug中:

mov ax , [0]  标识将ds:0处的数据送入ax中。

  • 在masm汇编编译器中:

mov al , [0]  表示将常量0送入寄存器al中。

mov al , ds:[0] 表示将(ds)*16 + 0送入寄存器al中。

mov al , [bx] 表示将ds)*16 + (bx) 送入寄存器al中。

mov al , ds :  [bx] 表示将ds)*16 + (bx) 送入寄存器al中。

 

1.6 段前缀

mov ax , [bx]  表示使用默认的段地址ds,将(ds)*16 + (bx).

mov ax , cs:[bx] 表示使用显式的内存单元段地址(cs)*16 + (bx).   这个显式的指示段地址cs表示 段前缀。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值