Variables 汇编$-运算符

Variables 汇编$-运算符,variables,assembly,Variables,Assembly,我遇到了以下代码: SYS_EXIT equ 1 SYS_WRITE equ 4 STDIN equ 0 STDOUT equ 1 section .text global _start ;must be declared for using gcc _start: ;tell linker entry point mov eax, SYS_WRITE mov ebx, STDOUT mov ecx,

我遇到了以下代码:

SYS_EXIT  equ 1
SYS_WRITE equ 4
STDIN     equ 0
STDOUT    equ 1
section  .text
   global _start    ;must be declared for using gcc
_start:   ;tell linker entry point
    mov eax, SYS_WRITE         
    mov ebx, STDOUT         
    mov ecx, msg1         
        mov edx, len1 
        int 0x80                

    mov eax, SYS_WRITE         
    mov ebx, STDOUT         
    mov ecx, msg2         
        mov edx, len2 
        int 0x80 

    mov eax, SYS_WRITE         
    mov ebx, STDOUT         
    mov ecx, msg3         
        mov edx, len3 
        int 0x80
        mov eax,SYS_EXIT    ;system call number (sys_exit)
        int 0x80            ;call kernel

section  .data
msg1 db 'Hello, programmers!',0xA,0xD   
len1 equ $ - msg1           
msg2 db 'Welcome to the world of,', 0xA,0xD 
len2 equ $ - msg2 
msg3 db 'Linux assembly programming! '
len3 equ $- msg3
凭直觉,我可以看出
len1
len2
len3
是保存三个字符串长度的变量,
$-
运算符正在获取字符串的长度

但我无法正确理解查找长度的语法是如何工作的。。任何人,请告诉我它是如何做的,并给我进一步阅读的链接,以了解这个概念


提前感谢…

$
计算为“当前地址”,因此
$-msg1
表示“当前地址减去带有标签msg1的地址”。这将计算从
msg1
开始的字符串长度


您的代码片段看起来可能是NASM。它是?无论如何,NASM有其特殊的标记
$
$

$
计算为“当前地址”,因此
$-msg1
表示“当前地址减去带标签msg1的地址”。这将计算从
msg1
开始的字符串长度


您的代码片段看起来可能是NASM。它是?无论如何,NASM有它的特殊标记
$
$

如果我连续声明两个MSG,然后执行
$-msg1
它会给我两个字符串的长度吗?因为正如你所说,$是当前地址,$在什么意义上是“当前地址”?我的意思是,你所说的“当前地址”是什么意思?NASM文档对它的定义如下:“$计算到行开头的装配位置”。我找到了一个新的。这里讨论得更多一些,我道歉。但是你能用一种更简单的方式解释它吗?
eq
是一种汇编时构造:它不存在于生成的可执行文件中,因此它本身永远不会执行。汇编程序(例如NASM)从上到下读取文件,并根据前一行在生成的可执行文件中占用的空间量计算每一行开始的地址(“汇编位置”)。这就是我所说的“当前地址”。如果我连续声明两个MSG,然后执行
$-msg1
会给我两个字符串的长度吗?因为正如你所说,$是当前地址,$在什么意义上是“当前地址”?我的意思是,你所说的“当前地址”是什么意思?NASM文档对它的定义如下:“$计算到行开头的装配位置”。我找到了一个新的。这里讨论得更多一些,我道歉。但是你能用一种更简单的方式解释它吗?
eq
是一种汇编时构造:它不存在于生成的可执行文件中,因此它本身永远不会执行。汇编程序(例如NASM)从上到下读取文件,并根据前一行在生成的可执行文件中占用的空间量计算每一行开始的地址(“汇编位置”)。这就是我所说的“当前地址”。