Перейти к содержанию
    

dio4

Участник
  • Постов

    36
  • Зарегистрирован

  • Посещение

Репутация

-4 Плохой

Информация о dio4

  • Звание
    Участник
    Участник

Информация

  • Город
    Array

Посетители профиля

308 просмотров профиля
  1. Итак, если интересно, цифра 2 появляется в том регистре потому, что это количество правильно записанных байт системным вызовом write, который и пишет это в R0 по умолчанию как информацию о выходе. Тк write последний в программе вызов, который возвращает беззнаковое целочисленное значение, то оно и записывается в R0. Так что ребята, svc тут ни при чем, хотя мне и предлагали тут долго искать маны по svc, в частности HardEgor. Ну, всем привет и успехов в работе(учебе). Тему считаю закрытой.
  2. Да, за книгу спасибо, у меня есть в англ. варианте. И правда смешно, да 😀 Как у классика то было в "Ревизоре"? "Над кем смеетесь?" Ответ сами у классика прочтете 😁
  3. Ок. Сказал же - сам разберусь. Просто я думал, может вы знаете, - теплилась надежда... спасибо всем еще раз. И знаете - ваше раздражение мне понятно. Но вы должны сами понимать, что все знать нельзя, даже если хочется. Так что, злиться не надо 😉
  4. О боже!! ))) У меня RASPI 2 Raspbian GNU/Linux 9 (stretch) ща скину скриншот...если надо. тогда повторите плиз - в какой строке и почему меняется содержимое регистра r0?
  5. я что - обидел кого-то? Вроде нет. Задал конкретные вопросы - ждал четких ответов, не получил, сказал всем спасибо, был вежлив и пошел разбираться сам. Что не так? я уже понял - не надо, - но спасибо все равно. Я сам разберусь.
  6. Ок, я понял. Спасибо всем за желание помочь. Как разберусь, отпишусь в тему. Os все та же - Raspbian GNU/Linux 9 (stretch). какие телепаты? Я задал очень конкретные вопросы по проге из 10 строк 😀 и не получил ни одного конкретно ответа(и неск. неправильных). Телепатия тут ни причем. все доки на сайте производителя. речь не о документации, а о работе программы. по ней есть что сказать в рамках заданных мной вопросов помимо "почитать что-то и еще что-то почитать" Ребята - прога из 10 строк )))?
  7. я прочитал - у вас что конкретно сказать? Буду благодарен.
  8. Нет не во всех, я прошелся в gdb и посмотрел - только в последнем. Я и спрашиваю - почему? svc 0 должен делать только выход программы из системы и ничего больше. "Записать что-то..." ничего просто так как "что-то" не происходит - для всего есть конкретная причина и я пытаюсь ее понять. А так у вас звучит как магия. Прошу - давайте только по существу, если можно. извините - у меня там нет функций, просто svc 0 это и есть обращение из программы на asm к системному вызову. 0 - указывает обработчику svsc к какому конкретно..вот и все.
  9. Те вы утверждаете, что эта программка имеет некое нестабильное поведение(те делает то, чего там не написано на ассемблере)? Можете объяснить где конкретно и почему? А так - у меня там есть строка, конкретно записывающая 1 в регистр, а потом это значение непонятно почему становится равным 2. Именно этот регистр используется для вывода кода выхода программы. Я задал конкретные вопросы по проге из 10 строк 😀- в какой строке кода и почему меняется это значение регистра - вы так и не ответили. Но я поблагодарю вас снова за ваше время. Спасибо.
  10. Хорошо, тогда какой из ТРЕХ системных вызовов делает то, что вы описали? В какой строке кода? РОН в 32 битной arm 12, почему меняется именно тот, о котором вы говорите? В какой конкретно строке кода?(или каких). Вы понимаете, что ответ "это все ядро - оно великое и ужасное" это не ответ. Но спасибо за попытку помочь.
  11. Я про регистры ничего не говорил. Я сказал, что прога считывает со stdin символ, преобразует его и выводит на sdtout. Регистры используются как место хранения параметров сист. вызовов и хранения данных ( в тч считанного с клавы символа). Я повторю вопрос - "почему и какой вызов меняет содержимое регистра с 1 на 2 не ясно. Можете пролить свет на это?" Если нет, то пожалуйста, не нужно писать ничего. Спасибо заранее. Или если есть сказать - где конкретно посмотреть(те конкретно, а не тонны информации при проге в три строчки). скажите, в какой конкретно строке кода svc меняет 1 на 2 и почему?
  12. Спасибо, я поищу. Считывает с клавы, со stdin, выводит на stdout, третий делает выход из программы. А почему и какой вызов меняет содержимое регистра с 1 на 2 не ясно. Можете пролить свет на это?
  13. То, что в stdin остается '\n' это я уже допетрил. А вот с "Очевидно, системный вызов изменяет содержимое регистров." можно по-подробнее...у меня нет команды, меняющей содержимое регистра, отвечающего за вывод содержимого в оболочку. И спасибо, что ответили. Уточню для конкретики - в проге три системных вызова. Какой из них меняет содержимое какого регистра(без указания явной команды в коде), на что меняет и почему? Спасибо.
  14. Добрый день всем. Есть простая программка: .global _start _start: _read: @ read syscall MOV R7, #3 @ Syscall number MOV R0, #0 @ Stdin is keyboard MOV R2, #1 @ read one character only LDR R1,=string @ string at string: SVC 0 _togglecase: LDR R0, [R1] @ load it into R0 ORR R0, R0, #0x20 @ change case STR R0, [R1] @ write char back _write: @ write syscall MOV R7, #4 @ Syscall number MOV R0, #1 @ Stdout is monitor MOV R2, #2 @ string is 2 char long(+ пробел) SVC 0 _exit: MOV R7, #1 все работает вроде как надо, те вводим букву в вернем регистре, получаем в нижнем. Суть: 1 вопрос - почему код выхода $echo $? 2 а не 1(последнее, что было в R0). " вопрос - почему оболочка как-бы дважды отрабатывает выход из дочернего процесса и дважды генерирует приглашение командной строки? pi@raspberrypi:~/cods/upper_case $ ./upper A a pi@raspberrypi:~/cods/upper_case $ pi@raspberrypi:~/cods/upper_case $ Заранее спасибо за конкретные ответы или точные указания, как их получить. PS в коде,конечно, в конце стоит .data string: .ascii " \n"
×
×
  • Создать...