这是一个逻辑问题,而不是汇编问题。该程序应该从用户获取十个整数并按以下顺序排列: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
非常感谢任何帮助。
答案 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