汇编:循环结构

ops/2024/10/9 13:24:07/

16位汇编语言中的循环结构主要通过条件跳转指令(如LOOPJMP, JE, JNE, JG, JL, 等)来实现,常见的循环类型包括for循环和while循环;

Loop指令

LOOP指令的操作非常简单:它将CX寄存器的值减1,如果结果不为零,则跳转到指定的标签。这使得它特别适用于已知循环次数的情况,比如for循环。

LOOP target

target 是一个标签,指向循环的开始位置。

示例:打印9~1值
assume cs:code
​
code segment
start:mov cl,9    
​
;循环体
loop_test:mov al,cladd al,30h ;将值转化为ASCII字符mov dl,al  ;输出的内容转入dl寄存器中mov ah,02h ;调用21号中断的02功能号进行内容输出int 21hloop loop_test
​mov ah,07hint 21hmov ax,4c00hint 21h 
​
code ends
end start

mov cl,9将寄存器 CL 设置为 9,表示将从9开始循环。

循环体:

  mov al,cl:将 CL 的值复制到 AL 寄存器。

  add al,30h:将 AL 的值加上 30h。在ASCII码表中,数字字符'0'的值是0x30,所以加上0x30可以将0-9的数字转换为'0'-'9'的ASCII字符。

  mov dl,al:将 AL 的值复制到 DL 寄存器。DOS中断21h的功能号02h要求输出的字符存储在 DL 中。

  mov ah,02h:设置 AH 为 02h,准备调用DOS中断21h的功能号02h,进行字符输出。

  int 21h:调用DOS中断21h,输出字符。

  loop loop_test:将 CL 减1,如果 CL 不为零,则跳转到 loop_test 继续循环。

执行结果:

JCC指令构造循环

条件跳转:在16位汇编语言中,可以使用条件跳转指令(JCC指令)来构造循环结构。JCC指令(Jump if Condition is met)包括一系列条件跳转指令,如 JE(等于跳转), JNE(不等于跳转), JG(大于跳转), JL, JGE(大于等于跳转), JLE(小于等于跳转) 等,用于根据条件进行跳转。

示例:打印1-9
assume cs:code
​
code segment
start:mov bx,1
​
loop_test:     ;循环标签mov al,bladd al,30hmov dl,almov ah,02hint 21hinc bxcmp bx,10jl loop_test  ;跳转到循环标签
​mov ah,07hint 21hmov ax,4c00hint 21h 
​
code ends
end start
代码含义:

  mov bx,1:初始化寄存器BX为1。BX寄存器将作为循环计数器,并用于生成要打印的数字。

  mov al,bl:将BLBX的低字节)的值复制到AL寄存器。

  add al,30h:将AL寄存器的值加上30h(48的十六进制值),这是为了将数字转换为对应的ASCII码。例如,数字1的ASCII码是49(31h),等于1 + 48。

  mov dl,al :将转换后的ASCII码从AL寄存器复制到DL寄存器。

  mov ah,02h :将AH寄存器设置为02h,这是DOS的打印字符功能。

  int 21h:通过int 21h中断调用DOS服务来打印DL寄存器中的字符。

  inc bx指令将BX寄存器的值加1。

  cmp bx,10指令将BX的值与10进行比较。

  jl loop_test如果BX小于10,jl loop_test指令会跳转回loop_test标签,继续循环。

最后运行结果:


http://www.ppmy.cn/ops/46280.html

相关文章

Java高级---Spring Boot---2环境准备

2环境准备 ​ 为了顺利进行Spring Boot开发,你需要准备一个合适的开发环境。 2.1 开发工具(IDE)的选择与安装 选择IDE:(IntelliJ IDEA为例) IntelliJ IDEA: 强大的Java IDE,提供智能代码补全、代码分析…

大语言模型技术系列讲解:大模型应用了哪些技术

为了弄懂大语言模型原理和技术细节,笔者计划展开系列学习,并将所学内容从简单到复杂的过程给大家做分享,希望能够体系化的认识大模型技术的内涵。本篇文章作为第一讲,先列出大模型使用到了哪些技术,目的在于对大模型使…

SDL教程(二)——Qt+SDL播放器

前言 ​ 这篇文章主要是使用SDL来打开视频,显示视频。后续会再继续使用SDL来结合FFmpeg。来能够直接使用网上的demo进行学习。 正文 一、环境 Qt 5.15.2 MSVC2019 64bit Win11 二、Qt搭建SDL Qt搭建,我觉得相比用VS2019来说,更为方便&…

前端传String字符串 后端使用enun枚举类出现错误

情况 前端 String 后端 enum 前端 后端 报错 2024-05-31T21:47:40.61808:00 WARN 21360 --- [nio-8080-exec-6] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to con…

华为 2024 届实习校园招聘-硬件通⽤/单板开发——第五套

华为 2024 届实习校园招聘-硬件通⽤/单板开发——第五套 部分题目分享,完整版带答案(有答案和解析,答案非官方,未仔细校正,仅供参考)(共十套,每套四十题选择题)获取(WX:…

Spring基础知识总结(纯文字版)

一、Spring IoC 1.1 重要概念 1)控制反转(Inversion of control) 控制反转是一种通过描述(在java中通过xml或者注解)并通过第三方去产生或获取特定对象的方式。 控制反转IoC(Inversion of Control)是说创建对象的控…

实践部署 浦语·灵笔2 模型,写作图文并茂的文章

1 初步介绍 XComposer2 相关知识 浦语灵笔2 是基于 书生浦语2 大语言模型研发的突破性的图文多模态大模型,具有非凡的图文写作和图像理解能力,在多种应用场景表现出色,总结起来其具有: 自由指令输入的图文写作能力: 浦…

OAK相机如何将 YOLOv9 模型转换成 blob 格式?

编辑:OAK中国 首发:oakchina.cn 喜欢的话,请多多👍⭐️✍ 内容可能会不定期更新,官网内容都是最新的,请查看首发地址链接。 Hello,大家好,这里是OAK中国,我是Ashely。 专…