Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Ассемблер? Это просто! Учимся программировать (FAQ)


Служба Рассылок Subscribe.Ru проекта Citycat.Ru

Ассемблер? Это просто! Учимся программировать (FAQ)
______________________________________

Выпуск N 094

Вопросы, которые поступили от подписчиков рассылки
"Ассемблер? Это просто! Учимся программировать"

Дата выхода: 2001-09-14


Вопрос №884

Здравствуйте Эксперты.
Я написал обработчик 21h-го прерывания, который запрещает вызов функции 25h(установить вектор прерывания). Можно ли установить новый новый вектор на какое-нибудь прерывания, обойдя функцию 25h?

Заранее благодарен.

Ответ

Здравствуйте, Sirius!
можно. таблица векторов прерываний находится по адресу 0:0
256 4-х байтовых адресов, сегмент:смещение
addrees_interrupt[i] = 0:((i-1)*4)



Отправил эксперт: АлександрМ
Эксперт отправил ответов (всего): 22

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №875

Уважаемые эксперты.
1) Я так и не дождался вашего ответа (может слишком не терпелив?). Надеюсь что все таки получу свой ответ :).
Моя программа должна из файла file1.txt удалить все дублируемые пробелы и сохранить в файле file2.txt. Укажите, пожалуйста, на ошибки.
2) Расскажите, пожалуйста, о DTA- его структуре
С уважением, Kiran.

Ответ

Здравствуйте, Kiran!

Ну вот я что-то подправил, хотя в 5 утра голова как-то плохо варит. Особенно в плане оптимизации. Изучайте :)

Кстати, посмотрел я тут программу уважаемого эксперта Broken Sword и хочу немного ее покритиковать:

1. Программа будет обрабатывать только первые (filsize mod 64К) байт файла. Я понимаю, что скорее всего больше и не надо, но все-таки... Хотя бы в комментариях это указать в качестве особенности :)
2. Почему-то и прога Kiran'а, и уважаемого эксперта Broken Sword добавляет в конец файла первый непробельный символ исходного файла. Разбираться мне сейчас лениво, если кто хочет - ищите. Могу прислать свой тестовый файл (пишите на ayl@kot.spb.ru до 11.00 утра сегодня. Потом я до 1 октября в отпуске).

Приложение:


Отправил эксперт: Ayl
Эксперт отправил ответов (всего): 10

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №884

Здравствуйте Эксперты.
Я написал обработчик 21h-го прерывания, который запрещает вызов функции 25h(установить вектор прерывания). Можно ли установить новый новый вектор на какое-нибудь прерывания, обойдя функцию 25h?

Заранее благодарен.

Ответ

Здравствуйте, Sirius!
Конечно можно! Запомни, то что возвращала эта функция в es и bx преспокойно лежит в нулевом сегменте по смещениям:
XXh*4 и XXh*4+2, где XXh-требуемое прерывание

p.s. уважаемый эксперт Painbringer!!! огромное спасиба за Ваш ответ, но маленькое утверждение: "за пивом" пишется естественно раздельно, а "зачем?" уже конечно вместе... так вот у меня был не посыл (это я потом, отдельно), а вопрос, удивление если так можно сказануть.

з.з.ы. уважаемый эксперт Ayl!!! Там дейсвтительно недоработка в моей проге, но только у меня все наоборот: в конце НЕДОПИСЫВАЕТСЯ 2 символа, т.к. неверно в задана длина записываемой в файл инфы
2. почему filesize mod 64K??? просто 64К, без всяких огрызков от деления


Отправил эксперт: Broken Sword (http://www.revolution.co.uk - скрытая реклама...)
Эксперт отправил ответов (всего): 144

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №866

1.Вопрос номер один:
Правда ли что можно получить одтельную задачу в с такими параметрами?:

1. Допустимое адресное пространство 4GB.
2. Адреса #00000000 to #FFFFFFFF.
3. Разумеется 32bit инструкции.
4. А как я использую и распределяю память это уже мои проблемы,
пишу что хочу и куда хочу, сам управляю загрузкой кода куда приспичит.
5. Что именно я загружаю и куда - код или данные, или чтото другое,
и что я с этим собираюсь делать, - это только моё личное дело,
и никто несмеет посягать на мою свободу и индивидуальность.
6. Вобщем смогу ли я получить полноценную 32bit среду для своей программы?
7. Как это сделать из ASSMLRа.
8. Как в таком случае можно работать с прерываниями, DMA и прочими
_необходимыми_ примочками.
9. Как получить из чистого кода c размахом на 32bit
(сгенерированого например в CPL)
x_file.exe для windows, UNIX, BeOS, или другую OS.

Примечания:
1. понятно что 4GB адресов управляются
(подкачка, размещение в физ. памяти.)
OS из реального режима.






Ответ

Здравствуйте, fanonymous!
Не туда задаешь вопрос


Отправил эксперт: Warlock
Эксперт отправил ответов (всего): 3

Экспертная группа: Модели, виды и типы компьютеров (hard)

Вопрос №883

Здравствуйте Эксперты.
Я написал обработчик 21h-го прерывания, который запрещает вызов функции 25h(установить вектор прерывания). Можно ли установить новый новый вектор на какое-нибудь прерывания, обойдя функцию 25h?

Заранее благодарен.

Ответ

Здравствуйте, Sirius!

Функция 25h - сервисная. Она перед записью вектора в таблицу прерываний не забывает их запретить, а после - разрешить. Вы можете сделать то же самое: cli , пару mov, sti. В реальном режиме запретить определенные mov невозможно.


Отправил эксперт: Bitman
Эксперт отправил ответов (всего): 15

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №880

Здравствуйте уважаемые эксперты!
Я собрался писать работу по LINUX(and UNIX) и мне нужна подробная информация по этой ОС(недостатки, достоинства и т.д.), а желательно СРАВНЕНИЕ с Windows в общих чертах!
В Интернете искал, кое-что нашел, но может у вас что-нить интересненькое завалялось! Может есть инфа по ядру Linux и ядру Windows!
<Принимается даже пару строк, главное не объем, а содержание, во как!>

БОЛЬШОЕ СПАСИБО ТЕМ, КТО ОТВЕТИТ!

Ответ

Здравствуйте, Orlando!
Есть инфа по линуху и юниксу...
Мыльсюда
и вопрос сразу..запускаю с++ в Линуксе, а он говорит
no input file хотя file.cpp указан
че за батва неподскажешь???


Отправил эксперт: змей
Эксперт отправил ответов (всего): 24

Экспертная группа: Пользовательская работа с Windows

Вопрос №887

Broken Sword: 1. Вопрос какой-то, мягко говоря, неумный... В реальном режиме во всей оперативе можешь адресовать немного больше 4 Gb используя
только 16-битные сегментные регистры и стандартные 16-битные регистры общего назначения.

Надеюсь, просто описка, но не 4Gb, а 1Mb !!!

Ответ

Здравствуйте, Bitman!
Это не описка, а я чистую дурость прогнал... замешал защищенный режим и реальный и еще какие-то 16-битные регистры. Исправляюсь:
В реальном режиме можна адресовать 1 048 560 байт памяти.
В защищенном режиме - 4 Gb или 64 Gb (Pentium Pro)


Отправил эксперт: Broken Sword (http://www.revolution.co.uk - скрытая реклама...)
Эксперт отправил ответов (всего): 145

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №873

Раскажите, пожалуйста, о структуре DTA

Ответ

Здравствуйте, Kiran!

Зачем тебе это?!? то что ты делаешь в своей программе никак с DTA не связано. но если очень интересно, можешь посмотреть Tech Help который можешь скачать с моего сайта (линк ниже)


Отправил эксперт: Dron (http://spawnhole.narod.ru/asmos/asmos.html - Операционная система с нуля!)
Эксперт отправил ответов (всего): 119

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №883

Здравствуйте Эксперты.
Я написал обработчик 21h-го прерывания, который запрещает вызов функции 25h(установить вектор прерывания). Можно ли установить новый новый вектор на какое-нибудь прерывания, обойдя функцию 25h?

Заранее благодарен.

Ответ

Здравствуйте, Sirius!

mov 0:[intno * 4], offset
mov 0:[intno * 4 + 2], segment


Отправил эксперт: Dron (http://spawnhole.narod.ru/asmos/asmos.html - Операционная система с нуля!)
Эксперт отправил ответов (всего): 120

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №886

Вопрос 878 (тормоза памяти больше 64M на на старом компе). Orlando ответил : Все дело в том, что твой процессор слишком слаб и нельзя использовать более 64М памяти!
Тут и я вспомнил :-) Дело не в процессоре, а в том что чипсет TX и его аналоги кэшируют не более 64M ОЗУ. Это значит, что вся память больше 64M всегда будет читаться непосредственно из модулей ОЗУ. Правда, для меня удивительно, что такая большая разница в быстродействии! Недаром кэш норовят сделать побольше, недаром :-)

Ответ

Здравствуйте, Bitman!
Во, правильно!
Я сакм уточнил у спецов-так и есть!
Да кстати:
Кто интересовался справочником HView(techhelp 6.0)-тем что я предлагал-Dron выложил на своем сайте http://spawnhole.narod.ru/asmos/asmos.html
в разделе Средства


Отправил эксперт: Sensey
Эксперт отправил ответов (всего): 129

Экспертная группа: Модели, виды и типы компьютеров (hard)

Вопрос №886

Вопрос 878 (тормоза памяти больше 64M на на старом компе). Orlando ответил : Все дело в том, что твой процессор слишком слаб и нельзя использовать более 64М памяти!
Тут и я вспомнил :-) Дело не в процессоре, а в том что чипсет TX и его аналоги кэшируют не более 64M ОЗУ. Это значит, что вся память больше 64M всегда будет читаться непосредственно из модулей ОЗУ. Правда, для меня удивительно, что такая большая разница в быстродействии! Недаром кэш норовят сделать побольше, недаром :-)

Ответ

Здравствуйте, Bitman!
Ну не знаю на счет чипсета, но что нельзя лишнюю память пихать это я из журнала какого то прочел, и там говорилось, что все дело в проце, так что примите к сведению!


Отправил эксперт: Orlando
Эксперт отправил ответов (всего): 106

Экспертная группа: Модели, виды и типы компьютеров (hard)

Вопрос №889

Простите за каламбур в прошлом вопросе, действительно это был регистр DL, глупо получилось=)))
Вобшем вопрос у меня такой:
Metka1 proc
push ax
push bx
ret
Metka1 endp
После команды ret произойдет операция анологичная
pop ax ;
pop bx ;в данном случае???
Тоесть можно не писать так (если он сам выравнитца):
Metka1 proc
push ax
push bx
pop ax
pop bx
ret
Metka1 endp

Ответ

Здравствуйте, Alex!
Нет конечно!
Тут логика такая:
call эквивалентно push cs push ip
ret эквивалентно pop ip pop cs
либо при одном сегменте кода cs не помещается никуда
слова proc или endp не генерит ничего-это команды компилятору
Можно вообще написать, см ниже

Приложение:


Отправил эксперт: Sensey
Эксперт отправил ответов (всего): 130

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №890

Привет всем.
Уважаемые эксперты у меня к вам такой вопрос, когда я подключаюсь к другому копьютеру (по модему), по протоколу TCP/IP в общем все нормально,но меня интересует другое, этот компьютер является сервером локальной сети (12 компов) как мне подключится к другим компам то есть залесть на их жеский диск через сервер, причем все пароли мне известны.
Как можно чтобы через удаленку запустить прогу на другом компьютере?

Ответ

Здравствуйте, Алексей!
Надо поставить WinRoute
Если на серваке стоит NT или 2000-там есть встроеный


Отправил эксперт: Sensey
Эксперт отправил ответов (всего): 131

Экспертная группа: Пользовательская работа с Windows

Вопрос №892

Здравствуйте...
У меня несколько вопросов:
1. Почему когда запускаеш в одном окне отладчик, а в другом дос в
режиме debug, то значения регистров разные?

2. Мое понимание сегментации памяти: Вся память разделена на сегменты
изначально. Когда запускается программа, она загружается в оперативку
и занимает первый попавшийся свободный сегмент. При адресации используется
адрес из 8 шестнадцнеричных цифр (4 на сегмент и 4 на смещение). Можно
сказать что современный (32 разрядный - 32 бита на адресацию) процессор
может оперировать 16^8=4гб оперативки. Программа загрузившись в
опреативку занимает лишь только сколько ей нужно, остальное
же место в сегменте остается свостребованным, но другие программы
использовать его не могут,т.к. сегмент занят. Правильно ли я
понимаю эту тему. Если нет то укажите ошибки или представте подробное
описание сегментации.

3. Зачем нужен 9 бит в байте (контроль на четность), почему нужно
что бы было именно нечетное количество?

С уважением, Allegiace.

Ответ

Здравствуйте, Allegiance!
1. Не понял что ты имеешь в виду:(
2. Неправильно
Сегменты начинаются с параграфа(выровнены на 16 байт)
Реальный адрес вычисляется как сегмент*10h+смещение
Программа занисает соответственно целое кол-во параграфов, точнее в досе всю доступную память, которую потом можно высвободить специальными ф-циями
3. просто в байте 8 бит, а в девятом передается такое значение, чтобы в результате было четное кол-во 1
(это ты наверное CОМ-портами заинтересовался?)


Отправил эксперт: Sensey
Эксперт отправил ответов (всего): 132

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №891

По поводу вопроса № 862.
Совершенно серьезно – СПАСИБО ОГРОМНОЕ Dron и Painbringer !! В таких критических ситуациях приятно хотя бы сочувствие…. Если когда-нибудь удасться пожать Вам руки, с меня МНОГО пива. С оптимизацией проги выкрутился за 4 ЧАСА – раздал студентам на парах по кусочку с предложением оптимизировать на оценку (вот такая я сволочь!):)))). Оптимизация в общем никакая, зато результатов - ЗАВАЛИСЬ! Не, вы не подумайте, что я отношусь к галимому племени преподов, просто …. ну, в общем…. читаю тут курсы по Асму и ТурбоПаскалю у абитуры и перваков. Кроме того, таки использовал SMART – очень забавная вещь. Инфу по ней достал, правда в бумажном варианте – кому надо могу поделиться.
Теперь по делу. Следующий код поставил меня в тупик. Удивитесь – два часа бился, так и не понял. Короче, при дизассемблировании некоей программки встречаю я такой фрагмент:
…..
cli
movsb rep es:
sti
…..
Заинтересовавшись, что за фигня такая, пишу этот же код в редакторе и пытаюсь откомпилить. И оно мне выдает в строке movsb – Extra characters on line!!!!! В изначальной программе эта конструкция работает. Машинный код, который TurboDebuger переводит в эти команды такой:
FA, F3, 26, A4, FB
Работаю на ТурбоАсме 5,0. Подскажите, как работает этот код и почему не компилируется ассемблером.
С уважением Вал.Ик
P.S. Broken Swordа-то достали………..
P.S.S Broken Sword, а ты бы этого Симпсона по морде-то, по морде, а потом ногами, ногами……;))

Ответ

Здравствуйте, Вал.Ик.!
Правильно это так(см Приложение)
ЗЫ Не помню кто написал, что нах... пишется раздельно
Так вот -выдержка из какого-то словаря сленга:
Раздельно, если имеется в виду анатомически, часть тела
А если в смысле подальше, тогда пишется слитно

Приложение:


Отправил эксперт: Sensey
Эксперт отправил ответов (всего): 133

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №889

Простите за каламбур в прошлом вопросе, действительно это был регистр DL, глупо получилось=)))
Вобшем вопрос у меня такой:
Metka1 proc
push ax
push bx
ret
Metka1 endp
После команды ret произойдет операция анологичная
pop ax ;
pop bx ;в данном случае???
Тоесть можно не писать так (если он сам выравнитца):
Metka1 proc
push ax
push bx
pop ax
pop bx
ret
Metka1 endp

Ответ

Здравствуйте, Alex!
Низяяяя. У тебя стек останется невыровненным. И вместо ret прога зависнет (вероятно), так как достанет из стека вместо адреса возврата достанет bx.
В таком случае лучше использовать ret n, где n-кол-во слов (или двойных слов при 32х-битной адресации), которые ты толкал в стек. В результате стек выровняется.

P.S. Можно было бы хоть пример к вопросу нормально написать:
push ax
push bx
pop ax;в ax - bx
pop bx;в bx - ax
Или ты так и предусматривал?


Отправил эксперт: DM
Эксперт отправил ответов (всего): 45

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №892

Здравствуйте...
У меня несколько вопросов:
1. Почему когда запускаеш в одном окне отладчик, а в другом дос в
режиме debug, то значения регистров разные?

2. Мое понимание сегментации памяти: Вся память разделена на сегменты
изначально. Когда запускается программа, она загружается в оперативку
и занимает первый попавшийся свободный сегмент. При адресации используется
адрес из 8 шестнадцнеричных цифр (4 на сегмент и 4 на смещение). Можно
сказать что современный (32 разрядный - 32 бита на адресацию) процессор
может оперировать 16^8=4гб оперативки. Программа загрузившись в
опреативку занимает лишь только сколько ей нужно, остальное
же место в сегменте остается свостребованным, но другие программы
использовать его не могут,т.к. сегмент занят. Правильно ли я
понимаю эту тему. Если нет то укажите ошибки или представте подробное
описание сегментации.

3. Зачем нужен 9 бит в байте (контроль на четность), почему нужно
что бы было именно нечетное количество?

С уважением, Allegiace.

Ответ

Здравствуйте, Allegiance!
1)Видуз при маневрировании между задачами сохраняет все регистры - так на одной системе в "окнах" присутствуют несколько виртуальных дос-машин, которые функционируют независимо друг от друга.
2) Вроде всё так, но для такого рода знаний это - начальный уровень.
3) Абеля начитался? Бит чётности нужен для контроля целостности информации в оперативной памяти, на диск он не записывается. По сути дела, значащие - первые восемь бит, девятый необязателен. Контроль чётности использовался давнооо и сейчас используется только на серверах (да и то редко). Да и вообще, для осознания структуры памяти знать про биты четности вовсе не обязательно.


Отправил эксперт: DM
Эксперт отправил ответов (всего): 46

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №891

По поводу вопроса № 862.
Совершенно серьезно – СПАСИБО ОГРОМНОЕ Dron и Painbringer !! В таких критических ситуациях приятно хотя бы сочувствие…. Если когда-нибудь удасться пожать Вам руки, с меня МНОГО пива. С оптимизацией проги выкрутился за 4 ЧАСА – раздал студентам на парах по кусочку с предложением оптимизировать на оценку (вот такая я сволочь!):)))). Оптимизация в общем никакая, зато результатов - ЗАВАЛИСЬ! Не, вы не подумайте, что я отношусь к галимому племени преподов, просто …. ну, в общем…. читаю тут курсы по Асму и ТурбоПаскалю у абитуры и перваков. Кроме того, таки использовал SMART – очень забавная вещь. Инфу по ней достал, правда в бумажном варианте – кому надо могу поделиться.
Теперь по делу. Следующий код поставил меня в тупик. Удивитесь – два часа бился, так и не понял. Короче, при дизассемблировании некоей программки встречаю я такой фрагмент:
…..
cli
movsb rep es:
sti
…..
Заинтересовавшись, что за фигня такая, пишу этот же код в редакторе и пытаюсь откомпилить. И оно мне выдает в строке movsb – Extra characters on line!!!!! В изначальной программе эта конструкция работает. Машинный код, который TurboDebuger переводит в эти команды такой:
FA, F3, 26, A4, FB
Работаю на ТурбоАсме 5,0. Подскажите, как работает этот код и почему не компилируется ассемблером.
С уважением Вал.Ик
P.S. Broken Swordа-то достали………..
P.S.S Broken Sword, а ты бы этого Симпсона по морде-то, по морде, а потом ногами, ногами……;))

Ответ

Здравствуйте, Вал.Ик.!
Да вроде нормально - просто у TD с синтаксисом проблемы. У меня IDA выдал:
cli
seges
repe movs byte ptr [di], byte ptr [si]
sti
Т.е. (насколько я осознал seges) идет копирование байт из одно места в другое, при этом в качестве семента с этими байтами используется ES.


Отправил эксперт: DM
Эксперт отправил ответов (всего): 47

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №893

Привет всем.

1. Как-то в рассылке кто-то сказал, что IDA это просто, а SoftIce это для продвинутых.
У меня похоже опилки в другом направлении уложены. С айсом проблем никаких, а
вот с идой не понятно. Если бы айс записывал в файл, а не на экран результат
своих действий не было бы вообще никаких вопросов. Пробую в иде получить *.асм файл
на выходе, и в полученном файле инфа как при запуске под дос, типа эта прога не может
быть запущена в досе. Вопрос - ида виндошные проги дизассемблирует или нет ?
Если да, то каким макаром ? Или только дос ? И еще, пробовал Dasm (w32dsm89), получилось
очень много сточек типа
Object01: RVA: 00001000 Offset: 00001000 Size: 00003C00 Flags: C0000040
Object02: RVA: 00007000 Offset: 00004C00 Size: 00001200 Flags: C0000040
и одна строка про точку входа. А где остальная прога ???

2. Кто-нибудь знает как работает ф-ция WriteFile из Win32 ? Особенно первые два параметра
(т.е. lpOverlapped <-????????? , lpNumberOfBytesWritten <-??????) Расскажите пожалуйста.

3. Вопрос к спецам по окнам. В стандартной звонилке есть опция запомнить пароль. Пишу имя, пароль,
делаю эту опцию checked, звоню, делаю свои дела и вследующий вызов - пароля как не бывало!!! Вопрос:
куда его прописать (у дарение на а) чтобы он запомнился навечно ?

Спасибо, огромное.
С уважением, Макс (maxe@mail.kz).

Ответ

Здравствуйте, Макс!
1)IDA дизассемблирует WinEXE - при открытии для типа файла автоматически выбирается формат (PE,LE) и исходник выходит очень даже ничего. Попробуй дизассемблировать какую-нибудь другую прогу - должно всё получится, а для твоёй нужно принудительно указать формат программы. Наверное.
3)Если ты использовал левые редакторы реестра, ты мог изменить там опцию "сохранять пароль дозвона к провайдеру" - она есть во многих. Не знаю, как они умудряются её заблокировать, но через стандартные настройки Windows сделать ничего не удаётся.


Отправил эксперт: DM
Эксперт отправил ответов (всего): 48

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №891

По поводу вопроса № 862.
Совершенно серьезно – СПАСИБО ОГРОМНОЕ Dron и Painbringer !! В таких критических ситуациях приятно хотя бы сочувствие…. Если когда-нибудь удасться пожать Вам руки, с меня МНОГО пива. С оптимизацией проги выкрутился за 4 ЧАСА – раздал студентам на парах по кусочку с предложением оптимизировать на оценку (вот такая я сволочь!):)))). Оптимизация в общем никакая, зато результатов - ЗАВАЛИСЬ! Не, вы не подумайте, что я отношусь к галимому племени преподов, просто …. ну, в общем…. читаю тут курсы по Асму и ТурбоПаскалю у абитуры и перваков. Кроме того, таки использовал SMART – очень забавная вещь. Инфу по ней достал, правда в бумажном варианте – кому надо могу поделиться.
Теперь по делу. Следующий код поставил меня в тупик. Удивитесь – два часа бился, так и не понял. Короче, при дизассемблировании некоей программки встречаю я такой фрагмент:
…..
cli
movsb rep es:
sti
…..
Заинтересовавшись, что за фигня такая, пишу этот же код в редакторе и пытаюсь откомпилить. И оно мне выдает в строке movsb – Extra characters on line!!!!! В изначальной программе эта конструкция работает. Машинный код, который TurboDebuger переводит в эти команды такой:
FA, F3, 26, A4, FB
Работаю на ТурбоАсме 5,0. Подскажите, как работает этот код и почему не компилируется ассемблером.
С уважением Вал.Ик
P.S. Broken Swordа-то достали………..
P.S.S Broken Sword, а ты бы этого Симпсона по морде-то, по морде, а потом ногами, ногами……;))

Ответ

Здравствуйте, Вал.Ик.!

Интересно, TD показал, что FA, F3, 26, A4, FB - это
cli
movsb rep es:
sti

А Hiew 6.16 выдал:
cli
repe
es:
movsb
sti

А вот Ida мыслил несколько по-другому:
cli
seg000:0101 seges ;команда переопределяет сегментный регистр es
seg000:0101 repe movs byte ptr [di], byte ptr [si];
ну здесь все в порядке!
seg000:0104 sti
или можно по-другому переписать, эти команды, если я правильно понял значение команды seges, то получим:
cli
repe movs byte ptr ES:[di], byte ptr ES:[si]
sti
Но хотелось бы взглянуть на фрагмент проги с этим участком, там чо в di, si и т.д. Если процедура, то напиши полностью!


Отправил эксперт: Orlando
Эксперт отправил ответов (всего): 108

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Подписаться на рассылки

Рассылки Subscribe.Ru
Ассемблер? Это просто! Учимся программировать
Ассемблер? Это просто! Учимся программировать (FAQ)

Форма подачи вопроса

ВНИМАНИЕ!!! Пожалуйста, НЕ высылайте один вопрос сразу нескольким подгруппам! Дополнения к вопросам, на которые эксперт уже ответил НЕ следует направлять ведущему рассылки (я не успеваю!). Просто скомбинируйте первый вопрос и дополнение к нему, а затем заново отправьте его, используя приведенную ниже форму!

Нажимайте кнопку "Отправить" только ОДИН раз и дождитесь полной загрузки страницы, иначе вопрос будет продублирован!


Ваше имя *:

Ваш e-mail *:

Подгруппы:

Вопрос *:

Прилагаемая программа (если необходимо):


Регистрация в качестве эксперта

Архив выпусков


Ведущий рассылки,

Калашников Олег: Assembler@Kalashnikoff.ru
ICQ No.:
68951340
URL сайта подписчиков: http://www.Kalashnikoff.ru

______________

По вопросам сотрудничества, рекламы и спонсорства обращайтесь:

  1. Публичное размещение материала из рассылки: Cooperation@Kalashnikoff.ru
  2. Реклама на сайте, в книге и рассылках: http://www.Kalashnikoff.ru/Reklama.html, Reklama@Kalashnikoff.ru
  3. Издание книги (спонсорство): Sponsor@Kalashnikoff.ru

Рассылка 'Ассемблер? Это просто! Учимся программировать (FAQ)' Рассылка 'Ассемблер? Это просто! Учимся программировать'


(C) Москва, 2001. Авторское право принадлежит Калашникову О.А. Публичное размещение материала из рассылки, а также его использование полностью или частично в коммерческих или иных подобных целях без письменного согласия автора влечет ответственность за нарушение авторских прав.


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу
Рейтингуется SpyLog

В избранное