我正在尝试在 Linux 环境中学习汇编——x86。我能找到的最有用的教程是使用 NASM 编写有用的程序。我自己设置的任务很简单:读取文件并将其写入标准输出。
这就是我所拥有的:
section .text ; declaring our .text segment
global _start ; telling where program execution should start
_start: ; this is where code starts getting exec'ed
; get the filename in ebx
pop ebx ; argc
pop ebx ; argv[0]
pop ebx ; the first real arg, a filename
; open the file
mov eax, 5 ; open(
mov ecx, 0 ; read-only mode
int 80h ; );
; read the file
mov eax, 3 ; read(
mov ebx, eax ; file_descriptor,
mov ecx, buf ; *buf,
mov edx, bufsize ; *bufsize
int 80h ; );
; write to STDOUT
mov eax, 4 ; write(
mov ebx, 1 ; STDOUT,
; mov ecx, buf ; *buf
int 80h ; );
; exit
mov eax, 1 ; exit(
mov ebx, 0 ; 0
int 80h ; );
这里的一个关键问题是本教程从未提及如何创建缓冲区、bufsize
变量或实际上是变量。
我该怎么做呢?
(顺便说一句:经过至少一个小时的搜索,我对学习装配的资源质量低下隐约感到震惊。当唯一的文档是在网上交易的传闻时,任何计算机到底是如何运行的?)