zoukankan      html  css  js  c++  java
  • 20135321 & 20135323 家庭作业4.46

    * * 4.46

    修改对家庭作业4.45所写的代码,用条件传送来实现冒泡排序函数的内循环中的测试和交换。

     

    该冒泡排序的内循环是:

    for(j=0; j!=i; ++j)
            {
                if( *p > *q )
                {
                    int t = *p;
                    *p = *q;
                    *q = t;
                }
                p++, q++;
            }

    根据C语言的内循环结构,可以进行改写成以下的内循环汇编代码:

     

    InnerLoop内改成:(edx循环利用)

     

    movl (%ecx), %edx

     

    InnerLoop:

    movl %edx, %eax //%edx存储的值赋给%eax

    movl 4(%ecx), %ebx

    subl %ebx, %eax  //比较%ebx所存储的指针*p的值与%eax中所存储的*p+1)的值,相当于C语句的条件表达式中的*p>*(p+1)?(*p<*(p+1)):(*p>*(p+1))中问号前的部分

    cmovl %ebx, %edx   //比较出来得到%ebx所存储的*p小于%edx存储的值,即%edx是存储的是最大的值

    movl (%ecx), %eax  //%ecx地址值赋给%eax

    cmovg %ebx, %eax     //比较出来得到%ebx所存储的*p大于%eax的值,即%eax所存储的是最小的值

     

    movl %edx, 4(%ecx)

    movl %eax, (%ecx) //%eax的值指向%ecx

    movl $4, %eax //初始化%eax4

    addl %eax, %ecx

    movl $1, %eax //%eax的值赋为1

    subl %eax, %esi //计算%eax - %esi并作为返回值

    jne InnerLoop

     

  • 相关阅读:
    关于虚拟机链接本地磁盘文件的问题
    javaScript学习笔记
    html学习笔记
    eclipse svn插件安装
    python学习笔记一

    hive数据处理
    WordCount实验
    暑假第六周总结
    暑假第五周总结
  • 原文地址:https://www.cnblogs.com/brotherlittlefish/p/4933305.html
Copyright © 2011-2022 走看看