【问题标题】:Assembly GUI programming for Mac OS XMac OS X 的汇编 GUI 编程
【发布时间】:2011-07-23 16:25:24
【问题描述】:

我想知道如何为 Mac OS X 编写一个简单的汇编程序,在屏幕上显示一个窗口并在该窗口上放置一些彩色文本。代码可能会调用一些 Carbon 或 Cocoa API。我需要一些 nasm sintaxe 的代码。

我在http://snipplr.com/view/29150/assembly-code-nasm-for-mac--hello-world 看到了下一个可以正常工作的代码,但它不是图形。

;用于 mac 的程序集中的 Hello World ; ; nasm -f macho hello.asm ; ld -e _start -o 你好你好.o 部分 .text global _start ;必须为链接器(ld)声明 _系统调用: int 0x80 ;系统调用 ret _start: ;告诉链接器入口点 push dword len ;消息长度 push dword msg ;要写入的消息 push dword 1 ;文件描述符(标准输出) mov eax,0x4 ;系统调用号(sys_write) call _syscall ;调用内核 add esp,12 ;clean stack (3 arguments * 4) push dword 0 ;退出代码 mov eax,0x1 ;系统调用号(sys_exit) call _syscall ;调用内核 ;我们不从 sys_exit 返回, ;无需清理堆栈 节 .data msg db "Hello, world!",0xa ;我们亲爱的字符串 len equ $ - msg ; 我们亲爱的字符串的长度

感谢您的帮助

【问题讨论】:

  • +1 用于 Mac OS X 中的核心汇编 GUI 编程。祝你好运。
  • 另外,如果你想使用 Cocoa,你可能想看看 Objective-C 运行时参考。
  • 我强烈建议反对尝试直接从程序集中使用objective-c。如果不尝试创建自己的类,只是获取类和创建实例是很困难的。

标签: cocoa macos assembly macos-carbon


【解决方案1】:

这不是之前答案中 cmets 中要求的 Carbon,但它可能会帮助您在崇高的追求中更进一步:

http://cocoawithlove.com/2010/09/minimalist-cocoa-programming.html

【讨论】:

    【解决方案2】:

    您可以像这样使用call 调用 Carbon API:

    call _CreateNewWindow
    

    您也可以传递参数,但我不确定该怎么做。可能pushcall之前以相反的顺序进入堆栈:

    push arg4
    push arg3
    push arg2
    push arg1
    call _CreateNewWindow
    

    您可以查看 C 代码如何编译成程序集,如下所示:

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

    【讨论】:

    • 谢谢,但请给我看一个完整的例子和用nasm编译它并用ld链接的命令。因为我不知道如何包含一个文件(和 witch 文件)来指示 nasm 和 ld 在哪里检查 api 的例程。我可以在 Linux(使用 JWASM)和 Windows(使用 MASM32)下做到这一点,但我开始使用 Mac OS X。
    • 你应该链接到 Carbon 框架。我不知道 Carbon,也从未使用过它,但 Carbon 框架的二进制文件位于 /System/Library/Frameworks/Carbon.framework/Contents/MacOS/Carbon。我也从未使用过 nasm 或 ld 。只是 GCC 和 Clang。
    • 好的,你能给我看一个完整的 C 语言示例,它显示一个简单的窗口,上面有一个简单的彩色文本,可以用 GCC 和 Clang 编译。
    猜你喜欢
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    • 2013-02-06
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    • 2013-12-03
    • 2011-10-22
    相关资源
    最近更新 更多