我对汇编语言很陌生,我知道有很多很多类型的汇编语言。比如ARM
,MIPS
等等x86
。所以我有问题。
以下是更多信息
ARM 中的 Hello World
.text
.global _start
_start:
mov r0, #1
ldr r1, =message
ldr r2, =len
mov r7, #4
swi 0
mov r7, #1
swi 0
.data
message:
.asciz "hello world\n"
len = .-message
NASM 中的 Hello World
section .data ; section to define memory
msg db "Hello, World!", 10 ; define string to the name 'msg', 10 is '\n' character
len equ $ - msg ; assign the length of the string to the name 'len'
section .text ; section to put code
global _start ; a global label to be declared for the linker (ld)
_start:
mov rax, 1 ; syscall ID number (sys_write)
mov rdi, 1 ; file descriptor (stdout)
mov rsi, msg ; address of string to write
mov rdx, len ; length of string
syscall ; call kernel
mov rax, 60 ; syscall ID number (sys_exit)
mov rdi, 0 ; error code 0
syscall ; call kernel
GAS 语法中的 Hello World
.data
hello:
.string "Hello world!\n"
.text
.globl _start
_start:
movl $4, %eax # write(1, hello, strlen(hello))
movl $1, %ebx
movl $hello, %ecx
movl $13, %edx
int $0x80
movl $1, %eax # exit(0)
movl $0, %ebx
int $0x80
MIPS 汇编中的 Hello World
.data
msg: .asciiz "Hello World"
.extern foobar 4
.text
.globl main
main: li $v0, 4 # syscall 4 (print_str)
la $a0, msg # argument: string
syscall # print the string
lw $t1, foobar
jr $ra # retrun to caller
我在互联网上搜索了很多关于这些的信息。
所以我找到了这个信息。
- Gas 和 Intel Assembly 是一样的。但是语法不同
- 语法仅出于版权原因而有所不同
- ARM 有自己的语法类型
我有问题要问你?
- 汇编语言虽然变了,但代码编写顺序是不是不一样了?
- 汇编语言之间的唯一区别是它们使用的语法?
更多信息
GAS : At&T Syntax
movq $2, %r8 # %r8 = 2
movq $3, %r9 # %r9 = 3
movq $5, %r10 # %r10 = 5
imulq %r9, %r10 # %r10 = 3 * 5 = 15
addq %r8, %r10 # %r10 = 2 + 15 = 17
NASM : INTEL Syntex
mov r8, 2 ; r8 = 2
mov r9, 3 ; r9 = 3
mov r10, 5 ; r10 = 5
mul r9, r10 ; r10 = 3 * 5 = 15
add r8, r10 ; r10 = 2 + ( 15 ) = 17