2012-10-30 99 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