Vra

Is daar iemand weet van 'n goeie gereedskap (Ek is op soek na Ides) aan die gemeente skryf op die Mac. Xcode is 'n bietjie lastig om my.

Ook op die Intel Macs, kan ek gebruik generiese x86 ASM? Of is daar 'n aangepaste stel instruksies? Enige inligting oor post Intel.

Ook: Ek weet dat op vensters, kan ASM hardloop in 'n nagevolg omgewing geskep deur die bedryfstelsel om die kode te laat dink dit loop op sy eie toegewyde masjien. Maak OS X bied dieselfde ding?

Was dit nuttig?

Oplossing

Na die installering van 'n weergawe van Xcode fokus Intel-Macs, moet jy in staat wees om die gemeente-kode te skryf. Xcode is 'n suite van gereedskap, waarvan slegs een is die IDE, so jy hoef nie om dit te gebruik as jy nie wil nie. (Dit gesê, as daar spesifieke dinge wat jy clunky vind, asseblief 'n fout by Apple se fout verslaggewer - elke fout gaan ingenieurswese) Verder, die installering van Xcode sal installeer beide die Netwide Assembler (NASM) en die GNU Assembler (GAS);. wat sal toelaat dat jy gebruik wat ook al vergadering sintaksis jy die meeste gemaklik met.

Jy sal ook wil 'n blik op die Vertalerkonstruksie & Ontfouting Guides , want dié dokument die roeping konvensies soos gebruik vir die verskillende argitekture dat Mac OS X loop op, asook hoe die binêre formaat en die loader werk. Die IA-32 (x86-32) roeping konvensies in die besonder mag effens anders as wat jy gebruik om te wees.

Nog 'n ding om in gedagte te hou is dat die stelsel oproep koppelvlak op Mac OS X is anders as wat jy kan gebruik om op DOS / Windows, Linux, of die ander BSD geure. Stelsel oproepe word nie beskou as 'n stabiele API op Mac OS X; In plaas daarvan, jy altyd gaan deur libSystem. Wat sal verseker jy wil skryf kode wat draagbare uit een vrylating van die OS na die volgende.

Ten slotte, in gedagte hou dat Mac OS X loop oor 'n mooi wye verskeidenheid van hardeware - alles van die 32-bit Core Enkellopend deur die hoë-end quad-core Xeon. Deur kodering in die gemeente wat jy dalk nie in die optimalisering van soveel as wat jy dink; wat optimale op 'n masjien kan pessimal op 'n ander wees. Apple meet gereeld sy opstellers en wysies hul produksie met die "-Bedryfstelsel" optimalisering vlag ordentlike te wees oor sy lyn, en daar is 'n uitgebreide vektor / matriks-verwerking biblioteke wat jy kan gebruik om 'n hoë werkverrigting met die hand gestem CPU-spesifieke implementering kry .

Gaan na vergadering vir die pret is groot. Gaan vergadering vir spoed is nie vir die flou van hart deesdae.

Ander wenke

Soos voorheen vermeld, gebruik nie syscall. Jy kan gebruik standaard C biblioteek noem egter maar wees bewus daarvan dat die stapel moet 16 byte in lyn per Apple se IA32 funksie noem ABI .

As jy nie die stapel te pas, sal jou program crash in __dyld_misaligned_stack_error wanneer jy 'n oproep in enige van die biblioteke of raamwerke te maak.

Die volgende uittreksel monteer en lopies op my stelsel:

; File: hello.asm
; Build: nasm -f macho hello.asm && gcc -o hello hello.o

SECTION .rodata
hello.msg db 'Hello, World!',0x0a,0x00

SECTION .text

extern _printf ; could also use _puts...
GLOBAL _main

; aligns esp to 16 bytes in preparation for calling a C library function
; arg is number of bytes to pad for function arguments, this should be a multiple of 16
; unless you are using push/pop to load args
%macro clib_prolog 1
    mov ebx, esp        ; remember current esp
    and esp, 0xFFFFFFF0 ; align to next 16 byte boundary (could be zero offset!)
    sub esp, 12         ; skip ahead 12 so we can store original esp
    push ebx            ; store esp (16 bytes aligned again)
    sub esp, %1         ; pad for arguments (make conditional?)
%endmacro

; arg must match most recent call to clib_prolog
%macro clib_epilog 1
    add esp, %1         ; remove arg padding
    pop ebx             ; get original esp
    mov esp, ebx        ; restore
%endmacro

_main:
    ; set up stack frame
    push ebp
    mov ebp, esp
    push ebx

    clib_prolog 16
    mov dword [esp], hello.msg
    call _printf
    ; can make more clib calls here...
    clib_epilog 16

    ; tear down stack frame
    pop ebx
    mov esp, ebp
    pop ebp
    mov eax, 0          ; set return code
    ret

Vir 'n lekker stap-vir-stap x86 Mac-spesifieke inleiding sien http://peter.michaux.ca/articles/assembly-hello-world-for-os-x . Die ander skakels Ek het probeer om 'n paar nie-Mac slaggate.

Onlangs wou ek om te leer hoe om Intel x86 stel op Mac OS X:

Vir NASM:

-o hello.tmp - outfile
-f macho - specify format
Linux - elf or elf64
Mac OSX - macho

Vir ld:

-arch i386 - specify architecture (32 bit assembly)
-macosx_version_min 10.6 (Mac OSX - complains about default specification)
-no_pie (Mac OSX - removes ld warning)
-e main - specify main symbol name (Mac OSX - default is start)
-o hello.o - outfile

Vir Shell:

./hello.o - execution

Een-liner:

nasm -o hello.tmp -f macho hello.s && ld -arch i386 -macosx_version_min 10.6 -no_pie -e _main -o hello.o hello.tmp && ./hello.o

Laat my weet as dit help!

Ek het hoe om dit te doen op my blog hier:

http: // blog. burrowsapps.com/2013/07/how-to-compile-helloworld-in-intel-x86.html

Vir 'n meer uitgebreide verduideliking, verduidelik ek op my GitHub hier:

https://github.com/jaredsburrows/Assembly

Running vergadering Kode op Mac is net 3 stappe weg van jou. Dit kan gedoen word met behulp van Xcode maar beter is om NASM Command Line Tool gebruik. Vir My Ease Ek het reeds geïnstalleer Xcode, as jy het Xcode sy goeie geïnstalleer.

Maar jy kan dit doen sonder Xcode sowel.

Just Volg:

  1. Eerste installeer NASM met behulp van Homebrew brew install nasm
  2. omskep .asm lêer in Obj lêer met hierdie opdrag nasm -f macho64 myFile.asm
  3. Run Obj lêer om uitset te sien met behulp van command ld -macosx_version_min 10.7.0 -lSystem -o OutPutFile myFile.o && ./64

eenvoudige teks lêer met die naam myFile.asm word hieronder geskryf vir u gerief.

global start
section .text

start:
    mov     rax, 0x2000004 ; write
    mov     rdi, 1 ; stdout
    mov     rsi, msg
    mov     rdx, msg.len
    syscall

    mov     rax, 0x2000001 ; exit
    mov     rdi, 0
    syscall

section .data

msg:    db      "Assalam O Alaikum Dear", 10
.len:   equ     $ - msg
  

Ook op die Intel Macs, kan ek gebruik generiese x86 ASM? of is daar 'n aangepaste stel instruksies? Enige inligting oor post Intel Mac vergadering help.

Dit is dieselfde stel instruksies; dit is dieselfde skyfies.

Die funksies wat beskikbaar is om te gebruik is afhanklik van jou verwerker. Apple gebruik dieselfde Intel dinge soos almal anders. So ja, moet generiese x86 goed wees (met die aanvaarding jy nie op 'n PPC: D).

Sover gereedskap gaan, ek dink jou beste bet is 'n goeie teks editor wat 'verstaan' vergadering.

Vergeet om 'n IDE om te skryf / run / stel assembler op Mac. Maar, onthou Mac is UNIX. Sien http://asm.sourceforge.net/articles/linasm.html . 'N ordentlike gids (hoewel kort) te hardloop assembler via GCC op Linux. Jy kan dit naboots. Macs gebruik Intel chip so jy wil om te kyk na Intel sintaksis.

Moenie vergeet dat in teenstelling met Windows, alle Unix-gebaseerde stelsel moet die bron het voor bestemming in teenstelling met Windows

Op Windows sy:

mov $ bron,% bestemming

maar op die Mac sy andersom.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top