有一段内嵌汇编:asm
push ax
push dx
push bx mov dx, Addr+$b
mov al, 30h
out dx, al
mov al, 70h
out dx, al
mov al, 0b0h
out dx, al
mov dx, Addr+$f
mov al, 30h
……
……
……
end;
其中的Addr是基地址,需要变换的。我在把这个Addr设置为Const的时候,
Const
Addr = $210;
是可以正常执行的。但是,如果把它设置为变量,就不行了
var
Addr: Word;
然后在程序中设置
Addr:= $210;这是为什么?
push ax
push dx
push bx mov dx, Addr+$b
mov al, 30h
out dx, al
mov al, 70h
out dx, al
mov al, 0b0h
out dx, al
mov dx, Addr+$f
mov al, 30h
……
……
……
end;
其中的Addr是基地址,需要变换的。我在把这个Addr设置为Const的时候,
Const
Addr = $210;
是可以正常执行的。但是,如果把它设置为变量,就不行了
var
Addr: Word;
然后在程序中设置
Addr:= $210;这是为什么?
执行完mov dx, Addr+$b后,dx显示,值为539
而用变量的话,显示为51200另外,若基地址发生变化,比如由$210变为$280,用常量后,dx是随之变化的,
而用变量,dx都是51200...这种情况怎么办?
......................
mov word [ebp - $02], $0210 //ebp - $02 为变量 addr 的指针.
mov dx, [ebx + $9] ; // ebx + $9 = ebp - $02 + $B , 这里就乱了.
............这样写就可以了:asm
push ax
push dx
push bx
mov dx, addr
add dx, $b
//mov dx, Addr+$b
……
……
……
end;