所以是的,我正在修改汇编级编程......
这是我到目前为止所拥有的。
global _start
section .text
_start:
mov eax, 4 ; write
mov ebx, 1 ; stdout
mov ecx, msg
mov edx, msg.len
int 0x80 ; system call
mov eax, 1 ; exit
mov ebx, 0 ; exit code
int 0x80 ; system call
section .data
msg: db "Hello world!", 10 ; Defines the string "Hello world!\n"
.len equ $-msg
声明.len equ $-msg
如何运作?我明白这是字符串的长度。我也知道equ在C中就像#define
。所以这个变量在内存中不存在,它由汇编器放置。 (NASM)
$符号做什么,后来发生了减法?
我的输出会导致段错误,我希望在理解我已经解决了这个问题,但仍然不理解$ notion。.len equ $-msg
语法后我能够自行解决这个问题。
编辑 由于这是一个格式错误的程序导致的Segfault。 已修复
答案 0 :(得分:2)
$
表示当前行的地址。以下是:
.len equ $-msg
表示当前地址减去msg
的地址。这给出了msg
和.len
之间存储的数据的长度(因为.len
的地址由$
表示)。因此,符号.len
表示(等于)该长度值。