汇编代码(为masm编写)在C程序中(用gcc编译)..如何去做



我有汇编代码,我想把它实现成一个C程序。我一直在使用masm来获得我的汇编代码工作,我使用gcc来编译C代码。

我在Windows XP中使用NetBeans。

我想让命令提示符全屏显示,然后画一条线,就像这样:

.model small
.stack
.code
    main proc far
    mov ax,@data
    mov DS,ax
    mov ah,00h
    mov al,12h
    int 10h 
    mov ah,02h
    mov dh,14 
    mov dl,37
    int 10h
    mov di,65
    mov ah,0ch
    mov bh,00h
    mov al,09h
    mov Cx,290
    mov dx,200
arriba: int 10h
    inc cx      
    dec di      
    Jnz arriba
    mov di,65
    mov ah,08h
    int 21h
    mov ax,4c00h
    int 21h 
    main endp
    end main

如果我使用masm代码工作,但我不知道如何让它在我的C程序中工作…提前感谢!

不能将DOS中断与Windows API混合使用。你可能需要使用DirectX的全屏模式。

一般来说,GCC可以通过在单独的汇编文件中定义用asm编写的函数来实现汇编和C语言的混合,这些汇编文件被编译成。o,然后与C程序链接在一起,该程序调用从汇编器编译的对象中的函数。

为此,你需要知道调用约定,参数如何在堆栈或寄存器中传递,以及定义函数原型的写头,这是在汇编中实现的。

如何将asm与C混合使用的一些例子:

http://www.cs.lmu.edu/雷/notes/nasmexamples/

另一种方法是使用GCC内联汇编器语法:http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html

请注意,最初的GNU汇编器语法与masm和许多其他x86汇编器有很大不同。然而,看起来这个问题已经在v. 2.10中修复了(http://en.wikipedia.org/wiki/GNU_Assembler)

而且@Neil的答案是,你不能从windows程序中执行DOS中断。

相关内容

  • 没有找到相关文章

最新更新