gpt4 book ai didi

arrays - NASM x86 16 位中的索引 float 组

转载 作者:行者123 更新时间:2023-12-02 06:57:08 25 4
gpt4 key购买 nike

我尝试使用 NASM x86 16 位中的循环指令填充 double (64 位)实数数组,但收到有效地址无效错误。操作系统是Windows XP 32位,但程序实际上是作为MS-DOS 16位运行的。

例如:

    mov cx, 10
fill_array:
fld qword[yArray + cx*8]
fstp qword[xArray + cx*8]
loop fill_array

返回 fldfstp 行处的上一个错误。

数组是这样声明的:

yArray resq 10
xArray resq 10

我也尝试过使用寄存器作为指向数组的指针,但是,例如,fstp qword[ax] 也失败了。

有没有办法在 16 位汇编中使用索引 float 组?我需要使用任何特定的 FPU 指令吗?

最佳答案

在 CPU >= 386 上,您甚至可以在 16 位模式下使用缩放,但只能使用 32 位寄存器:

    mov ecx, 10
fill_array:
fld qword[yArray + ecx*8]
fstp qword[xArray + ecx*8]
loop fill_array

但是你有一个“相差一错误”。如果 ECX=10,您将寻址列表的第十一个元素,而 ECX=0 将结束循环,即不会对其进行处理。您可以通过“手工制作”循环来避免这种情况:

    mov ecx, 9
fill_array:
fld qword[yArray + ecx*8]
fstp qword[xArray + ecx*8]
sub cx, 1
jnc fill_array

“纯8086”解决方案:

    mov cx, 10
mov bx, 0
fill_array:
fld qword[yArray + bx]
fstp qword[xArray + bx]
add bx, 8
loop fill_array

关于arrays - NASM x86 16 位中的索引 float 组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26949507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com