Я столкнулся со странной проблемой при кодировании связанного списка в сборке руки на Raspberry Pi.Мой связанный список работает для всех строк, кроме строк длиной 12. Он отображает символ мусора в конце всех строк длиной 12, и я не могу понять, почему
любая помощь приветствуется
вот входная функция, которую я использую, она выводит адрес строки malloc в R0 и, кажется, работает правильно для всех строк не длиной 12:
.equ BUFSIZE2,256
.data
inputbuf2: .ds BUFSIZE2
prompt: .asciz "Enter: "
p1: .word 0
input:
push {R1,R2,R5,R14}
mov R0,#0
bl v_ascz @ prints string in R1
ldr R1,=inputbuf2
mov R2,#BUFSIZE2
bl c_ascz @ does service call for input, returns in R1
bl v_ascz
bl v_nl
bl strlen @ returns string length of R1 into R0
sub R0,#1
mov R5,R0
bl alloc
bl store
ldr R0,=p1
ldr R0,[R0]
pop {R1,R2,R5,R14}
bx LR
alloc:
push {R0-R4,R14}
bl malloc
ldr R1,=p1
str R0,[R1]
pop {R0-R4,R14}
bx LR
store:
push {R1-R4,R14}
mov R2,#0 @ index
ldr R4,=p1
ldr R4,[R4]
loop: ldrb R3,[R1],#1
strb R3,[R4],#1
add R2,#1
cmp R2,R5
blt loop
mov R3,#0
strb R3,[R4] @ store null at end of string
pop {R1-R4,R14}
bx LR
.end
А вот и связаннаясписок добавить функцию узла, который я использую.Он распределяет 8 байтов и сохраняет адрес для данных в первых четырех и адрес для следующего узла в последних 4:
.global list_add
@ R1 = addr of head
@ R2 = addr of tail
@ R3 = data
.data
node: .word 0
list_add:
push {R1-R4,R14}
bl alloc
push {R2}
ldr R2,[R2]
cmp R2,#0
pop {R2}
beq first_node
@ normal add
ldr R4,=node
ldr R4,[R4]
push {R2}
ldr R2,[R2] @ R2 = tail node
str R4,[R2,#4] @ R2 next ptr = node
pop {R2}
str R4,[R2] @ tail = node
str R3,[R4] @ node data = first addr of data
mov R3,#0
str R3,[R4,#4]
pop {R1-R4,R14}
bx LR
first_node:
push {R1-R4}
ldr R4,=node
ldr R4,[R4]
str R4,[R1] @ head = node
str R4,[R2] @ tail = node
str R3,[R4] @ node data = data
mov R3,#0
str R3,[R4,#4]
pop {R1-R4}
pop {R1-R4,R14}
bx LR
alloc:
push {R1-R3,R14}
mov R0,#8
bl malloc
ldr R1,=node
str R0,[R1]
ldr R1,[R1]
mov R3,#0
str R3,[R1]
str R3,[R1,#4]
pop {R1-R3,R14}
bx LR
Добавляя несколько случайных строк, извивающихся вокруг собаки моей подруги,это выход .игнорируйте числа, это десятичные адреса памяти malloc'd