アセンブリでリンク リストを作成しようとしています (理由は聞かないでください)。リンク リストは、作成したスタック内にある必要があります。ubuntuでIntel 80x86でnasmを使用していますこれはリンクされたリストです:
size_i:
struc node
data: resb 1
next: resb 4
endstruc
size_of_struct: equ $-size_i
これはスタックです:
create_stack:
push STKSZ*4
call malloc
add esp,4 ;correct the push
mov dword[my_stack],eax
ret
ここで、ユーザーから数値を読み取り、各バイトがリスト内の異なるノードにアドレス指定されます。これは私が新しいリストを作成しようとする方法です:
create_new_list:
push size_of_struct
call malloc ;now eax has pointer to location
add esp,4 ;correct the push
mov edx,0
mov dl,byte[ebx] ;dl is the data of current number (current digit)
mov byte[eax+data],dl ;set the data
mov dword[eax+next],0 ;set next to be null
;BUILD THE FIRST NODE IN EAX
push edx
push ecx
push eax
mov eax,0
mov ecx,dword[my_stack]
mov dword[curr_stack_pointer],ecx
mov ecx,0
mov cl,byte[counter]
mov al,4
mul cl
add dword[curr_stack_pointer],eax
;DWORD[CURR_STACK_POINTER] HAS THE POINTER TO HEAD OF LIST
pop eax
mov ecx,dword[curr_stack_pointer]
mov [ecx],eax ;THIS IS THE PROBLEMATIC LINE. HERE I AM TRYING TO
;MOV THE ADDRESS INSIDE EAX TO THE LOCATION OF ECX
;THIS WAY I WILL HAVE IN THE CURRENT ARRAY BLOCK THE ADDRESS
;OF THE HEAD OF THE LIST. BUT IT IS NOT WORKING, I GET A
;SEGMENTATION ERROR
pop ecx
pop edx
ret
これどうやってするの?ありがとう!