我正在尝试制作一个程序,将数字输入到一个数组中然后能够在数组中搜索其中一个数字。我可以让它读取并搜索好找到数字,但用户应该是能够再次搜索,我必须将他们的输入与“n”和“N”进行比较。我似乎无法让它正常工作。我不确定使用atow是否是正确的输入,但这是代码。
number1 WORD ?
anArray WORD 100 DUP (?)
count WORD ?
search WORD ?
searchn BYTE "n",0
searchNo BYTE "N",0
prompt1 BYTE "Enter a number or -1 to quit.", 0
prompt2 BYTE "Enter a number to search for", 0
prompt3 BYTE "Search for another number Y/N",0
inString BYTE 40 DUP (?)
outMsgLabel BYTE "Search Result", 0
frontOut1 BYTE 6 DUP (?)
outMsg1 BYTE " is element"
rearOut1 BYTE 6 DUP (?),0
frontOut2 BYTE 6 DUP (?)
outMsg2 BYTE " is not in array",0
searchAgain: input prompt3, inString, 40
atow inString
mov dx,ax
atow searchn
mov ax,"n"
cmp ax,dx
je end1
atow searchNo
mov ax,"N"
cmp ax,dx
je end1
jmp next
我只包含了不起作用的代码片段和我的.DATA部分。
答案 0 :(得分:0)
为什么每个人都说首先在HLL中写它?
为什么使用WORD尺寸?使用32位处理器的自然尺寸。
这是什么汇编程序?如果它是MASM或任何其他,输入,atow宏或函数?无论哪种方式,您都试图将inString的地址转换为单词而不是其内容
试试这个:
prompt3 BYTE "Search for another number Y/N ? >"
PROMPT3_SIZE equ $ - prompt3
SearchAgain:
push PROMPT3_SIZE
push offset prompt3
call WriteToConsole
call GetKeyCode
cmp eax, 78 ; N
je end1
cmp eax, 110 ; n
je end1
cmp eax, 65 ; Y
je Continue
cmp eax, 97 ; y
je Continue
; invalid char was entered, do whatever here
jmp SearchAgain
end1:
; don't want to search again
Continue:
; search for character
; ...
; ...
; ...
push 0
call ExitProcess
WriteToConsole:
enter 0, 0
push STD_OUTPUT_HANDLE
call GetStdHandle
push 0
push 0
push [ebp + 12]
push [ebp + 8]
push eax
call WriteConsole
leave
ret 4 *2
GetKeyCode:
push STD_INPUT_HANDLE
call GetStdHandle
push eax
call FlushConsoleInputBuffer
call crt__getch
xor ecx, ecx ; zero ecx for non extended key return value
test eax, eax
jz @F
cmp eax, 0E0h
jnz quit
@@:
call crt__getch
mov ecx, 1 ; return 1 in ECX if an extended key is pressed
quit:
ret