procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  asm
    stack segment stack
      db 200 dup(0)
    stack ends
    data segment
      buf db 'How Are You!$'
    data ends
    code segment
      assume cs:code,ds:data,ss:stack
    start:
      mov ax,data
      mov dx,ax
      lea dx,buf
      mov ah,9
      int 21h
      mov ah,4ch
      int 21h
    code ends
    end start
  end;
end;
此代码错误,我是测试能否定义堆栈段,数据段,代码段。

解决方案 »

  1.   

    segment,assume这些伪指令不支持,也没必要
      

  2.   

    int 21h
    //调用DOS端口也是不行的
      

  3.   

    int 21h编译不会错,执行起来才出错,不过这段代码根本就是一个独立的程序怎么想到嵌在delphi的一个函数里面?
      

  4.   

    调用dos中断肯定是不行的。
    可以这样和汇编结合:
    var
      i: integer;
    begin
      asm
    ......
        mov eax,10;
        mov i,eax;  
        {i此时为10}
    ......
      end;
    end;
      

  5.   

    不能定义汇编风格的段,但实际是有段的。
    数据段就在var里面定义。
    代码段就在asm...end之间罗。
    堆栈段不用自己定义,windows程序默认就有多少M的堆栈段好像,可以直接push,pop等。