Я работаю над школьным проектом по сборке рук с использованием Raspberry Pi.Моя цель - открыть входной файл и вычислить контрольную сумму, просто посчитав символ ASCII во входном файле.Затем откройте выходной файл, который напишет то же сообщение, но добавит значение ASCII в конце текста.Мой профессор просит динамически выделять память для входных и выходных массивов.У меня вопрос, как бы я поступил так, потому что он никогда не показывал нам, как это использовать.Я исследовал, как использовать его в C, но мне трудно применить эти знания для сборки оружия.
Я просмотрел лист из того, что мой профессор разместил в Интернете, но, похоже, это совсем не помогает.Все, что он показывает, это
in n = 500;
/* example n has value of 500 */
dbptr = (char *) malloc(n)
/* will allocate 500 bytes and dbptr will be the pointer to the beginning of
the dynamically allocated array/buffer */
. Что бы мне ни пришло в голову, я бы открыл файл.Затем поместите размер строки в переменную и вызовите malloc с переменной в качестве параметра?
.data
disInput: .asciz "Enter input file name: "
disOutput: .asciz "\nEnter output file name: "
disHash: .asciz "Enter hash seed: "
disOptions: .asciz "\nGet checksum(1) or check integrity(2)?: "
disDone: .asciz "Checksum calculated!"
disSafe: .asciz "Integrity passed. File is safe."
disBad: .asciz "Integrity failed. File is not safe."
disNoFile: .asciz "No file exists"
disEmpty: .asciz "Empty file"
disWrong: .asciz "You entered a bad option\n"
formOption: .asciz "%d"
formInFile: .asciz "%s"
formOutFile:.asciz "%s"
formHash: .asciz "%d"
inputFile: .asciz ""
outputFile: .asciz ""
hashSeed: .int 0
option: .int 0
.text
.global main
main:
push {ip,lr}
b menu
menu:
@ask user to enter input file name
ldr r0,=disInput
bl printf
@user input for file name
ldr r0,=formInFile
ldr r1,=inputFile
bl scanf
@open file and check if empty or if it exists
@ask user to enter hash seed
ldr r0,=disHash
bl printf
@user input for hash seed
ldr r0,=formHash
ldr r1,=hashSeed
bl scanf
@ask user for option of get checksum or check integrity
ldr r0,=disOptions
bl printf
@user input for option
ldr r0,=formOption
ldr r1,=option
bl scanf
@branch depending on user option
ldr r4,=option
ldr r5,[r4]
cmp r5,#1
beq option1
cmp r5,#2
beq option2
b wrongOption
option1:
@ask user to enter output file name
ldr r0,=disOutput
bl printf
@user input for output file name
ldr r0,=formOutFile
ldr r1,=outputFile
bl scanf
@branch to calculate checksum
option2:
@
ldr r0,=disDone
bl printf
wrongOption:
@when user enters the wrong option
ldr r0,=disWrong
bl printf
b done
calculate:
@where checksum is calculated
@if option 1 then branch to done
done:
mov r0,#0
pop {ip,pc}
.end
Вот мой код для проекта на тот случай, если он поможет.Извините, если он требует слишком многого, но я исследовал его повсюду, и помощь в сборке рук не слишком велика.Спасибо!