【发布时间】:2015-01-12 23:54:54
【问题描述】:
我正在尝试使用 NASM x86 16 位中的循环指令填充一个双精度(64 位)实数数组,但我收到了 invalid effective address 错误。操作系统是 Windows XP 32 位,但程序实际上是作为 MS-DOS 16 位运行的。
例如:
mov cx, 10
fill_array:
fld qword[yArray + cx*8]
fstp qword[xArray + cx*8]
loop fill_array
在fld 和fstp 行返回上一个错误。
数组是这样声明的:
yArray resq 10
xArray resq 10
我也尝试使用寄存器作为指向数组的指针,但是,例如,fstp qword[ax] 也会失败。
有没有办法在 16 位汇编中使用索引浮点数组?我需要使用任何特定的 FPU 指令吗?
【问题讨论】:
-
在 16 位寻址中没有缩放。也没有使用
cx寻址。 -
@harold 谢谢。那么,唯一的解决方案是对寻址 (
fld qword[yArray + 8]) 进行硬编码并重复 N 次吗? -
哦不,有解决方案..你可以使用
ecx(应该生成地址大小覆盖),或者你可以使用here列出的任何16位寻址东西
标签: arrays assembly x86 nasm 16-bit