简易的参数访问
procedure Foo(i:integer);
begin
 ///...
  asm   ///i:=i+1
    mov eax,i
    inc eax
    mov i,eax
  end;
 ///...
end;在内嵌汇编中访问变量:
如果一个参数是在一个函数或过程参数列表中被用v a r 声明的,它实际上是一个指针而不是
值。这就是说,如果要在汇编代码中引用这个参数,一定要明确,它是一个3 2 位的指针而不是一个值。
下面代码片断中阐述了如何利用汇编代码访问用v a r 声明的变量:
procedure Foo(var i:integer);
begin
  ///....
  asm   ///i:=i+1
    mov eax,i
    inc dword prt [eax]
  end;
  ///...
end;内嵌汇编的返回值:
当使用全汇编的函数时,返回值应该怎么存放呢?
表13-1 返回值的返回方式
返回类型返回方式
Char,Byte                                     al 寄存器
SmallInt , Word                               ax 寄存器
Integer,LongWord,AnsiString,Pointer,class     eax 寄存器
Real48                                        eax 寄存器中是栈内返回值的指针
Int64                                         edx:eax 寄存器对
Single,Double,Extended,Comp                   栈首寄存器ST(0)
注意一个ShortString 类型是作为一个指向栈内字符串临时实例的指针来返回的。访问记录:
B A S M 提供了一种灵活的手段访问Object Pascal 记录中的域,可以在B A S M 块中访问任意记录的域,
其访问的语法是R g i s t e r. Ty p e . F i e l d 。请看下列代码:
type
  TDumbRec=Record
    i:integer;
    c:char;
  end;
下面的函数中有一个T D u m b R e c 类型的参数:
procedure AsmRecord(var Dr:TDumbRec);
asm
  mov [eax].TDumbRec.i,20
  mov [eax].TDumbRec.c,'A'
end;你可能已注意到了,B A S M 对记录域的访问非常简单。另一种方式是通过计算域的偏移量来获取
或设置域的值。在B A S M 中使用记录的地方使用这项技术,将会使B A S M 更能适应数据类型的潜在变
化。
//////////////////////////////////////////////////////////////////////////////
好像不行的。

解决方案 »

  1.   

    int21好像属于特权0级的指令,而你的应用程序只在ring3上,所以不行的。
      

  2.   

    int21好像在特权0级上,而你的应用程序只在ring3上,所以不行。
      

  3.   

    给你一个连接好多网站的地址(可不要黑自己人啊!)
    http://psweb.swufe.edu.cn/~jachal/masm.htm
      

  4.   

    请不要去调用Dos的中断,若确实需要,可以使用VxD来调用Dos中断
    Delphi的帮助文件简单而详尽,没有比这个更加权威了,内容不多,一个小时可以读完