汇编语言-[bx]和loop指令

[bx]指令:

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

比如:

mov ax,[0]

将一个内存单元的内容送入 ax ,这个内存单元的长度为 2字节(字单元)

存放一个字节,偏移地址为 0 ,地址段在 ds 中

mov a1,[0]

将一个内存单元的内容送入 a1 ,这个内存单元的长度为 1字节(字单元)

存放一个字节,偏移地址为 0 ,地址段在 ds 中,其中 a1 是字符串,只传送一个字节。


在编译器中 mov ax,[0] 指令会被编译器认为是 mov ax,0 所以引入 [bx] 的概念

mov [bx],ax 表示 (ds)*16+(bx)=ax

用法和之前的ds[address]一样


[bx] 的使用方法:


mov ax,1000H

mov bx,2000H

mov ds,ax    ; 将ds数据段寄存器赋值为2000H

mov [bx],ax    ; 将ax寄存器的值赋给内存单元21000H位置

其他方式:

mov ax,ds:[0] ; 将内存单元20000H位置的值赋给ax


loop指令:

loop 是循环指令

指令的格式是:loop 标号,

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

① (cx)=(cx)-1

② 判断cx中的值,不为零则转至标号处执行程序,如果为零则向下执行。

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


例如:编程计算 2^2,结果存在 ax 中

分析: 设 ax=2,可计算 ax=(ax)*2,最后 ax 中为 2^2的值,

N*2 可用 N+N 实现

程序如下:


assume cs:code
code segment

	mov ax,2
    add ax,ax
    mov ax,4c00h    ; 程序返回
    int 21h
code ends    ; 代码段结束
end


假如计算 2^12,则需要写 11 条重复的指令 add ax,ax

显然我们不希望这样来写,

这时,我们可以用 loop 来做

比如:


assume cs:code
code segment
start:mov ax,2
      mov cx,11      ; 设定循环次数为11
      s:  add ax,ax        ; 每次循环执行的操作,每次执行的时候使cx-1
      loop s        ; 验证cx的值是否为0,为0执行下面的程序,否则跳回s(s可以为任意字符串)执行
      mov ax,4c00h    ; 程序返回
      int 21h
code ends    ; 代码段结束
end start
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

余十步

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

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

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

打赏作者

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

抵扣说明:

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

余额充值