最好给个例子

解决方案 »

  1.   

    asm
         mov dx,1231
         in  dx,al
         mov Result,al
      end
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject); 
    >   var i:smallint; 
    >   begin 
    >    i:=1; 
    >    asm 
    >    mov ax,i 
    >    sal ax,1 
    >    mov &i,ax 
    >    end; 
    >    showmessage(inttostr(i)); 
    >   end; 
      

  3.   

    cg1120(代码最优化-§新年祝福你,好运伴着你§)
    说的对呀,
    不过你可以在delphi的源程序中找一下,那里是有的。
      

  4.   

    简易的参数访问
    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 更能适应数据类型的潜在变
      

  5.   

    我考,在delphi帮助里都有现成的例子,还要问,你有必要这么做吗?