欢迎光临
我们一直在努力

使用汇编语言实现WHILE循环

WHILE 循环在执行语句块之前先进行条件测试。只要循环条件一直为真,那么语句块就不断重复。下面是用 C++ 编写的循环:

while( val1 < val2 )
{
    val1++;
    val2 –;
}

用汇编语言实现这个结构时,可以很方便地改变循环条件,当条件为真时,跳转到 endwhile。假设 val1 和 val2 都是变量,那么在循环开始之前必须将其中的一个变量送入寄存器,并且还要在最后恢复该变量的值:

        mov eax, val1                  ; 把变量复制到 EAX
beginwhile:
        cmp eax, val2                  ; 如果非 val1 < val2
        jnl     endwhile               ; 退出循环
        inc    eax                     ; val1++;
        dec    val2                    ; val2--;
        jmp    beginwhile              ; 重复循环
endwhile:
        mov    val1, eax                ;保存 val1 的新值

在循环内部,EAX 是 val1 的代理(替代品),对 val1 的引用必须要通过 EAX。JNL 的使用意味着 val1 和 val2 是有符号整数。

【示例】循环内的 IF 语句嵌套

高级语言尤其善于表示嵌套的控制结构。如下 C++ 代码所示,在一个 WHILE 循环中有嵌套 IF 语句。它计算所有大于 sample 值的数组元素之和:

int array[] = {10,60,20,33,72,89,45,65,72,18};
int sample  =  50;
int ArraySize = sizeof array / sizeof sample;
int index = 0;
int sum  =  0;
while( index < ArraySize )
{
    if( array[index] > sample )
    {
        sum += array[index];
    }
    index++;
}

在用汇编语言编写该循环之前,用下图的流程图来说明其逻辑。为了简化转换过程,并通过减少内存访问次数来加速执行,图中用寄存器来代替变量:EDX-sample, EAX=sum, ESI=index, ECX=ArraySize ( 常数 )。标号名称也已经添加到逻辑框上。

包含IF语句的循环

赞(0) 打赏
未经允许不得转载:hosteons中文网 » 使用汇编语言实现WHILE循环

评论 抢沙发

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册