前言
由于手上没有 linux 系统 所以使用了 windows11 自带的 wsl 也就是虚拟机进行学习。
配置(学习/开发)环境
- 安装 nasm 编译工具, 也就是 开发环境
-
下载压缩包
root@ubuntu:~/$ wget https://www.nasm.us/pub/nasm/releasebuilds/2.16.01/nasm-2.16.01.tar.xz
-
将下载好的压缩包进行解压
root@ubuntu:~/$ tar -xf /nasm-2.16.01.tar.xz
-
进入解压好的文件下 并进行 编译 安装过程
root@ubuntu:~/nasm-2.16.01$ ./configure root@ubuntu:~/nasm-2.16.01$ make root@ubuntu:~/nasm-2.16.01$ make install
-
结束后通过键入
nasm -h
来判断是否安装成功
如果遇到了make 不存在 那么应该是 在安装 系统的时候 选择了 最小包安装 没有携带 gcc
可以输入下面的命令行 进行安装gcc 注意 如果不是这个情况请不要乱动gcc 严重情况下会导致系统问题sudo apt-get update sudo apt-get install gcc automake autoconf libtool make
-
第一个程序 Hello world
; 文件名是 hello.asm ";" 是注释
;section .text 是指明代码行所在位置 也是程序的入口
section .text
global _start
; 使用 global 后方声明的 _start 表示编写具体代码
_start:
mov edx,len ; 将msg的len存入到edx寄存器中
mov ecx,msg ;将字符串存入到 ecx 寄存器中 edx 与 ecx 寄存器位置不重要但是要在 0x80之前
mov ebx,1 ;没学懂
mov eax,4 ;表示进行的是输入操作 下一篇进行详细学习
int 0x80 ;表示操作结束? 0x80 || 80h 都可以使用
mov eax,1
int 0x80
;section.data 与 bss 是用来存储变量的位置 声明顺序不重要
section.data
msg db 'Hello, world!', 0xa
len equ $ - msg