• 汇编:循环结构


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

    Loop指令

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

    LOOP target

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

    示例:打印9~1值
    1. assume cs:code
    2. code segment
    3. start:
    4.   mov cl,9    
    5. ;循环体
    6. loop_test:
    7.   mov al,cl
    8.   add al,30h ;将值转化为ASCII字符
    9.   mov dl,al ;输出的内容转入dl寄存器中
    10.   mov ah,02h ;调用21号中断的02功能号进行内容输出
    11.   int 21h
    12.   loop loop_test
    13.   mov ah,07h
    14.   int 21h
    15.   mov ax,4c00h
    16.   int 21h
    17. code ends
    18. 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
    1. assume cs:code
    2. code segment
    3. start:
    4.   mov bx,1
    5. loop_test:     ;循环标签
    6.   mov al,bl
    7.   add al,30h
    8.   mov dl,al
    9.   mov ah,02h
    10.   int 21h
    11.   inc bx
    12.   cmp bx,10
    13.   jl loop_test ;跳转到循环标签
    14.   mov ah,07h
    15.   int 21h
    16.   mov ax,4c00h
    17.   int 21h
    18. code ends
    19. 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标签,继续循环。

    最后运行结果:

  • 相关阅读:
    Vue2 零基础入门 Vue2 零基础入门第三天 3.4 vue组件
    【星球】【slam】研讨会(4)你真的适合读博吗?
    第六届“中国法研杯”司法人工智能挑战赛进行中!
    【Python】【logging】限制输出
    Android 内置webview避免外部跳转或内嵌chrome植入复杂vue项目
    ​刘强东卸任京东集团 CEO,徐雷接任;苹果新专利可为多个设备无线充电;Rust公布2024年路线图|极客头条
    与MySQL的纠缠(卸载与安装)
    Linux内核 -- ARM指定CPU运行逻辑之smp_call_function_single函数
    PyTorch搭建LSTM实现服装分类(FashionMNIST)
    基于随机油漆优化器 (MOSPO)求解多目标优化问题附matlab代码
  • 原文地址:https://blog.csdn.net/WolvenSec/article/details/139277998