汇编语言loop详解

loop指令的格式是

loop 标号

cpu执行loop命令时要进行两部操作,先让寄存器cx里的值-1,之后判断cx里的值是否为0如果为0则向下执行如果不为0则跳转到标号的位置
例子(计算2^12为多少放入到ax寄存器中)

assume cs:code
code segment
    mov ax,2

    mov cx,11 ;//设置loop的次数
s:  add ax,ax ;//打标签(标号)
    loop s ;//cpu执行loop操作时进行两步操作 cx-- 如果cx为0往下执行,cx不为0 contiue

mov ax,4c00H
int 21H
code ends

end

编译链接之后debug一下exe文件可以发现:

 注意当cx的值为0时之后内存的变化

 1.标号
        在汇编语言中,标号代表一个地址,在这个程序中有一个s,它实际上是标示了一处地址,该地址上有一条指令为:add  ax,ax

(指令的储存就是以机器码的形式储存在内存的某一段中由((cs)*16+ip)的物理地址决定执行的位置

2.loop s

cx中存放循环的次数

loop指令后面的标号所标识地址要在前面

要循环执行的程序段要写在标号和loop指令的中间

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

    mov cx,循环次数
s:
    循环执行的程序段
    loop s

例2:用加法计算123*236,结果存在ax中

123*236相当于 236个123相加 及循环让他一直相加就ok了

源码:
 

assume cs:codesg
codesg segment
    mov ax,123

    mov cx,235
s:  add ax,123
    loop s

    mov ax,4c00H
    int 21H
codesg ends
end

 我们可以在这个基础上再改进一下程序来提升性能,上一个程序错了256次加法运算,其实我们可以让256做123次加法也是一样的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

凑凑洗

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

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

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

打赏作者

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

抵扣说明:

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

余额充值