다른 시스템의 어셈블리 언어

어셈블리어



어셈블리 언어는 기계어를 상징적으로 표현한 것입니다. 따라서 아키텍처에 따라 다릅니다.

각 명령어는 로드 레지스터의 경우 "LDR", 이동의 경우 "MOV"또는 곱셈의 경우 "MUL"과 같은 짧은 니모닉 단어로 표시되며 뒤에 인수(선택 사항)가 표시됩니다. 주소 지정 모드는 인수의 형식에 의해 암시됩니다. 서로 다른 어셈블러는 약간 다른 구문을 사용합니다.

x86

다음은 "Hello, World!"입니다. Nasm 구문을 사용하여 Linux 시스템용 x86 어셈블러에서 프로그램:

section    .text
global    _start

_start:
    mov    edx,len          ; message length (bytes)
    mov    ecx,msg          ; message location (memory address)
    mov    ebx,1            ; file descriptor: 1 is stdout
    mov    eax,4            ; kernel syscall number: 4 is sys_write
    int    0x80             ; invoke syscall

    mov    ebx,0            ; exit status: 0 (good)
    mov    eax,1            ; kernel syscall number: 1 is sys_exit
    int    0x80             ; invoke syscall

section    .rodata

msg    db    'Hello, world!\n'
len    equ    $ - msg


다음은 GNU 어셈블러(gas/as) 구문을 사용하는 동일한 프로그램입니다.

.text
.globl _start
_start:
    mov $len, %edx     /* file descriptor: 1 is stdout */ 
    mov $msg, %ecx     /* message location (memory address) */
    mov $1, %ebx       /* message length (bytes) */
    mov $4, %eax       /* write is syscall #4 */
    int $0x80          /* invoke syscall */

    mov $0, %ebx       /* exit status: 0 (good) */
    mov $1, %eax       /* kernel syscall number: 1 is sys_exit */
    int $0x80          /* invoke syscall */

.data
msg:
    .ascii "Hello, World!\n"
    len = . - msg


두 어셈블러 사이에서 일부 줄의 인수 순서가 바뀌고 기호 및 값에 대한 접두사도 변경됩니다.

ARM(32비트)

이것은 GNU 어셈블러(gas/as) 구문으로 작성되었습니다.

.text
.globl _start
_start:

     mov     %r0, $1     /* file descriptor: 1 is stdout */
     ldr     %r1, =msg   /* message location (memory address) */
     ldr     %r2, =len   /* message length (bytes) */
     mov     %r7, $4     /* write is syscall #4 */
     swi     $0          /* invoke syscall */

     mov     %r0, $0     /* exit status: 0 (good) */
     mov     %r7, $1     /* kernel syscall number: 1 is sys_exit */
     swi     $0          /* invoke syscall */

.data
msg:
     .ascii      "Hello, world!\n"
     len = . - msg


Resources

결론



⚠️ 어셈블러 기본 사항 블로그 게시물:

연결



🖇 팔로우GitHub

🖇 팔로우

_p.s 이 게시물은 내 소프트웨어 이식성 및 최적화 수업을 위해 작성되었습니다.

좋은 웹페이지 즐겨찾기