문제

는 사람은 좋은 도구(내가 찾 Ide)를 쓰는 어셈블리에 맥.Xcode 조금 복잡하다.

또한,Intel Macs 사용할 수 있습니는 일반 86asm?또는 거기에 수정된 명령입니까?에 대한 정보를 포스트 인텔 등이 있습니다.

도:내가 알고 있는 윈도우에서,asm 에서 실행할 수 있는 에뮬레이션 환경을 만든 OS 에 의해를 하자 코드를 생각에서 실행 자신의 전용 기계입니다.가 OS X 을 통해 이와 같은 것은?

도움이 되었습니까?

해결책

설치한 후에는 어떤 버전의 엑스 코드를 타겟팅 Intel 기반 Mac,당신를 쓸 수 있어야 어셈블리 코드입니다.Xcode 는 도구 세트를,하나만 IDE,그래서 당신이 사용하지 않는 경우에 당신은 그것을 원하지 않습니다.(는 말이 있는 경우에,특정한 것들을 찾을 투박하시기 바랍에서 버그 애플의 버그 기자 -모든 버그가 엔지니어링입니다.) 또한,설치 Xcode 이 모두 설치 Netwide Assembler(NASM)과 GNU Assembler(GAS);을 사용할 수 있도록하는 어떤 어셈블리는 구문을 가장 편안하다.

당신은 또한을 살펴보 컴파일러&디버깅을 가이드, 기 때문에,그 문서의 전화 사용된 규칙에 대한 다양한 아키텍처는 맥 OS X 에서 실행하는 방법뿐만 아니라,바이너리 형식과 장전기 작동합니다.IA-32(x86-32 분)호출 규칙에서는 특정 약간 다를 수 있습니다 무엇에서 오신 것을 환영합니다.

다른 것을 염두에 두고 시스템 전화 인터페이스에서 Mac OS X 에서 다른 무엇은 당신이 사용할 수 있습니다 DOS/Windows,Linux,또는 다른 BSD 맛입니다.시스템 호출으로 간주되지 않습니다 안정적인 API Mac OS X;대신에,당신은 항상 통 libSystem.는 것입니다 있는지 확인하는 코드를 작성하는 휴대용 중 하나에서의 방출 OS 있습니다.

마지막으로,유지 하는 마음에 Mac OS X 에 걸쳐 실행 예쁜의 다양한 하드웨어 모두에서 32 비트 핵심 단일을 통해 높은-엔드 quad-core Xeon.여 코딩에 어셈블리 되지 않을 수도 있습니다 최적화하는만큼 당신이 생각하는;what's 에 최적의 한계 될 수 있습 pessimal 다.Apple 정기적으로 측정 컴파일러와 음악의 출력으로"-Os"깃발 최적화하는 것이 현명한 방법에서 라인,그리고 거기에 다양한 벡터/매트릭스 처리할 수 있는 라이브러리를 사용하여 높은 성능을 얻을 수 있는 손으로 조정된 CPU 별 구현.

을 어셈블리에 대한 재미있은 좋은 것입니다.을 어셈블리에 대한 속도가 심장 약한 이러한 일입니다.

다른 팁

기 전에 명시된 바와 같이,사용하지 않는 syscall.당신이 사용할 수 있는 표준 C 라이브러리 호출을 하지만,그러나 알고 있는 스택해야 하는 16 바이트의 정렬당 애플의 IA32 함수 호출 ABI.

지 않는 경우에 정렬,스택 프로그램에 충돌 __dyld_misaligned_stack_error 전화를 할 때로는 어떤 라이브러리나 프레임 워크입니다.

다음 코드를 조립하고 실행에서 시스템:

; 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

한 단계별 86Mac 특정 소개보 http://peter.michaux.ca/articles/assembly-hello-world-for-os-x.다른 링크를 했는데 일부는 비 Mac 함정이 있습니다.

최근 알고 싶다고 생각하여 컴파일하는 방법 Intel x86Mac OS X:

에 대한 nasm:

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

에 대한 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

포탄을 위한:

./hello.o - execution

One-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

알려는 경우이 도움이 됩니다!

내가 쓴 그것을 어떻게 블로그에 여기:

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

에 대한 자세한 설명,내가 설명에 나 Github here:

https://github.com/jaredsburrows/Assembly

실행하는 어셈블리 코드를 Mac 에서는 3 단계에서 당신입니다.그것을 할 수 있는 엑스 코드를 사용하여 하지만 더 나은 사용하는 것입 NASM 명령행 도구입니다.에 대한 내성 이미 설치 Xcode 있는 경우,Xcode 에 설치한다.

하지만 그것을 할 수 있는 없이 XCode 니다.

그냥 따라:

  1. 첫 번째 NASM 설치를 사용하여 Homebrew brew install nasm
  2. 변환합니다.asm 파일로 Obj 파일을 사용하여 이 명령 nasm -f macho64 myFile.asm
  3. 실행 Obj 파일을 참조 출력을 사용하여 명령 ld -macosx_version_min 10.7.0 -lSystem -o OutPutFile myFile.o && ./64

단순한 텍스트 파일 이름 myFile.asm 가 아래 기록에 제공됩니다.

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

또한,Intel Macs 사용할 수 있습니는 일반 86asm?또는 거기에 수정된 명령입니까?에 대한 어떠한 정보 게시 Intel Mac 어셈블리에 도움이 됩니다.

그것은 동일한 명령어 집합;그것은 동일한 칩이 있습니다.

사용 가능한 기능을 사용에 의존하는 귀하의 프로세서입니다.Apple 용 Intel 는 물건으로 다른 사람.그래서 그래,일반 86 잘해야(고 가정하고 당신에 PPC:D).

까지 도구가 이동,나는 당신의 최선의 방법은 좋은 텍스트 편집기로'이해'어셈블리입니다.

잊을 찾는 것에 대해 IDE 쓰/실행/컴파일 어셈블러 Mac.그러나,기억하 mac UNIX.보 http://asm.sourceforge.net/articles/linasm.html.괜찮은 가이드(그러나 짧은)를 실행하는 어셈블러를 통해 GCC 리눅스에서.을 흉내낼 수 있다.맥을 사용하여 인텔 칩 그래서 당신은에서 보고 싶은 Intel 문입니다.

는 것을 잊지 않는 윈도우와 달리,모든 유닉스 기반 시스템이 필요하기 전에 원본 대상과는 달리 Windows

윈도우의:

mov$원,%목적지

하지만 Mac 의 다른 방법으로 주위입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top