汇编:循环结构

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,cl
    add al,30h ;将值转化为ASCII字符
    mov dl,al  ;输出的内容转入dl寄存器中
    mov ah,02h ;调用21号中断的02功能号进行内容输出
    int 21h
    loop loop_test
​
    mov ah,07h
    int 21h
    mov ax,4c00h
    int 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,bl
    add al,30h
    mov dl,al
    mov ah,02h
    int 21h
    inc bx
    cmp bx,10
    jl loop_test  ;跳转到循环标签
​
    mov ah,07h
    int 21h
    mov ax,4c00h
    int 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标签,继续循环。

最后运行结果:
相关推荐
We་ct6 分钟前
LeetCode 226. 翻转二叉树:两种解法(递归+迭代)详解
前端·算法·leetcode·链表·typescript
大熊背8 分钟前
APEX系统中为什么 不用与EV0的差值计算曝光参数调整量
人工智能·算法·apex·自动曝光
REDcker11 分钟前
HDR Vivid 技术介绍
数据库·算法·视频·sdr·屏幕·显示技术·dhr
ab15151714 分钟前
2.18完成109、112、113
算法
real_ben_ladeng22 分钟前
程序人生—Hello’s P2P 2dc736403375808d93f9c97fc816f2f8
c语言·汇编·硬件架构
追随者永远是胜利者42 分钟前
(LeetCode-Hot100)64. 最小路径和
java·算法·leetcode·职场和发展·go
汉克老师1 小时前
GESP2024年6月认证C++二级( 第三部分编程题(1) 平方之和)
c++·算法·预处理·完全平方数·循环结构·gesp二级·gesp2级
云深处@1 小时前
【题】每日一题
算法
智者知已应修善业1 小时前
【排列顺序判断是否一次交换能得到升序】2025-1-28
c语言·c++·经验分享·笔记·算法
yzs872 小时前
OLAP数据库HashJoin性能优化揭秘
数据库·算法·性能优化·哈希算法