Программирование GUI для Mac OS X - PullRequest
13 голосов
/ 27 марта 2011

Я хотел бы знать, как я могу сделать простую программу сборки для Mac OS X, которая отображает окно на экране и помещает в него цветной текст. Код может вызывать некоторые API-интерфейсы Carbon или Cocoa. Мне нужен какой-то код для синтаксиса носа.

Я видел в http://snipplr.com/view/29150/assembly-code-nasm-for-mac--hello-world следующий код, который отлично работает, но не графический.

  ; Hello World in assembly for mac 
  ; 
  ; nasm -f macho hello.asm 
  ; ld -e _start -o hello hello.o 


  section .text 
  global _start ;must be declared for linker (ld) 

  _syscall: 
  int 0x80      ;system call 
  ret 

  _start:       ;tell linker entry point 

  push dword len    ;message length 
  push dword msg    ;message to write 
  push dword 1      ;file descriptor (stdout) 
  mov eax,0x4       ;system call number (sys_write) 
  call _syscall     ;call kernel 

  add esp,12        ;clean stack (3 arguments * 4) 

  push dword 0      ;exit code 
  mov eax,0x1       ;system call number (sys_exit) 
  call _syscall     ;call kernel 

  ;we do not return from sys_exit, 
  ;there's no need to clean stack 
  section .data 

  msg db "Hello, world!",0xa    ;our dear string 
  len equ $ - msg               ;length of our dear string 

Спасибо за любую помощь

Ответы [ 2 ]

2 голосов
/ 25 июля 2011

Это не углерод, как было запрошено в комментариях к предыдущим ответам, но это может помочь вам продвинуться дальше в вашем благородном стремлении:

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

0 голосов
/ 27 марта 2011

Вы можете вызывать API-интерфейсы Carbon с помощью call следующим образом:

call _CreateNewWindow

Вы также можете передавать аргументы, но я не уверен, как это сделать.Вероятно, push переместился в стек в обратном порядке перед самым call:

push arg4
push arg3
push arg2
push arg1
call _CreateNewWindow

. Вы можете посмотреть, как ваш код на C компилируется в сборку, например:

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