所以,我在汇编代码中不断收到此错误,而且我不知道如何修复它
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
我看到另一篇关于同样错误的帖子,我尝试了他们所说的,但它没有奏效。我的所有程序都有这个错误,我似乎无法摆脱它们。
答案 0 :(得分:1)
对于大多数C编译器,int foo(int x) { return 0; }
会警告未使用的x
是否在定义之前有原型。
这是asm版本:我假设您没有在定义中使用参数。
MASM可能没有注意到mov ESI, [EBP + 12]
正在访问你的函数arg; 为了让您高兴,您可能不得不使用令人困惑的mov ESI, address
(如果您不习惯使用MASM),因为它看起来像一个静态符号名称,而不是带有基址寄存器的堆栈地址!
如果你不喜欢MASM,你就不必使用它。 NASM运作良好。 (虽然你可能会因为Irvine32而无法使用MASM。但我认为你可以避免使用它的参数声明内容,而只是写一些简单的asm来跟踪你自己在堆栈/寄存器上做的事情。也就是说,如果你push
填充或者以正常方式call
之前把它放在寄存器中,它就不会抱怨。)