【发布时间】:2016-03-14 17:58:09
【问题描述】:
组装新手,非常坚持如何做到这一点:
我有一个用户指定的数组。用户输入长度和字符。我的问题是我需要将所有元音移到数组的开头。
这是我目前的进度
INCLUDE Irvine32.inc
.data
ProgInfo BYTE " ",0Ah
BYTE "------------------------------------------------------",0Ah
BYTE "This program will reorder an array of characters",0Ah
BYTE "all vowels will be moved to the beginning of the array",0Ah
BYTE "------------------------------------------------------",0Ah
BYTE " ",0
Prompt1 BYTE "Please enter the number of characters to be inputed: ",0
NChars DWORD ? ;Unitialized for user input
myarray BYTE ?
Prompt2 BYTE "Please enter a string of characters: ",0
Reordered BYTE " ",0Ah
BYTE "The reordered array is: ",0
.code
main PROC
mov edx, OFFSET ProgInfo
call WriteString
mov edx, OFFSET Prompt1 ;ask for total characters
call WriteString
call ReadInt ;read as integer
mov Nchar, eax
mov edx, OFFSET Prompt2 ;ask for the string of characters
call WriteString
mov edx, OFFSET myarray
mov ecx, NChars
call ReadString
exit
main ENDP
END main
考虑使用与此类似的方法来检查循环中的元音,因为它通过数组
VowelCheck:
cmp myarray[edi],'a'
je isVowel
cmp myarray[edi],'A'
je isVowel
cmp myarray[edi],'e'
je isVowel
cmp myarray[edi],'E'
je isVowel
cmp myarray[edi],'i'
je isVowel
cmp myarray[edi],'I'
je isVowel
cmp myarray[edi],'o'
je isVowel
cmp myarray[edi],'O'
je isVowel
cmp myarray[edi],'u'
je isVowel
cmp myarray[edi],'U'
je isVowel
【问题讨论】:
-
你可以有一个包含所有元音的字符串,然后使用
repne scasb来查看是否可以在该字符串中找到当前字符。 -
我在课堂教科书中搜索了
repne scasb,我发现它会更好,但是我们还没有达到那个点。 -
@Michael:检查元音的更好方法是use the character as an index into a 32bit-immediate bitmap,在将 ASCII 编码范围移动到字母表中从零开始的索引之后。对于这个问题,您不需要实际排序,只需表现得像插入排序。维护一个指向数组前面元音末尾的元音指针,以及另一个扫描整个数组的指针。当第二个指针找到元音时,进行交换并移动元音指针。
标签: arrays assembly x86 masm irvine32