汇编语言loop命令的具体使用

 更新时间:2024年03月26日 10:19:49   作者:凑凑洗  
LOOP指令是根据ECX计数器循环,将语句块重复执行特定次数,本文主要介绍了汇编语言loop命令的具体使用,感兴趣的可以了解一下

前言

在计算机编程的世界里,了解底层的硬件操作是提升程序员能力的关键一步。汇编语言作为一种底层语言,直接操作计算机的硬件,其中的 LOOP 指令和段前缀是我们探讨的两个重要概念。LOOP 指令为我们提供了一种简洁的方式来实现循环,而段前缀则是用来指定数据存储位置的关键工具。在这篇文章中,我们将深入探讨这两个概念的作用和用法,以便读者更好地理解汇编语言的底层机制。

Loop指令

Loop指令是什么?

在汇编语言中,LOOP 指令是一个循环控制指令,用来简化循环结构的编写。这个指令的作用就像你在做同样的事情一遍又一遍,而不必重复写相同的代码。
通俗解释:

假设你在写程序,需要做一件事情多次,比如打印一系列数字。使用 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次加法也是一样的

示例

loop指令一共有两步,首先是(cx)=(cx)-1,第二步就是判断cx是否为0,如果cx为0的话,那么就结束循环,如果cx不为0,则继续下一步循环

;计算2的10次方
assume cs:code
code segment
      start:mov ax,2
      mov cx,9
    s:add ax,ax
      loop s      ;s表示循环位置
      
      mov ax,4c00h
      int 21h
code ends
end start
;用加法计算123x236,结果存在ax中
;方法:可用循环完成,将123加236次
assume cs:codesg
codesg segment 
start: mov ax,0
       mov cx,236
     s:add ax,123
       loop s
       
       
       
       
       
       mov ax,4C00H 
       int 21H 
codesg ends
end start
;ffff:0006单元中的数乘以3,结果存储在dx中
assume cs:codesg
codesg segment 
start: 
       mov ax,0ffffH ;注意 汇编源程序中,数据不能以字母开头,所以加0
       mov ds,ax
       mov bx,0006H
       
       mov ah,0H
       mov al,[bx]   ;ffff:0006是字节型
       mov dx,0
       mov cx,3
     s:add dx,ax
       loop s
       
       
       
       
       
       mov ax,4C00H 
       int 21H 
codesg ends
end start

到此这篇关于汇编语言loop命令的具体使用的文章就介绍到这了,更多相关汇编语言loop内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 汇编语言位向量(位映射)的实现

    汇编语言位向量(位映射)的实现

    这篇文章主要介绍了汇编语言位向量(位映射)的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • VScode配置汇编语言环境的实现步骤

    VScode配置汇编语言环境的实现步骤

    本文主要介绍了VScode配置汇编语言环境的实现步骤,文中通过图文的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-03-03
  • 汇编语言入门汇编指令及寄存器详解教程

    汇编语言入门汇编指令及寄存器详解教程

    这篇文章主要为大家介绍了汇编语言入门汇编指令及寄存器的详解教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-11-11
  • 汇编语言存储及寄存器原理解析

    汇编语言存储及寄存器原理解析

    这篇文章主要介绍了汇编语言存储及寄存器原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • 汇编语言系列之汇编实现各种码制的转换(思路详解)

    汇编语言系列之汇编实现各种码制的转换(思路详解)

    本文列出了十六进制转二进制、十进制、ASCII码及大小写字母转换的代码,对汇编语言系列之实现各种码制的转换问题感兴趣的朋友跟随小编一起看看吧
    2021-11-11
  • 汇编语言指令mov、add、sub、jmp详解

    汇编语言指令mov、add、sub、jmp详解

    这篇文章主要介绍了汇编语言指令mov、add、sub、jmp详解,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • ARM汇编解决阶乘及大小写转换的问题

    ARM汇编解决阶乘及大小写转换的问题

    这篇文章主要介绍了ARM汇编解决阶乘及大小写转换,包括ARM汇编大小写转换以及存入内存的相关知识,本文给大家介绍的非常详细,需要的朋友可以参考下
    2021-11-11
  • 在vs2017中编写汇编的实现(图文)

    在vs2017中编写汇编的实现(图文)

    这篇文章主要介绍了在vs2017中编写汇编的实现(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • 常用的汇编指令与技巧(收藏)

    常用的汇编指令与技巧(收藏)

    这篇文章主要介绍了常用的汇编指令与技巧,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • 汇编语言Debug命令详解教程

    汇编语言Debug命令详解教程

    这篇文章主要为大家介绍了汇编语言Debug命令的教程,文中对Debug的命令进行了全面的讲解有需要的朋友可以借鉴参考共同学习下,希望能够有所帮助
    2021-11-11

最新评论