Mac OS X的汇编GUI编程

14
我想知道如何在Mac OS X上编写一个简单的汇编程序,显示一个窗口并在窗口上放一些彩色文本。代码可能会调用一些Carbon或Cocoa API。我需要一些nasm语法的代码。
我在http://snipplr.com/view/29150/assembly-code-nasm-for-mac--hello-world中看到了下面的代码,它可以正常工作,但不是图形化的。
  ; Mac上汇编实现Hello World
  ; 
  ; nasm -f macho hello.asm 
  ; ld -e _start -o hello hello.o
section .text global _start ;必须为链接器(ld)声明
_syscall: int 0x80 ;系统调用 ret
_start: ;告诉链接器入口点
push dword len ;消息长度 push dword msg ;要写入的消息 push dword 1 ;文件描述符(stdout) mov eax,0x4 ;系统调用号(sys_write) call _syscall ;调用内核
add esp,12 ;清除堆栈(3个参数*4)
push dword 0 ;退出码 mov eax,0x1 ;系统调用号(sys_exit) call _syscall ;调用内核
;我们不从sys_exit返回, ;没有必要清理堆栈 section .data
msg db "Hello, world!",0xa ;我们亲爱的字符串 len equ $ - msg ;我们亲爱的字符串的长度
感谢任何帮助。

9
在Mac OS X上进行底层汇编GUI编程,加1。祝好运。 - user142019
3
如果你想使用Cocoa,你可能需要查看Objective-C Runtime参考文档。 - user142019
我强烈建议不要尝试直接从汇编中使用Objective-C。仅仅获取类和创建实例就很困难,更别说创建自己的类了。 - ughoavgfhw
2个回答

2

0
你可以像这样使用call调用Carbon APIs:
call _CreateNewWindow

你也可以传递参数,但我不确定如何做。可能在调用之前以相反的顺序push到堆栈中:

push arg4
push arg3
push arg2
push arg1
call _CreateNewWindow

你可以查看C代码如何编译成汇编代码,像这样:

$ clang myCarbonCode.c -S -O -o myCarbonCode.s

谢谢,但您能否给我展示一个完整的例子以及使用nasm编译并使用ld链接的命令吗?因为我不知道如何包含一个文件(以及哪个文件)来指导nasm和ld在哪里检查api例程。我可以在Linux下(使用JWASM)和Windows下(使用MASM32)做到这一点,但我正在开始使用Mac OS X。 - jose.pereira
1
你应该与Carbon框架链接。我不了解Carbon,也从未使用过它,但Carbon框架的二进制文件位于/System/Library/Frameworks/Carbon.framework/Contents/MacOS/Carbon。我也从未使用过nasm或ld,只用过GCC和Clang。 - user142019
好的,您能否展示一个完整的C语言示例,显示一个简单的窗口和简单的彩色文本,并且可以使用GCC和Clang编译。 - jose.pereira

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接