CPU是由01的指令组成的,那最简单的1+1 的在CPU中指令是什么呢,
1.准备工具
在OSX 平台,自带的版本是 0.98.40 太老了,从官网下载最新 2.11.02 版本 http://www.nasm.us/pub/nasm/releasebuilds/2.11.02/
2.开始汇编
新建 hello64.s 文件
nop
mov rax, 1
mov rbx, 1
add rax,rbx
mov rdi,rax
nop
汇编 ,平台是macho64,-Ox:最大程序地优化
./nasm -Ox -f macho64 -o hello64.o hello64.s
反汇编,因为是64为所以加上 -b 64
./ndisasm -b 64 hello64.o
结果是
000000B8 90 nop
000000B9 B801000000 mov eax,0x1
000000BE BB01000000 mov ebx,0x1
000000C3 4801D8 add rax,rbx
000000C6 4889C7 mov rdi,rax
000000C9 90 nop
1+1 就是 B801000000BB010000004801D8 这么一串指令,这个是16进制的,
换算成二进制就是
1011100000000001000000000000000000000000
1011101100000001000000000000000000000000
10010000000000111011000
1.准备工具
在OSX 平台,自带的版本是 0.98.40 太老了,从官网下载最新 2.11.02 版本 http://www.nasm.us/pub/nasm/releasebuilds/2.11.02/
2.开始汇编
新建 hello64.s 文件
nop
mov rax, 1
mov rbx, 1
add rax,rbx
mov rdi,rax
nop
汇编 ,平台是macho64,-Ox:最大程序地优化
./nasm -Ox -f macho64 -o hello64.o hello64.s
反汇编,因为是64为所以加上 -b 64
./ndisasm -b 64 hello64.o
结果是
000000B8 90 nop
000000B9 B801000000 mov eax,0x1
000000BE BB01000000 mov ebx,0x1
000000C3 4801D8 add rax,rbx
000000C6 4889C7 mov rdi,rax
000000C9 90 nop
1+1 就是 B801000000BB010000004801D8 这么一串指令,这个是16进制的,
换算成二进制就是
1011100000000001000000000000000000000000
1011101100000001000000000000000000000000
10010000000000111011000