Assembly 用Irvine32随机化

Assembly 用Irvine32随机化,assembly,random,x86,masm,irvine32,Assembly,Random,X86,Masm,Irvine32,程序将数字1-53随机分组,不重复 无法使检查循环正常工作,但我知道这是个问题,因为它在没有检查循环的情况下工作,但我需要检查循环,这样我就不会重复检查循环,而且如何按顺序对数字进行排序 Include Irvine32.inc .data a dword 1 b dword 53 delta dword ? blank byte " ",0 array dword 52 dup(0) lenarray = LengthOF array .cod

程序将数字1-53随机分组,不重复

无法使检查循环正常工作,但我知道这是个问题,因为它在没有检查循环的情况下工作,但我需要检查循环,这样我就不会重复检查循环,而且如何按顺序对数字进行排序

Include Irvine32.inc

.data   
   a dword 1
   b dword 53
   delta dword ?
   blank byte " ",0
   array dword 52 dup(0)
   lenarray = LengthOF array

  .code
    main PROC
    call randomize
    mov eax,b
    sub eax,a
    inc eax
    mov delta,eax
    mov esi,offset array
    mov edx,offset blank
mov ecx, lenarray

xxx:
push ecx
push esi    
bk: mov eax,delta
    call randomrange
    add eax,a
    mov esi,0    
    mov ecx,lenarray

Check:
 cmp eax,[esi]
 je bk                          ;if duplicate 
 add esi,4
 loop Check

 pop esi
 pop ecx
 call writedec
 call writestring
 mov [esi],eax
 add esi,4

 loop xxx 

与随机选择问题不同,您可以将其设置为一个数字表,该数字表可以随机交换,以提供所需的洗牌效果

用您需要的每个数字填充表格,然后使用数字生成器,选择表格中的数字对,并交换它们。通过这种方式,您可以选择要更改的项目数量,并确保在不创建新编号时不存在重复项。

您正在执行mov esi,0,然后是mov eax,[esi]。我猜那不是你想要的。