汇编程序循环和变量

时间:2012-10-30 20:35:07

标签: loops assembly

我有这段代码

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

1 个答案:

答案 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