Assemble-一次读取一个数据变量的值
Assemble-time read the value of a data variable
我正在制作一种测试操作系统,作为概念验证。我正在使用 NASM 作为我的汇编程序,并且想知道我是否可以将一个常数(即 512)乘以一个变量(即 SECTOR_COUNT
)。
如果有帮助,我用来编译引导加载程序的实际命令如下:
nasm -f bin boot.asm -o os.bin
我想做的一个例子如下:
begin_main_program:
times (512*[SECTOR_COUNT]-511)-($-begin_main_program)
当我尝试编译它时,NASM 说我需要传入一个常量值。所以,我想知道是否有一种方法可以做到以上几点,而不必传入常量。
编辑:将 times (512*SECTOR_COUNT-511)...
固定为 times (512*[SECTOR_COUNT]-511)...
(我猜是一个取消引用的指针)
汇编语言不是这样工作的。它 assembles 字节到输出文件中,并且无法在 assemble 时读回这些字节。 “变量”是一个高级概念,您可以在 asm 中 实现 ,但不受原生支持1.
如果你想让多个事物依赖同一个值,
使用 foo equ 123
定义一个 assemble 时间常量,以后可以在多个地方使用。
要assemble数据存储器中具有该值的一些字节,使用bar: dw foo
。
它是一个 assemble 时间常数,因此您 可以 做 resb foo*512
或
之类的事情
times (512*foo-511)-($-begin_main_program)
如果你只做了 bar: dw 123
,那么在组装其他线路时就无法到达 123
。 (bar:
标签与 dw 123
或 db 123, 0
或您选择放在它之前或之后的任何内容是分开的。它为您提供了一种从其他地方引用该地址的方法,例如 dw bar
到 assemble 指针,或 mov ax, [bar]
到 assemble 一条指令,在 运行 时将从该绝对地址加载。)
脚注 1:除了在 NASM 的宏语言中,像 %assign i i+1
这样的东西 - 在 %rep 10
/ %endrep
块中很有用。
https://nasm.us/doc/nasmdoc4.html#section-4.1.8
我正在制作一种测试操作系统,作为概念验证。我正在使用 NASM 作为我的汇编程序,并且想知道我是否可以将一个常数(即 512)乘以一个变量(即 SECTOR_COUNT
)。
如果有帮助,我用来编译引导加载程序的实际命令如下:
nasm -f bin boot.asm -o os.bin
我想做的一个例子如下:
begin_main_program:
times (512*[SECTOR_COUNT]-511)-($-begin_main_program)
当我尝试编译它时,NASM 说我需要传入一个常量值。所以,我想知道是否有一种方法可以做到以上几点,而不必传入常量。
编辑:将 times (512*SECTOR_COUNT-511)...
固定为 times (512*[SECTOR_COUNT]-511)...
(我猜是一个取消引用的指针)
汇编语言不是这样工作的。它 assembles 字节到输出文件中,并且无法在 assemble 时读回这些字节。 “变量”是一个高级概念,您可以在 asm 中 实现 ,但不受原生支持1.
如果你想让多个事物依赖同一个值,
使用 foo equ 123
定义一个 assemble 时间常量,以后可以在多个地方使用。
要assemble数据存储器中具有该值的一些字节,使用bar: dw foo
。
它是一个 assemble 时间常数,因此您 可以 做 resb foo*512
或
之类的事情
times (512*foo-511)-($-begin_main_program)
如果你只做了 bar: dw 123
,那么在组装其他线路时就无法到达 123
。 (bar:
标签与 dw 123
或 db 123, 0
或您选择放在它之前或之后的任何内容是分开的。它为您提供了一种从其他地方引用该地址的方法,例如 dw bar
到 assemble 指针,或 mov ax, [bar]
到 assemble 一条指令,在 运行 时将从该绝对地址加载。)
脚注 1:除了在 NASM 的宏语言中,像 %assign i i+1
这样的东西 - 在 %rep 10
/ %endrep
块中很有用。
https://nasm.us/doc/nasmdoc4.html#section-4.1.8