Почему мой выбор таблицы дел не указывает на правильный адрес после ввода значения поиска? - PullRequest
0 голосов
/ 03 апреля 2019

Для упражнения по программированию на языке ассемблера для процессоров x86 я создал программу выбора таблицы дел в Visual Studio, которая будет принимать целочисленное значение и указывать на соответствующую процедуру, связанную с этим значением.Однако, когда я ввожу целое число, оно не указывает на правильную процедуру.Фактически, он полностью обходит процесс выбора.

Когда я запускаю программу и ввожу целое число в диапазоне от 1 до 4, она ничего не отображает и завершает программу.

Примечание:Я новичок в ассемблере, поэтому не знаю слишком много.

INCLUDE irvine32.inc

.data
CaseTable  BYTE  '1'
       DWORD AND_op
       BYTE  '2'
       DWORD OR_op
       BYTE '3'
       DWORD NOT_op         
       BYTE '4'
       DWORD XOR_op
    NumberOfEntries = 4

    titlemsg BYTE "---------- Boolean Calculator ----------", 0
    ANDprompt BYTE "1.  X AND Y", 0
    ORprompt BYTE "2.  X OR Y", 0
    NOTprompt BYTE "3.  NOT X", 0
    XORprompt BYTE "4.  X XOR Y", 0
    Exitprompt BYTE "5.  Exit Program", 0
    askUser BYTE "Please enter an option number: ", 0

.code
main PROC
    ; Display prompts and title...


    mov edx, OFFSET askUser
    Call WriteString
    Call ReadInt        ; Inserts number entered into the EAX register

    .IF al == 5    ; Conditional Statement if user chooses to end program.
        jmp L3
    .ENDIF

    mov ebx, OFFSET CaseTable
    mov ecx, NumberOfEntries

L1:
    cmp al, [ebx]           ; Match found?
    jne L2              ; No: Continue
    Call NEAR PTR [ebx + 1]     ; Yes: Call procedure

    Call Crlf
    jmp L3
L2:
    add ebx, 5
    loop L1
L3:

    INVOKE ExitProcess, 0
main ENDP
; Procedures called after a match has been made merely display text to the screen, so they are unimportant to the problem at hand.
END main
...