Assembly nasm将两个实数输入到两个不同的数组中
我正在尝试将实数输入到两个不同的数组中 目前我有这段代码,但在我将最后一个浮点值输入array2之后,它就出现了seg故障 有什么想法吗Assembly nasm将两个实数输入到两个不同的数组中,assembly,nasm,Assembly,Nasm,我正在尝试将实数输入到两个不同的数组中 目前我有这段代码,但在我将最后一个浮点值输入array2之后,它就出现了seg故障 有什么想法吗 segment .bss ; segment .data prompt1 db "Do you have data to enter? (-1 = yes,0 = no)?: ", 0 prompt2 db "Enter your Float Value: ", 0 prompt3 db "Almost done ",0
segment .bss
;
segment .data
prompt1 db "Do you have data to enter? (-1 = yes,0 = no)?: ", 0
prompt2 db "Enter your Float Value: ", 0
prompt3 db "Almost done ",0
segment .text
extern readdouble,print_string, read_int
global readarray
readarray:
pusha
mov ebx, [esp+36] ;move starting position into ebx
mov esi, [esp+40] ;move max values into edx
mov edi, 0 ;initialize counter to zero
read_loop:
mov eax, prompt1
call print_string
call read_int ;read in decision for prompt
inc edi; increment counter
cmp eax, 0
jz Done_reading_array1
jmp continue_loop
continue_loop:
mov eax, prompt2
call print_string
call readdouble
mov [ebx], ecx ;move value into memory slot ebx
mov [ebx+4], edx
add ebx, 8 ;move to next location for db word
jmp read_loop
Done_reading_array1:
sub edi, 1
mov [esp+40], edi ;moves counter back to stack
jmp read_array2
read_array2:
mov ebx, [esp+68] ;move starting location of array1 into ebx
;mov esi,[esp+80] ;move number of items into esi
mov ebp, 0
continue_readarray2:
mov eax, prompt2
call print_string
call readdouble
mov [ebx], ecx ;move value into memory slot ebx
mov [ebx+4], edx
inc ebp
add ebx, 8 ;move to next location for db word
cmp ebp, edi
jz done_reading_array2
jmp continue_readarray2
done_reading_array2:
;mov [esp+72],edi
mov eax, prompt3
call print_string
popa
ret
我不认为你应该在第二个循环中像那样使用EBP,因为你正在拧紧堆栈框架-为什么不使用ESI作为计数器呢。我没有看到你在
readarray
中对分配数组的长度做任何边界检查。例如(可能是因为这里的标签搞乱了),但您似乎将EBX
设置为数组的起始值,并将ESI
设置为该数组的长度。但是在read\u loop
和continue\u loop
的任何地方,我都无法检测到您实际上正在检查ESI
的值,以查看您是否可以继续将EBX
的值增加8个字节,用于从readdouble
返回的四字。在递增EBX
之前,您必须检查EBX
指向的分配内存数组的剩余可用长度,我假设您可以从传递到ESI
的信息构造该值(最好不要调用destroyESI
,否则必须将该值保存到堆栈或另一个被调用方保存寄存器中)
希望这有帮助
Jason你到底为什么用汇编语言写这个?