汇编:循环结构

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.mzph.cn/pingmian/17783.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】list的使用方法和模拟实现

❤️欢迎来到我的博客❤️ 前言 list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后…

AI日报:百度发布文心大模型学习机;Open-Sora 1.1可生成21秒视频;Canva可以自动剪辑视频了;超牛ComfyUI节点AnyNode来了

欢迎来到【AI日报】栏目!这里是你每天探索人工智能世界的指南,每天我们为你呈现AI领域的热点内容,聚焦开发者,助你洞悉技术趋势、了解创新AI产品应用。 新鲜AI产品点击了解:AIbase - 智能匹配最适合您的AI产品和网站 1、百度文心…

网络、HTTP、HTTPS、Session、Cookie、UDP、TCP

OSI 七层模型 应用层、表示层、会话层、传输层、网络层、数据链路层、物理层 TCP/IP 五层模型 应用层:为用户的应用进程提供网络通信服务(协议:域名系统DNS协议,HTTP协议,SMTP协议)传输层:负…

leetcode 530.二叉搜索树的最小绝对差 、501.二叉搜索树中的众数 、236. 二叉树的最近公共祖先

leetcode 530.二叉搜索树的最小绝对差 、501.二叉搜索树中的众数 、236. 二叉树的最近公共祖先 leetcode 530.二叉搜索树的最小绝对差 题目链接:https://leetcode.cn/problems/maximum-binary-tree/description/ 题目: 给你一个二叉搜索树的根节点 r…

【MATLAB源码-第214期】基于matlab的遗传算法GA最短路径路由优化算法仿真。

操作环境: MATLAB 2022a 1、算法描述 在现代网络通信和路径规划领域,最短路径路由优化算法是一项关键技术。它涉及在给定的网络拓扑中寻找从源点到目标点的最短或成本最低的路径。近年来,遗传算法(GA)因其出色的全局…

跟进2年弄丢1.8亿,你的大客管理错在哪里?

数量并非目的之所在,质量才是根本之道。重视1%的超级用户,才是提高效率的关键所在。 ——凯文凯利 在当今的商业环境中,大客户已成为销售服务型企业最宝贵的资产。他们不仅贡献了企业收入的重要一环,…

Vue 项目中使用 Element UI库(Element UI 是一套基于 Vue.js 的桌面端组件库)

1. 安装 Element UI npm install element-plusnext 2.引入 Element UI(在main.js中引入组件,注意要引入.css文件,图标也要单独引用) import { createApp } from vueimport ElementPlus from element-plusimport element-plus/dist/index.css…

pinia持久化未生效

pinia官方文档 https://prazdevs.github.io/pinia-plugin-persistedstate/zh/guide/ pinia持久化未生效的原因很有可能就是在main.js中重复创建了pinia,导致持久化未生效

sql注入利用group_concat函数

1.group_concat函数的作用: 首先根据group by指定的列进行分组,将同一组的列显示出来,并且用分隔符分隔。 2.group_concat运用 这里我使用的是sqllab-less1,通过对数据库的查询,我们发现数据库表名,列名&a…

qmt量化交易策略小白学习笔记第1期【qmt如何获取股票概况?】

#获取股票概况 包含股票的上市时间、退市时间、代码、名称、是否是ST等。 #获取合约基础信息数据 该信息每交易日9点更新 调用方法 大蟒 from xtquant import xtdata xtdata.get_instrument_detail(stock_code) 参数 名称 类型 描述 stock_code string 合约代码 返…

手写电纸书天花板,阅读办公新体验 | 汉王手写电纸本 N10 2024 版使用评测

手写电纸书天花板,阅读办公新体验 | 汉王手写电纸本 N10 2024 版使用评测 请问如果说到电纸书,你的认知还只是Kindle吗?然而遗憾的是,Kindle亦是过去,智能才是未来。 哈喽小伙伴们好,我是Stark-C~&#x…

Mysql基础学习:mysql8 JSON字段查询操作

文章目录 一、查询JSON中某个属性值为XXX的数据量1、方式一2、方式二 二、查询的JSON中的value并去除双引号 一、查询JSON中某个属性值为XXX的数据量 1、方式一 select count(*)from table_namewhere JSON_CONTAINS(json-> $.filed1, "xxx")or JSON_CONTAINS(jso…

蓝桥杯嵌入式国赛笔记(4):多路AD采集

1、前言 蓝桥杯的国赛会遇到多路AD采集的情况,这时候之前的单路采集的方式就不可用了,下面介绍两种多路采集的方式。 以第13届国赛为例 2、方法一(配置通道) 2.1 使用CubeMx配置 设置IN13与IN17为Single-ended 在Parameter S…

Python—面向对象小解(2)

一、面向对象开发的基本使用 根据需求定义类 关键字class 属性 变量 方法 函数 默认函数中必须有个self参数 self(自己)代表当前对象 如何将一项物品放入一个空间内? # 类的定义创建 class itcast:# 指定属性name 大象container 冰箱# 指定数据的处理方法def open_c…

网络工程师:网络可靠性技术

一、可靠性 平均故障间隔时间MTBF(Mean Time Between Failure)和平均修复时间MTTR(Mean Time to Repair)这两个指标来评价系统的可靠性。 1、平均故障间隔时间MTBF MTBF是指一个系统无故障运行平均时间,通常以小时为单位。MTBF越大可靠性越高。 2、平均修复时间MTTR…

内网安全-隧道搭建穿透上线内网穿透-nps自定义上线内网渗透-Linux上线-cs上线Linux主机

目录 内网安全-隧道搭建&穿透上线内网穿透-nps-自定义-上线NPS工具介绍搭建过程 nps原理介绍MSF上线CS上线 内网渗透-Linux上线-cs上线Linux主机1.下载插件2.导入插件模块3.配置监听器4.服务端配置5.配置C2监听器并生成木马6.执行木马 内网安全-隧道搭建&穿透上线 内网…

2024年新算法-秘书鸟优化算法(SBOA)优化BP神经网络回归预测

2024年新算法-秘书鸟优化算法(SBOA)优化BP神经网络回归预测 亮点: 输出多个评价指标:R2,RMSE,MSE,MAPE和MAE 满足需求,分开运行和对比的都有对应的主函数:main_BP, main_SBOA, main_BPvsBP_SB…

vue3 excel 文件导出

//文件导出 在index.ts 中 export function downloadHandle(url: string,params?:object, filename?: string, method: string GET){ try { downloadLoadingInstance ElLoading.service({ text: "正在生成下载数据,请稍候", background: "rgba…

【计算机视觉 Mamba】MambaOut: Do We Really Need Mamba for Vision?

MambaOut: Do We Really Need Mamba for Vision? 在视觉任务上我们需要Mamba吗? 论文地址 代码地址 知乎解读:王牌飞行员申请出战! 知乎解读:Mamba 模型解读 (一):MambaOut:在视觉任务中,我们真的需要 …

Tessy学习系列(一):软件测试的概念介绍与常见的测试策略

相关内容参考自《软件测试的艺术》 一、软件测试的概念 所谓软件测试,就是一个过程或一系列过程.用来确认计算机代码完成了其应该完成的功能不执行其不该有的操作。软件应当是可预测且稳定的,不会给用户带来意外惊奇。 软件测试的作用主要体…