相关疑难解决方法(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万
查看次数

使用GAS AT&T指令计算引导扇区的填充长度?

所以我想在bootsector中添加填充.比方说,目前只有一个无限循环:jmp ..扇区需要512字节长.此外,0xaa55需要在最后添加的幻数.

jmp .
.skip 508, 0
.word 0xaa55
Run Code Online (Sandbox Code Playgroud)

但是,如果我想打印一些但不想将所有字节计算到适当大小的内容,该怎么办?
在Intel/NASM中,语法是:

; print something
times 510-($-$$) db 0
dw 0xaa55
Run Code Online (Sandbox Code Playgroud)

但在AT&T语法中呢?好了,循环(.rept)在这里不起作用,因为这里.不需要给出绝对值.我们和.skip/ 有同样的问题.space,他们也需要一个绝对值.

是否有使用某种循环/ .align/ .skip/ etc 添加填充的方法?

编辑:我as用来构建和链接,ld -Ttext 0x7c00 --oformat binary直到yasmAT&T语法足够稳定.

assembly gnu-assembler bootloader att x86-16

4
推荐指数
2
解决办法
810
查看次数

NASM中示例代码中$和$$的真正含义

我看到如下代码:

section .data
   db 'hello'
   db  'h', 'e', 'l','l','o'
   data_segment_size  equ $-$$
Run Code Online (Sandbox Code Playgroud)

为什么data_segment_size等于25?我知道$和$$表示什么,但是根据我的书我不明白为什么这个变量是25。也许那本书里有一个错误。

x86 assembly nasm

-2
推荐指数
1
解决办法
1063
查看次数

标签 统计

assembly ×3

x86 ×2

att ×1

bootloader ×1

gnu-assembler ×1

intel-syntax ×1

nasm ×1

x86-16 ×1