Андрей
нет
Андрей
в принципе то, что loopForPrintNum1 и loopForPrintNum2 определены дважды
Андрей
Решил с помощью
local loopForPrintNum1
local loopForPrintNum2
Андрей
нет, не решил, он хоть и не ругается теперь, зато всегда печатает одно и тоже число)
Андрей
то есть видимо переходин на одну и ту же метку
Андрей
стоп, не
Андрей
хех, не , норм, это мой косяк, я просто случайно всегда одну и ту же перемнную подгружал, а не ту, что передаётся в макросе
Андрей
Почему значения регистров r0-r3 всегда равны a1-r4?
Андрей
Теперь тоже самое, но уже не с меткой, а с переменной, и локал уже не помогает
Андрей
.macro print chars
var asciz strForPrint \chars
local strForChars
lenstr lenStrForPrint strForPrint
writestr strForPrint lenStrForPrint
.endm
Андрей
Что означает ошибка компилятора invalid literal constant pool needs to be closer?
Андрей
И как её исправить?
Barmaley
@@:
Barmaley
так метку лепи
Barmaley
jmp @b
Barmaley
это прыгнуть назад
Barmaley
jmp @f
Barmaley
прыгнуть вперед
Андрей
это arm asm, тут нет jmp
Андрей
по крайней мере в моём компиляторе
Barmaley
проверь нотацию с @@ вдруг прокатит
Андрей
Андрей
Тут описал проблему с подробностями: https://toster.ru/q/430280
Barmaley
ну если нет jmp то поменя на что там есть xxx @b
Андрей
тоже не работает)
Да и вообще, в арм ассемблере с собаки начинается комментарий))
Barmaley
ну все равно что-то должно быть
Barmaley
иначе от макросов смысла нет
Андрей
а это к чему вообще? к вопросу про метки в макросах?
Андрей
если да, то я с ним уже разобрался, там просто используется ключевое слово local
Barmaley
потому как должны быть локальные метки иначе макросы не пашут
Barmaley
))))
Андрей
это да, есть там локальные метки, всё норм)
Андрей
Меня сейчас уже другое интересует))
Vladimir
var int bufForPrint 0
.macro printnum num
loadvar r1 a
mov r4, $0
loopForPrintNum1:
push {r4}
mov r2, $10
udiv r3, r1, r2
mls r4, r2,r3,r1
add r4, $48
mov r1, r3
cmp r1, $0
bne loopForPrintNum1
push {r4}
loopForPrintNum2:
pop {r4}
storevar r4 bufForPrint
writestr bufForPrint 1
cmp r4, $0
bne loopForPrintNum2
.endm
Богомерзкие push и pop - лютая ересь для risc-архитектуры коей является arm
Vladimir
Пишите ldmfd stmfd чтоб понимать, что пишете
Андрей
"PUSH is a synonym for STMDB sp!, reglist" из оффициальной документации, так что разницы нет
Андрей
Можно ли как-нибудь в макросах проверять чему равен данный параметр, хочется что-то типа:
.macro mymacro par
.ifeq \par r0
;code1
.else
;code2
.endif
.endm
Андрей
Правильно ли я понимаю, что если сначала сделать
push {r0-r2}, а потом
pop {r0-r2}, то это три регистра встанут на свои места?
IB
ну в прерываниях ты же делаешь push и pop
IB
при вызовах функций ты же делаешь push и pop
IB
поэтому да, правильно
Андрей
хорошо, спасибо
Андрей
где в арм находятся флаги? В каком-то регистре? Или как к ним получить доступ кроме условных переходов?
Anonymous
Anonymous
видно должно быть
Андрей
на машине нет отладчика
Anonymous
linux ?
Андрей
android
Shmelev
r2 на ведро ставится
Shmelev
https://github.com/radare/radare2-installer
MrSmith
Программная инженерия
Хах у меня таких пол кафедры ХАХА ОР. Какая тебе другая страна, я бы на месте препода тебе все запарол
MrSmith
Shmelev
ну gdbserver поставь
Shmelev
или ida
MrSmith
или ida
Ида тоже есть куда без нее но надеюсь постепенно переползу таки на радар
Shmelev
android_server в папке dbg
Shmelev
MrSmith
Shmelev
у нас на экзамене по ооп в первом семестре третьего курса вообще calling conventions спрашивали для x86
Shmelev
причём в программе курса такого не было вообще, а до этого по асму были (для большинства - тупо списанные) лабы в dosbox в начале второго курса
Shmelev
ну и C на уровне чтения-записи в файл
MrSmith
Shmelev
мне то нравится, но если человек с нулевыми знаниями пришел в институт, то есть шанс, что из-за поехавшей программы у него знания не улучшатся, зато будет НЕНАВИСТЬ к IT и программированию в принципе
Shmelev
и в C дошел до чтения-записи в файл
MrSmith
У меня ненависть к it ВУЗ образованию и образованию вообще, что я делаю не так?
Shmelev
всё ты так делаешь, а кто-то с этим живет
MrSmith
Shmelev
Хорошо, университетская программа закончилась на чтении-записи в файл средствами stdio
MrSmith
MrSmith
Больше и не надо
Vladislav
Shmelev
лол
MrSmith
Кек
Shmelev
Какой там posix
Ilya
MrSmith
Shmelev
Кек
зато был интерфейс dos-а
MrSmith
Shmelev
из лаб 1998 года