Assembly MASM-阵列置换输出有重复

Assembly MASM-阵列置换输出有重复,assembly,masm,irvine32,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、4、4、1、1、1、1、1、1、1、7。顺序是正确的,但我找不到导致重复的原因 INCLUDE Irvine32.inc .data welcome BYTE "Please enter 10 integers to be rearranged.", 0Ah, 0Dh, 0 permutat

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

输入上述数字时得到的输出是8、3、3、5、5、9、2、2、2、6、0、0、0、0、4、4、1、1、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

任何帮助都将不胜感激。

这是一个组装问题

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

这是一个合乎逻辑的问题

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

由于你的排列数组包含一个零,你的句子应该先读第9个元素,然后读第4个元素,以此类推

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

C.您可以尝试将下一个代码合并到您的解决方案中

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

我想知道你对作业的理解是否正确。如果输入是:10 11 12 13 14 15 16 17 18 19,那么输出应该是什么?排列数组应该是用户数组索引的顺序,第8个元素第一,第3个元素第二,等等。所以输入的输出应该是18,13,15,19,12,16,10,14,11,17。我问的问题不太对。我想知道的是你的程序用输入输出了什么。它看起来可能不会输出任何东西。它将用户的输入存储在一个数组中,并按照排列数组给出的顺序输出这些数字。它会输出,Irvine32库中的WriteInt会写入存储在EAX中的整数。如果你告诉我,你实际上试着用输入10到19运行它,并得到了输出,我发现这确实很奇怪。如果你只是认为它会起作用,请实际尝试一下。没有输出!