程序集中的逗号 (,) 运算符是什么



这是我编写的一个简单的汇编语言程序:

section .text
    global main     ;must be declared for linker (ld)
main:               ;tells linker entry point
    mov edx,len     ;message length
    mov ecx,msg     ;message to write
    mov ebx,1       ;file descriptor (stdout)
    mov eax,4       ;system call number (sys_write)
    int 0x80        ;call kernel
    mov eax,1       ;system call number (sys_exit)
    int 0x80        ;call kernel
section .data
msg db 'Hello, world!', 0xa  ;our dear string
len equ $ - msg              ;length of our dear string

现在我不知道这一行发生了什么:msg db 'Hello, world!', 0xa
我知道msg db 'Hello, world!'的含义,但是当我看到逗号和之后的0xa时,问题就出现了。

经过一些研究,我知道0xa会导致换行符,但我只是不明白为什么在那里使用逗号?

是某种串联还是什么?像 C(++( 语法:cout << "asdfsdf" << var;或者可能是Java语法:System.out.println("Hello,"+var+"!");或python语法:print 'Yo '+var

请帮忙...

该行只是在数据细分受众群中声明名为 msg 的标签。 msg指向一个用字符Hello, world!初始化的字节缓冲区,紧跟换行符(0x0A(。 后面的行通过取当前地址和msg标签之间的差值来计算字符串的长度。 len符号将保持该长度。 逗号的使用不是运算符,它只是用于初始化缓冲区的值之间的分隔符。

字符串在大多数(如果不是全部(汇编语言中被特别处理,以使其更方便编写。 这样,您就不必写出该字符串中的每个字符。

以下声明是等效的:

str1 db 'abcde'
str2 db 0x61, 'bc', 'd', 101
; 'a' is 0x61 hex
; 'e' is 101 decimal

请注意,它们通常不会自动包含空终止符。 这就是为什么您通常会看到这样声明的字符串的原因:

message db 'Hello world', 0

逗号运算符与 db 一起使用时是一个串联。

换行符 ( 0xa ( 连接到'Hello, world!'末尾的原因是,在显示字符串时,最好在后面包含一个换行符。

没有它,如果你循环这段代码,你会得到:

Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!

但是换行符:

Hello, world!
Hello, world!
Hello, world!
Hello, world!
Hello, world!
Hello, world!

相关内容

  • 没有找到相关文章

最新更新