我有汇编代码,我想将它实现为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程序中运行...提前感谢!
答案 0 :(得分:4)
您不能将DOS中断与Windows API混合使用。您可能需要使用DirectX的full screen mode代替。
答案 1 :(得分:2)
通常将汇编程序与C混合可以通过在单独的汇编程序文件中定义asm编写的函数来完成,如果编译为.o然后与C程序链接在一起,C程序调用汇编程序编译的对象中的函数。
为此您需要了解调用约定,如何在堆栈或寄存器中传递参数以及编写定义函数原型的头文件,这是在汇编程序中实现的。
如何将asm与C混合的一些例子:
http://www.cs.lmu.edu/~ray/notes/nasmexamples/
其他方式是使用GCC内联汇编语法:http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html
请注意,最初的GNU Assembler语法与masm和许多其他x86汇编程序完全不同。但是看起来这已经在2.10版(http://en.wikipedia.org/wiki/GNU_Assembler)中修复了
另外@ Neil的回答代表,你不能从Windows程序做DOS中断。