предупреждение A6004: аргумент процедуры или локальный параметр не указан: адрес сборки MASM - PullRequest
0 голосов
/ 01 мая 2018

Итак, я продолжаю получать эту ошибку в своем ассемблерном коде и не знаю, как ее исправить

1>..\finalTe2.asm(175): warning A6004: procedure argument or local not referenced : address

Вот мое объявление процедуры и ее параметров

displayBoard PROTO address:DWORD

и вот как я его использую

displayBoard PROC address:DWORD
.data
boardRow BYTE '----------------', 0Ah, 0Dh, 0
boardColumn BYTE '|', 0

.code
push EBP
mov EBP, ESP
mov ESI, [EBP + 12]                             ;The address of the 2D array on the stack
mov ECX, 3h                                     ;Loop 3 times for the number of rows
BOARD1:
    mov EDX, OFFSET boardRow                    ;Display the first set of row characters
    coutS
    push ECX                                    ;preserve ECX
    clearECX
    mov ECX, 3h                                 ;Loop 3 times for the number of columns
    BOARD2:
        mov EDX, OFFSET boardColumn             ;display the first column character
        coutS
        invoke displayCell, ESI                 ;Call the proc that assigns the color of each cell
        inc ESI                                 ;Inc ESI to step through the 2D array this is used in the testCell proc
    loop BOARD2
    pop ECX
    mov EDX, OFFSET boardColumn
    coutS
    call crlf
loop BOARD1
mov EDX, OFFSET boardRow
coutS
pop EBP
ret
displayBoard ENDP

Я видел другой пост об этой же ошибке, и я попробовал то, что они сказали, но это не сработало. У меня есть эта ошибка во всех моих процедурах, и я просто не могу избавиться от них.

1 Ответ

0 голосов
/ 01 мая 2018

В большинстве компиляторов C int foo(int x) { return 0; } будет предупреждать о неиспользованном x вне зависимости от того, был ли у вас прототип перед определением.

Это asm-версия: вы не используете параметр в определении , я полагаю.

MASM, вероятно, не замечает, что mov ESI, [EBP + 12] обращается к вашей функции arg; , чтобы сохранить его счастливым, вам, вероятно, придется использовать mov ESI, address, что сбивает с толку (если вы не привыкли к MASM), потому что это похоже на статическое имя символа, а не на адрес стека с базовым регистром !

Если вам не нравится MASM, вам не нужно его использовать. NASM работает хорошо. (Хотя, возможно, вы застряли с MASM для Irvine32. Я думаю, что вы можете избежать использования его объявления параметров, и просто написать простой asm, где вы будете следить за тем, что вы делаете со стеком / регистрами самостоятельно. не собираюсь жаловаться, если вы push наберете вещи или внесете их в регистры раньше, чем call обычным способом.)

...