2012-10-30 36 views
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 - 不小于3。 draw_rect根本不碰x。为什么会发生这种情况?

+2

什么汇编? –

+1

你确定它不是'CMP [x],3'吗? –

回答

-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