我这学期刚刚结束了一门计算机体系结构课程,在这门课程中,我们除了其他事情外,还涉及到了 MIPS 汇编语言,并在 MARS 模拟器中运行它。今天,出于好奇,我开始在我的 Ubuntu 操作系统上使用 NASM,并基本上只是从教程中拼凑东西,并试着理解 NASM 和 MIPS 有何不同。这里是我目前正在查看的代码片段:
global _start
_start:
mov eax, 4
mov ebx, 1
pop ecx
pop ecx
pop ecx
mov edx, 200
int 0x80
mov eax, 1
mov ebx, 0
int 0x80
这个文件被保存为test.asm,并使用nasm -f elf test.asm
进行汇编,使用ld -o test test.o
进行链接。当我使用./test anArgument
调用它时,它按预期打印anArgument,然后是它需要的多少个字符来填充该字符串,使其总共有200个字符(因为那个mov edx,200
语句)。然而,有趣的是,这些填充字符,我本来以为会是无意义的,实际上来自于我的环境变量,就如同env
命令所显示的。为什么会打印出我的环境变量?