Gentle Nick 2021-05-10 20:08 采纳率: 0%
浏览 55

汇编语言练习(dl帮帮,没学过)(加分项可以没有)

•对10个⽆符号16位整数排序;

•加分项

    •⾼性能排序算法

    •可交互的UI

    •数字可输⼊

    •拒绝空、负、⾮法的数字输⼊

    •可指定升、降序

  • 写回答

1条回答 默认 最新

  • raymond27 2023-09-02 05:56
    关注

    这是一个涉及到汇编语言、排序算法和用户交互的复杂问题。由于汇编语言有很多不同的版本,我将提供一个基于x86架构的伪代码,你可以根据具体的汇编语言进行修改。
    首先,我们需要定义一个存储10个无符号16位整数的数组。

    section .data
        numbers dw 10, 2, 5, 1, 8, 9, 3, 6, 4, 7
        length equ $-numbers
    

    这里我们定义了一个名为numbers的数组,包含了10个无符号16位整数。equ是一个汇编指令,用于定义常量。

    <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal"></mi><mtext>
    

    是一个伪指令,表示当前位置。因此,

    </mtext><mi mathvariant="normal"></mi></mrow><annotation encoding="application/x-tex">
    

    是一个伪指令,表示当前位置。因此,

    
    </annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord"></span><span class="mord cjk_fallback">
    

    是一个伪指令,表示当前位置。因此,-numbers表示numbers的结束位置减去其开始位置,也就是数组的长度。
    接下来,我们需要编写一个排序算法。这里我们使用快速排序算法。

    section .text
    global _start
    _start:
        ; Recursive quicksort function
        quicksort:
            push ebp
            mov ebp, esp
            pusha
            mov eax, [ebp+8] ; low pointer
            mov ebx, [ebp+12] ; high pointer
            cmp ebx, eax
            jge done
            mov edx, [ebx]
            mov ecx, [eax]
            mov [ebp-4], edx
            mov [ebp-8], ecx
            call partition
            mov ebx, [ebp-4] ; new low pointer
            mov eax, [ebp-8] ; new high pointer
            call quicksort ; recursion on the subarray defined by ebx and eax
            call quicksort ; recursion on the subarray defined by eax and ebx (in reverse order)
        done:
            popa
            mov esp, ebp
            pop ebp
            ret
        ; Partition function that交换元素使得 altternatively a[lo] > a[mid] and a[mid] < a[hi] or vice versa. 用于快速排序。
        partition:
            push ebp
            mov ebp, esp
            pusha
            mov eax, [ebp+8] ; low pointer of array a (a[lo])
            mov ebx, [ebp+12] ; high pointer of array a (a[hi])
            mov edx, [ebp+16] ; pivot element (a[mid])
    
    评论

报告相同问题?