首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

变量代入内嵌汇编如何就不对了呢…

2012-02-15 
变量代入内嵌汇编怎么就不对了呢……有一段内嵌汇编:asmpush axpush dxpush bxmov dx, Addr+$bmov al, 30hou

变量代入内嵌汇编怎么就不对了呢……
有一段内嵌汇编:

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;

这是为什么? 


[解决办法]
错字 而编译时汇编中的变量会被一个地址取代

所以这个地址不能是局部变量

[解决办法]
因为如果addr 为 const 时, 是以立即数的形式编译的.

mov dx, Addr + $b 这一句被编译为: mov dx, $21b 

==================================================

而 addr 为 var 时, 是以指针的形式编译的:
......................
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;

热点排行