MASM - 数组置换输出重复

时间:2014-10-30 01:18:33

标签: assembly masm irvine32

这是一个逻辑问题,而不是汇编问题。该程序应该从用户获取十个整数并按以下顺序排列:8,3,5,9,2,6,0,4,1,7。

输入上面的数字时得到的输出是8,3,3,5,5,9,2,2,2,6,0,0,0,0,0,4,4,1,1 ,1,1,1,7。顺序是正确的,但我无法找到导致重复的原因。

INCLUDE Irvine32.inc

.data
welcome BYTE "Please enter 10 integers to be rearranged.", 0Ah, 0Dh, 0
permutation DWORD 8, 3, 5, 9, 2, 6, 0, 4, 1, 7
array DWORD 10 DUP(?)

.code
main PROC
MOV EDX, OFFSET welcome
call WriteString
MOV ESI, OFFSET array
MOV ECX, 10

L1:
    call ReadInt
    MOV [ESI], EAX
    ADD ESI, TYPE array
    LOOP L1

MOV EDI, OFFSET permutation
MOV ESI, OFFSET array
MOV ECX, 10

L2:
    MOV EAX, [EDI]
    PUSH ECX
    MOV ECX, 10

    L3:
        CMP EAX, [ESI]
        JE output
        ADD ESI, TYPE array
        back:
        LOOP L3

    ADD EDI, TYPE permutation
    POP ECX
    LOOP L2

    JMP quit

    output:
        MOV EAX, [ESI]
        call WriteInt
        MOV ESI, OFFSET array
        JMP back

quit:
    exit
main ENDP
END main

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

这是一个装配问题

威廉写道:
输入上面的数字时得到的输出是8,3,3,5,5,9,2,2,2,6,0,0,0,0,0,4,4,1,1,1, 1,1,7。顺序是正确的,但我找不到导致重复的原因 原因是在输出之后你跳回L3循环!只需在LOOP L3指令后重新定位BACK:标签。

这是一个合乎逻辑的问题

威廉写道:
置换数组应该是用户数组索引的顺序(第8个元素第一个元素,第三个元素第二个元素等)。

一个。由于你的排列数组包含零,你的句子应该是(第9个元素第一个,第4个元素第二个等)

B中。为cmp eax,[esi]做手头的任务是没有意义的 它将索引[0,9]与输入值[-2GB,+ 2GB-1]

进行比较

℃。您可以尝试在解决方案中合并下一个代码

mov eax,[edi]
mov eax,[esi+eax*4]  
call WriteInt