我有这段代码
.186
.model small, stdcall
.stack 128
draw_rect PROTO STDCALL :WORD, :WORD, :WORD, :WORD
.data
x DB 15
...
.code
...
main:
start_loop:
invoke draw_rect, 160, 100, x, 11111111b
dec x
cmp x, 3
jnl start_loop
...
这个循环是永恒的。但是,x从15开始递减(我可以在显示器上看到这个),永恒。我想,它应该变得等于3或更少,而不是3. JNL - 而不是更少。 draw_rect根本不接触x。为什么会发生这种情况?
答案 0 :(得分:-1)
当您使用DB(定义字节)宏时,ADDRESS将宏代入二进制文件。
您想要的代码如下:
MOV EAX, x ; get the address of x
start:
invoke draw...
DEC [EAX] ; decrement the value at the address
CMP [EAX], 3 ; compare the value at the address
JNL start