我有汇编代码,我想把它实现成一个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中断。