2017-2018-1 20155313 《信息安全系统设计基础》第八周课下作业

本文详细介绍了三种不同条件限制下的冒泡排序算法实现,包括常规实现、不使用跳转指令且限制条件传送次数的实现方式。每种实现均提供了对应的X86-64汇编代码。

2017-2018-1 20155313 《信息安全系统设计基础》第八周课下作业

课下作业1:

1 完成家庭作业4.47,4.48,4.49

2 相应代码反汇编成X86-64汇编

3 把上述X86-64汇编翻译成Y86汇编,并给出相应机器码

发操作过程、测试、问题解决过程博客链接

1 完成家庭作业4.47,4.48,4.49

4.47
冒泡排序实现:
void bubble_a(int *data, int count){  
    int i,next;  
    for(next = 1; next < count; next++){  
        for(i = next - 1; i >= 0; i--)  
            if(*(data + i + 1) < *(data + i)){  
                int t = *(data + i + 1);  
                *(data + i + 1) = *(data + i);  
                *(data + i) = t;  
            }  
    }  
}  

1071530-20171112224217028-1955095237.png

X86-64汇编:

1071530-20171112224331934-1568508326.png

Y86-64汇编:

1071530-20171112224340372-1285884263.png

机械码截图:

1071530-20171112224415528-2037368652.png

4.48
实现冒泡排序,要求不使用跳转,且最多使用3次条件传送。
void bubble_c(int *data,int count)

{
    int i , next;
    int pre_ele,next_ele;
    for(next = 1;next < count;next++)
    {
        for(i = next -1;i >= 0;i--)
        {
            pre_ele = *(data + i);

            next_ele = *(data + i + 1);

            *(data + i) = next_ele < pre_ele ? next_ele : pre_ele;

            *(data + i + 1) = pre_ele;
        }
    }
}
X86-64汇编:

1071530-20171112224627388-1548831897.png

Y86-64汇编:

1071530-20171112224636559-1816029148.png

4.49
实现冒泡排序,要求不使用跳转,且最多使用1次条件传送。

void bubble_c(int *data,int count)

{
    int i , next;
    int pre_ele,next_ele;
    for(next = 1;next < count;next++)
    {
        for(i = next -1;i >= 0;i--)
        {
            pre_ele = *(data + i);
            next_ele = *(data + i + 1);
            *(data + i) = next_ele < pre_ele ? next_ele : pre_ele;
            *(data + i + 1) = next_ele < pre_ele ? pre_ele : next_ele;
        }
    }
}

X86-64汇编:

1071530-20171112224657263-890688780.png

Y86-64汇编:

1071530-20171112224703403-187020624.png

转载于:https://www.cnblogs.com/bonsai/p/7823391.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值