0

我有这个代码

.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 。为什么会发生这种情况?

4

1 回答 1

-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
于 2012-10-31T18:00:52.037 回答