Снова поиск на ассемблере - PullRequest
1 голос
/ 04 марта 2012

Я пытаюсь создать программу, которая будет вводить числа в массив, а затем будет искать в массиве одно из чисел. Я могу заставить его читать и искать в порядке, чтобы найти число, но пользователь должен возможность поиска снова, где я должен сравнить свои входные данные с "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.

1 Ответ

0 голосов
/ 04 марта 2012

Почему все говорят, что сначала запишите это в HLL?

Почему вы используете размеры WORD?Используйте натуральный размер процессора 32 бита.

Что это за ассемблер?Если это MASM или любой другой, входные, макросы или функции?В любом случае, вы пытаетесь преобразовать адрес 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...