在程序集中排序数组的内容

时间:2017-04-26 02:27:05

标签: assembly masm irvine32

我正在进行一项任务,用户输入他们将输入的值的数量输入到数组中。在所有这些之后,我需要做一个冒泡排序,将输入的数字从最小到最大。

令人困惑的部分是它说"冒泡排序的内循环是在一个程序"。我甚至不知道如何开始如何做到这一点,更不用说创建内部和外部循环了。我在网上找到的所有例子都使用了一些" esi"在我的代码中我没有的东西或东西没有内部和外部循环。我只是试图让这个开始,所以如果有人有任何可以帮助我或让我走上正轨的东西,我将不胜感激。我在下面提到了我的代码以及至少我认为它的解释。

让我简要介绍一下我到目前为止的情况......第一个程序只显示错误信息并结束程序。它被称为" count"不在正确的范围内。第二个过程是用户输入" count"数字输入" values数组"。最后,主要程序是我让用户输入" count"数字和我验证它在正确的范围(2到12)或显示错误,程序结束。主程序还调用输入数字的程序。

INCLUDE Irvine32.inc
.data
count SDWORD ?
values SDWORD 12 DUP (?)
prompt1 BYTE "Enter the number of values to sort",0
prompt2 BYTE "Error. The number must be between 2 and 12",0

.code
Error PROC
    mov edx, OFFSET prompt2
    call WriteString
    exit
Error ENDP

EnterValues PROC
    mov ecx, count
    mov edx, 0
    Loop3: 
       mov eax, values[edx * 4] 
       call WriteInt
       call CrLf 
       inc edx 
       dec ecx 
       jnz Loop3
    ret
EnterValues ENDP

main PROC
    mov edx, OFFSET prompt1
    call WriteString    ; prints out prompt1
    call ReadInt
    mov count, eax     ; save returned value from eax to count

    cmp count, 12     
    jle Loop1       ; If count is less than or equal to 12 jump to Loop1, otherwise continue with Error procedure
    call Error      ; performs Error procedure which will end the program

    Loop1: cmp count, 2
    jge Loop2    ; If count is greater than or equal to 2 jump to Loop2, otherwise continue with Error procedure
    call Error   ; performs Error procedure which will end the program

    Loop2: call EnterValues
    exit
main ENDP
END main

0 个答案:

没有答案