Отладчик всегда выдает ошибку при второй процедуре

#visual-studio #assembly #x86 #masm #subroutine

#visual-studio #сборка #x86 #masm #подпрограмма

Вопрос:

Я пытаюсь отладить свою программу, чтобы я мог справиться с проблемой HW. Проблема с HW не имеет отношения к проблеме, поскольку я тестировал ее с помощью 2 отдельных процедур.

По сути, когда я пытаюсь отлаживать, я могу установить точку останова для первой процедуры, и она будет работать нормально.

Точка останова во второй процедуре будет через ошибку.

Код компилируется просто отлично.

Код отлично работает только с одной процедурой, и я протестировал базовые процедуры.

 INCLUDE Irvine32.inc
.386
.model flat,stdcall
.stack 4096
ExitProcess proto,dwExitCode:dword

.data
    myString BYTE "Hello World",0dh,0ah

.code
main proc

    ;------DigitValue2ASCII-----
DigitValue2ASCII proc
    mov eax, 0000h
    mov edx, 0ch 
    mov al, 00h
    cmp dl, 0ah
    jae letter
    cmp dl, 0ah
    jb number
    letter: add dl, 37h
    jmp final
    number: add dl, 30h
    final: mov al, dl
    call writechar

    mov eax, 0000h
    mov edx, 09h
    mov al, 00h
    cmp dl, 0ah
    jae letter1
    cmp dl, 0ah
    jb number1
    letter1: add dl, 37h
    jmp final1
    number1: add dl, 30h
    final1: mov al, dl
    call writechar

    ret
DigitValue2ASCII endp

WriteHexByte proc
    mov eax, 00h
    ret
WriteHexByte endp



call DigitValue2ASCII   


invoke ExitProcess,0
main endp
end main
  

Ошибка

 'Project.exe' (Win32): Loaded 'C:WindowsSysWOW64ucrtbase.dll'. Symbols loaded.
'Project.exe' (Win32): Loaded 'C:WindowsSysWOW64imm32.dll'. Symbols loaded.
The thread 0x2cd0 has exited with code 0 (0x0).
The thread 0x4f7c has exited with code 0 (0x0).
The thread 0x13a4 has exited with code 0 (0x0).
The program '[18384] Project.exe' has exited with code 57 (0x39).```
  

Комментарии:

1. myString отсутствует ,0 завершающий байт 0, который является строкой C неявной длины. (помимо проблемы, которую вы обнаружили при размещении других ваших функций внутри main …)

Ответ №1:

Мне пришлось переместить процедуры ниже main endp , а не между main proc ними и main endp