Вопрос № 83956: Доброго времени суток, уважаемые эксперты.
Есть у меня к вам несколько вопросов, и наверняка появятся еще в будущем..
Начал я в изучать ассемблер, признаюсь не по собственной воле, а по воле проведения, а точнее программа в университете у мен...Вопрос № 83994: Здравствуйте, хочу изучать ассемблер, подскажите ссылки на сайты, где будет информация для новичка в ассемблере. Я где-то видел сайт Олега Калашникова, администратора этого сайта, забыл как он называется, мне надо в электронном все виде, чтобы не пок...Вопрос № 84045: Такой вопрос
: как слинковать программу на ассемблере с программой на "С"
точнее , если функцию strchr написать на ассемблере и вызвать из "с" ?
И как будет выглядеть функция ? Конкретно интересно , то , что в стек будет з...
Вопрос № 83.956
Доброго времени суток, уважаемые эксперты.
Есть у меня к вам несколько вопросов, и наверняка появятся еще в будущем..
Начал я в изучать ассемблер, признаюсь не по собственной воле, а по воле проведения, а точнее программа в университете у меня такая..
Вот начал писать уже вторую лабу, и застопорился..
Не понятно для меня как работает функция 0Ah 21h прерывания, то есть вроде даже вся ясно, но у меня не работает в лабе..
Вот то, что я начал писать... (см.код)
Если написать "mov dx,offset Stroka" (вроде всё по правилам), не работает ввод, если написать "mov stroka,20d" ввод начинает работать. Второй вариант мне кто-то подсказал на лекции, но я ничего не понял почему так.. Объясните пожалуйста, в чем дело?
Отвечает: Олег Владимирович
Здравствуйте, Roman Aleksandrovich!
Почитайте про функцию 0Ah, особенно описание:
http://dos.80x86.ru/index.php?act=int&id=0018
Приложение:
--------- Факультет ПМ-ПУ - лучший в СПбГУ!
Ответ отправил: Олег Владимирович (статус: Студент)
Ответ отправлен: 24.04.2007, 14:32
Отвечает: Зенченко Константин Николаевич
Здравствуйте, Roman Aleksandrovich!
Функции 0Ah 21h передается строка
где:
- первый байт это максимальный размер строки для ввода(обязательно)
- второй байт это количество введенных символов без кода 0Dh (enter) (возвращается функцией)
- и сама строка(возвращется функцией)
в программе выглядит так:
;сегмент данных
string_max db 100
string_input db ?
string_self db 100 dup(?)
Отвечает: Sov
Здравствуйте, Roman Aleksandrovich!
Начну с краткого описания функции ah
При вызове этой функции буфер должен быть оформлен так:
max,?,?,?,? где max-максимально допустимая длинна ввода(от 1 до 254)
При выходе буфер будет заполнен так:
max,len,T,E,X,T,0dh len-действительная длинна записанных данных без CR(буфер однако будет содержать введеную строку и символ CR).
Ваш первый вариант не работал, потому-что вы неправильно оформили буфер. Попробуйте сделать так:
Stroka db 20,?, 22 dup (?);2 байта останутся под символ конца строки. 20 собственно под текст
Второй вариант поэтому и начинает работать, вы заполняете первый байт массива Stroka каким-то значением, теперь буфер оформлен верно и функция работает
Ответ отправил: Sov (статус: 1-ый класс)
Ответ отправлен: 24.04.2007, 16:38
Отвечает: An42
Здравствуйте, Roman Aleksandrovich!
для работы dos int 21h ah=0ah необходимо подготовить буфер:
я пользуюсь такой схемой
stroka label byte
strmax db 20 ;максимальная длина строки
strlen db ? ;реальная длина введенной строки
strptr db 20 dup(‘ ‘) ;непосредственно куда будет записываться строка
тогда
mov ah,0ah
lea dx,stroke
int 21h
программа остановится и будет ждать пока вы будете осуществлять ввод, по нажатию клавиши return в буфер запишется строка и последний байт будет код 0dh, т.е. в переменной strptr будет запись вашей строки и код 0dh.
Буфер можно организовать и так: stroka db 20,?,20 dup(‘ ‘), единственная разница в том, что введенная стока будет находится с третьего байта.
Удачи
Ответ отправил: An42 (статус: 2-ой класс)
Ответ отправлен: 24.04.2007, 17:33
Вопрос № 83.994
Здравствуйте, хочу изучать ассемблер, подскажите ссылки на сайты, где будет информация для новичка в ассемблере. Я где-то видел сайт Олега Калашникова, администратора этого сайта, забыл как он называется, мне надо в электронном все виде, чтобы не покупать книги
Еще надо по PHP, SQL (или MySQL) и по Perl
Заранее спасибо
Ответ отправил: Пашка (статус: 2-ой класс)
Ответ отправлен: 24.04.2007, 21:25 Оценка за ответ: 5 Комментарий оценки: Спасибо за ссылки, может потом я тоже буду в этой теме экспертом
:D
Отвечает: lupus campestris
Здравствуйте, Исаак Моисеевич!
Ассемблер - http://www.inattack.ru/cat_program/21.html
PHP и Perl - http://www.inattack.ru/cat_program/62.html
SQL - http://www.inattack.ru/cat_program/49.html
Удачи!
--------- «С кем тяжело молчать, с тем не о чем говорить» (Метерлинк)
Ответ отправила: lupus campestris (статус: Профессор) Россия, Москва Тел.: +79060429689 Организация: http://www.orange-business.ru WWW:http://lupus-campestris.blogspot.com/ ICQ: 193918889 ---- Ответ отправлен: 24.04.2007, 21:41 Оценка за ответ: 5 Комментарий оценки: Спасибо, ждите потом
меня в этой теме экспертом :)
Отвечает: P@lach
Здравствуйте, Исаак Моисеевич!
Сайт калашникова http://www.kalashnikoff.ru/
Книги по ассемблеру ,PHP, SQL и по Perl можно скачать на сайте: http://books.openlib.org.ua/
Ответ отправил: P@lach (статус: 2-ой класс)
Ответ отправлен: 25.04.2007, 09:35 Оценка за ответ: 5 Комментарий оценки: спасибо, http://books.openlib.org.ua/ шибко хороший сайт
Вопрос № 84.045
Такой вопрос : как слинковать программу на ассемблере с программой на "С"
точнее , если функцию strchr написать на ассемблере и вызвать из "с" ?
И как будет выглядеть функция ? Конкретно интересно , то , что в стек будет занесен указатель на первый символ строки , мы обратимся к ниму как [sp] , например, а как обращаться ко втором элементу строки : [sp] + 1 ?
и так LOOPом пока не встретим символ 0000H ? И как записать указатель , который должен быть возвращён функцией ? в AX, как MOV ax, [sp] + "какое-то число" , так? Поправте меня, пожалуйста, если что -то неправильно ! Заранее большое спасибо!
Отвечает: Зенченко Константин Николаевич
Здравствуйте, Горький Артём Андреевич!
Вы можете использовать встроенний ассемблер, не заботясь о передаче параметров всю работу сделает компилятор, автоматически преобразовывая имена переменных в word ptr [bp+ХХ].
Посмотрите эту книгу.
В главе 5 расмотренно как можно передавать параметры.
В главе 8 расмотренно как взаимодействуют языки высокого уровня с ассемблером.
Удачи!
--------- И только наступив на грабли мы преобретаем драгоценный опыт!