NASM数组指针操作

use*_*137 5 c arrays assembly pointers nasm

这是一个初学者的问题......但我现在已经挣扎了将近2整天.

我必须在NASM中实现一个与C合作的函数,它从main函数(在C中完成)将指向常量短数组的指针数组传递给函数,我必须根据需要对指针进行排序,这需要我读取每个常量短数组中的项目.因为它是一个指针,所以我的函数不会返回.

传递给我的函数的指针将是这样的:const short*v [],每个*v [n]指向一个不同的常量数组,n大小未知,但终止为null.常量数组大小也未知,但以负数终止(数组中的有效元素保证为正数).

我的问题是,如何访问这些常量数组中的每个元素?

我已成功从[EBP + 8]读取指针数组,并能够通过移位地址来检测指针数组中有多少元素,但我无法弄清楚如何访问指针数组指向的常量数组.

我的代码片段:

...
segment .text

global sort_vectors
sort_vectors:
enter 0,0
pusha

mov EBX, dword [EBP+8] ; const short *v[]

mov ECX, 0     
.forloop:                    
;I am able to count how many elements in v from this for loop

mov EAX, dword [EBX+4*ECX]
cmp EAX, 0
jz  .forloopj

...
;but I need to access each individual constant short array to do the sorting
...

inc ECX
jmp forloop
.forloopj:
...
Run Code Online (Sandbox Code Playgroud)

有关如何到达每个常量短阵列的任何提示?谢谢!

编辑:

好吧,我已经弄清楚我做错了什么.刚刚意识到const short是2个字节,我一直在使用扩展通用寄存器(4个字节)来读写这个!仅使用32位寄存器的下半部分解决,现在可以正常工作!

我可以在作业到期后发布工作代码.感谢那些回复的人!

================================================== ===============

use*_*137 0

哦,谢谢有人提醒我。

解决方案实际上是在编辑中编写的,但我会再次发布: const Short 只有 2 个字节,我使用扩展通用寄存器(4 个字节)在我的程序中读写,这导致了跳转地址和随机值的问题。

访问数组内的每个单独元素本质上是这样的:考虑任何数组都是一个平坦的长元素链。阅读每个元素就像单独移动链条,直到有东西告诉你停止。

由于学术规定,解决方案代码不会发布。对此感到抱歉。