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位寄存器的下半部分解决,现在可以正常工作!
我可以在作业到期后发布工作代码.感谢那些回复的人!
================================================== ===============
哦,谢谢有人提醒我。
解决方案实际上是在编辑中编写的,但我会再次发布: const Short 只有 2 个字节,我使用扩展通用寄存器(4 个字节)在我的程序中读写,这导致了跳转地址和随机值的问题。
访问数组内的每个单独元素本质上是这样的:考虑任何数组都是一个平坦的长元素链。阅读每个元素就像单独移动链条,直到有东西告诉你停止。
由于学术规定,解决方案代码不会发布。对此感到抱歉。