Не доступен исходный код о достижении конца PROC - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь вызвать функцию, которая выведет строку, определяющую, насколько «быстро» вы едете в своей машине, используя целые числа. Проблема в том, что независимо от того, что находится в регистре eax, он не выполняет должным образом цикл ELSE IF и завершает PROC.

INCLUDE Irvine32.inc            ;Use Irvine32 library.

.data
    ;Declare variables here.

    speed BYTE ?, 0
    wTooFast BYTE "Woah! You are going way too fast! Slow down!", 0                     
    tooFast BYTE "You are going faster than the speed limit. Slow down.", 0                     
    speedLimit BYTE "You are maintaining an appopriate speed limit. Keep up being a safe driver!", 0                        
    tooSlow BYTE "You are going slower than the flow of traffic. Speed up.", 0                      
    wTooSlow BYTE "Is the engine even on? Speed up!", 0                     



.code
main PROC
    ;Write your code here.  

    target:
        call Randomize
        mov eax, 101
        call RandomRange
        .IF (eax <= 40)
        jmp target
        .ENDIF
    call WriteInt

    call SpeedVal
    mov edx, 0
    mov speed, al
    mov edx, OFFSET speed
    call WriteString
    call Crlf





    exit                        ;Exit program.
main ENDP

    SpeedVal PROC

        .IF (eax >= 85)
        mov al, wTooFast
        .ELSEIF (eax > 75) && (eax < 85)
        mov al, tooFast
        .ELSEIF (eax > 64) && (eax < 76)
        mov al, speedLimit
        .ELSEIF (eax > 54) && (eax < 65)
        mov al, tooSlow
        .ELSE
        mov al, wTooSlow
        .ENDIF


    SpeedVal ENDP



END main

должно выводиться в зависимости от того, какая случайная переменная является одной из строк, объявленных в разделе .data.

1 Ответ

1 голос
/ 08 ноября 2019

Похоже, вы забыли ret, поэтому выполнение падает с нижней части вашего PROC. А отладчик просто показывает вам «источник недоступен», потому что, я полагаю, вы используете представление источника вместо представления дизассемблирования.

PROC / ENDP не вставляет инструкцию ret для вас.

...