相关疑难解决方法(0)

在计算像"$ - label"这样的字符串长度时,美元符号($)在x86汇编中的含义是什么?

例如,如果我们编写一个简单的hello world类型程序,.data部分可能包含以下内容:

section .data

msg     db      'Enter something: '
len     equ     $ - msg
Run Code Online (Sandbox Code Playgroud)

这个例子中的$代表什么,为什么$ - msg等于字符串的长度?

x86 assembly intel-syntax

32
推荐指数
4
解决办法
4万
查看次数

GNU Gas 汇编中的等号赋值“x = 1”和“.equ x, 1”或“.set x, 1”之间有区别吗?

例如:

a = 1
Run Code Online (Sandbox Code Playgroud)

和:

.equ a, 1
Run Code Online (Sandbox Code Playgroud)

和:

.set a, 1
Run Code Online (Sandbox Code Playgroud)

所有这些都在以下情况下逐字节产生相同的输出:

as --32 main.S
Run Code Online (Sandbox Code Playgroud)

根据cmp

我知道这一点.equ,并.set根据以下文档执行相同的操作.equhttps://sourceware.org/binutils/docs-2.25/as/Equ.html

它与“.set”同义。

我知道ARM 汇编中 .equ 和 .word 之间的区别.equ是什么?

那么呢=?和另外两个一样吗?

assembly gnu-assembler

5
推荐指数
1
解决办法
798
查看次数

$ NAS如何在NASM中工作?

message db "Enter a digit ", 0xA,0xD
Length equ $- message
Run Code Online (Sandbox Code Playgroud)

它用于获取字符串的长度吗?
它在内部如何运作?

x86 assembly nasm

4
推荐指数
1
解决办法
1833
查看次数

在汇编中获取字符串长度的简写形式

为了获取字符串的长度,我使用以下函数:

string:     .asciz "hello world!\n"
get_string_length:
    mov $0, %eax    # size goes in rax
  .L1_loop:
    movzbw string(,%eax,1), %ebx
    cmp $0, %ebx
    je .L1_exit
    inc %eax
    jmp .L1_loop
  .L1_exit:
    ret
Run Code Online (Sandbox Code Playgroud)

不过,我也看到了以下情况:

hello_world:
    .ascii "hello world\n"
    hello_world_len = . - hello_world
Run Code Online (Sandbox Code Playgroud)

以下是如何工作的?这就是.符号和所有得到长度的东西?例如,在此 github 代码片段中:https://github.com/cirosantilli/linux-kernel-module-cheat/blob/9dccafe00d9b0affa8847836a71ebb4c37be7090/userland/arch/x86_64/freestand/linux/hello.S

x86 assembly gnu-assembler

3
推荐指数
1
解决办法
2558
查看次数

标签 统计

assembly ×4

x86 ×3

gnu-assembler ×2

intel-syntax ×1

nasm ×1