相关疑难解决方法(0)

在x86汇编中,美元($)和百分比(%)符号代表什么?

我试图理解汇编语言如何适用于微计算机体系结构类,并且我在示例中仍然面对不同的语法:

sub $48, %esp
mov %eax, 32(%esp)
Run Code Online (Sandbox Code Playgroud)

这些代码是什么意思?什么是32操作数和esp寄存器的添加?

x86 assembly att

26
推荐指数
2
解决办法
2万
查看次数

有没有一种方法可以在gnu汇编常量中使用数学表达式?

执行以下操作的正确gnu汇编语法是什么:

.section .data2
.asciz "******* Output Data ********"
total_sectors_written:   .word 0x0
max_buffer_sectors: .word ((0x9fc00 - $data_buffer) / 512)  # <=== need help here
.align 512
data_buffer: .asciz "<The actual data will overwrite this>"
Run Code Online (Sandbox Code Playgroud)

具体来说,我正在编写一个玩具OS。上面的代码是16位实模式。我正在设置一个数据缓冲区,该缓冲区将转储回启动磁盘。我想计算之间的扇区数data_buffer放置在内存中的位置与该数据缓冲区的上限。(地址0x9fc00是缓冲区将运行到保留用于其他目的的RAM的位置。)

我知道我可以编写汇编代码来计算这个;但是,由于它是在构建时就知道的常数,所以我很好奇能否让汇编器为我计算它。

我遇到了三个具体问题:

(1)如果我使用$data_buffer此错误:

os_src/boot.S: Assembler messages:
os_src/boot.S:497: Error: missing ')'
os_src/boot.S:497: Error: can't resolve `L0' {*ABS* section} - `$data_buffer' {*UND* section}
Run Code Online (Sandbox Code Playgroud)

我会感到困惑,因为$当我想要标签的内存地址时,应该使用它,对吗?

(2)如果我使用data_buffer而不是$data_buffer,则会出现此错误:

os_src/boot.S: Assembler messages:
os_src/boot.S:497: Error: missing ')'
os_src/boot.S:497: Error: value of 653855 too …
Run Code Online (Sandbox Code Playgroud)

assembly gcc gnu-assembler osdev x86-16

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

标签 统计

assembly ×2

att ×1

gcc ×1

gnu-assembler ×1

osdev ×1

x86 ×1

x86-16 ×1