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

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


Служба Рассылок Subscribe.Ru

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

Выпуск N 142

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

Дата выхода: 2001-11-27


Вопрос №1566

И снова всем привет!
-----------------------------------------------------------
Обьясните такую фишку: "Выражения в асм. вычисляются не во время выполнения программы, а во время еЈ трансляции". Автор утверждает, что это одно из наиболее важных отличий в выражениях на асм. и выражениями на языках высокого уровня.
-----------------------------------------------------------
K EQU 30
X DB (3*K-1)/2 DUP(?); в памяти будет 44 байта
Я некогда не имел дела с дробными числами, но в данном случае программа просто его округлит (обрежет дробную часть)?
-----------------------------------------------------------
X DW 1, 2, 3, 4, 5
Y DB ?;Здесь может хранится что угодно, почему
SIZE_X EQU Y-X; SIZE_X=10?
Обьясните данное утверждение, до меня не как недойдет почему SIZE_X=10 и вообше как происходит сложение (вычетание) в данном случае (че с чем)?
-----------------------------------------------------------
Ну вРоДе ВсЕ=) .

Ответ

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

Первое. Вычисления осуществляются на этапе компиляции. соответственно содержать в себе эти выражения могут только заранее определенные значения. возможно описанные ранее с помоью equ, '=' или определенные в виде меток (которые являются адресами, и известны компилятору)

то есть нельзя написать так:

mov ax, bx + 10 * dx / 2
Такие выражения нельзя вычислить заранее и необходимо расписывать на ассемблере.

Но вполне можно написать так:
mov ax, label1 + 100h + struct_size * 4

Второе: все вычисления в компиляторе (на этапе компиляции я имею ввиду) выполняются целочисленно.
Поэтому дробная часть просто отбрасывается по законам целочисленной арифметики. 59 / 2 = 44!

Третье. по поводу вычисления SIZE_X

X и Y - это адреса в памяти, начиная с которых находятся описанные в программе строки или данные.

Я разверну немного, чтобы было понятно.

x = 0
0000 01 00 02 00 03 00 04 00 05 00

; у следует непосредственно за x то есть с адреса 10 или 0ah
y = 0a
000a ???? тут не важно что...

и если от 10 отнять 0 - ( то есть от y отнять x) то получим размер, занимаемый в памяти x-ом.


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

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

Вопрос №1568

Привет эксперты!

В общем хочу комп обновить, а тут дилема AMD или Intel. В любом случае думаю в начале хорошую мать + хреновый проц + (возможно) память, а затем проц обгрейдом.
Вопрос такой - кто чего посоветует по мамам которые в состоянии тянуть хреновый проц, а потом без проблем 1,5 потянуть.

Ответ

Здравствуйте, Devdred!
Извини что позно отвечаю - советовался
Сейчас по деньгам оптимальный выбор - 850 Селерон
Мать лушче всего брать на 815 чипсете для Интела(ничего встроеного нельзя)
или на KT133A для АМД
Можно также взять На BX, но тогда не смоешь поставить РIII, т.к. он на 133 шине, и AGP будет работать на 88, что очень не рекомендуется.
По производителям посоветую Soltek, Canion, MicroStar или более дорогое. Ни в коем случае не бери Manli!


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

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

Вопрос №1595

Прошу объясните детально что такое перепрограммируемая логическая матрица

Ответ

Здравствуйте, vicktech!
Altera то бишь...
Реально это флешка, информация в которой описывает, как соединять логические элементы, расположенные в том же корпусе.
Другими словами, у тебя там есть набор логических элементов, и способ описать КАК их соединить, при программировании ППЛМ ты каждый раз создаешь новую схему.
Настоящие железячники могут обругать меня за это описание, но по-моему для программистов я написал понятно:)
ЗЫ Предложение - как на это прореагируют эксперты - создать специальный раздел вопросника - "Наезд" - и писать туда все, что хочется высказать... А потом может делать спецвыпуски рассылки с пометкой "НАЕЗД".Обсудим?


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

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

Вопрос №1595

Прошу объясните детально что такое перепрограммируемая логическая матрица

Ответ

Здравствуйте, vicktech!
Енто цепочка програмируемых, логических интегральных схем...
программируются програматором....


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

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

Вопрос №1574

Здарово эксперты!
Трабл значит такой:
Когда жил под 98 - софтайс работал отлично, но вот пол год
назад пересел на 2К ( уже со вторым сервис паком )
так вот понадобился мне софтайс снова...дык вот глючит он терь по полной!
Когда гришь уме бутиться то оси он все клаву нахрен вешает,
а када мануалом его из виндов стартишь - то появляеться задержка перед вводом с клавы в 4 секунды
или около того...да и мышь пс/2 тоже глючит...по окошку айса летает и сама правой кнопкой кликает
Совет от нумеги не помог ( они грили, что если у тя 2К - иди качай дрова для клавы с ихнего фтп )
Вот че делать? Софтайс охото:(

Ответ

Здравствуйте, Baa!
Попробуй поставь софтайс который под НТ....


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

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

Вопрос №1565

Здрасте уважаемые эксперты.
У меня такая тема, сидюк (DVD-MATSHITA SR-8583) не читает CD-R диски, причем после энного кол-ва переустановки ОСи (т.е. когда был куплен комп CD-R читались!). Ничего не понимаю в чем может быть проблемы; дравы ставил родные и не очень, джампера не трогал. Помогите плиз, нужная инфа не могу выдрать с диска.

Ответ

Здравствуйте, VictoR!
Могет сами сд-р диски нарезаны неправильно....
какая там файловая система????
если JULIOT то должен без проблем....


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

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

Вопрос №1609

Привет всем!
Проблема!!!
Не работает переход в защищенный режим, а именно при выполнении команды вида lmsw ax;где у ax бит PE=1;
или mov cr0,eax ;PE=1
Кстати вот пример,точнее неворкающий пример, из Финогенова.
А то у вас тут какого-то визарда все дрочат не понятно из-за чего. А рассылка оживилась здорово.

Ответ

Здравствуйте, DIGiT! Это смотря где ты этот пример запускаешь ;) Если из виндов то звеняйте ;) Кстати если из доса то нужно убить нафиг все Memory Manager (как то : EMM386;QEMM) они то и недают перейти в защ.реж. (т.к. перехватывают исключения происходящие при этом :()


Отправил эксперт: Bart Simpson
Эксперт отправил ответов (всего): 13

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

Вопрос №1611

Уважаемые эксперты! Меня давно уже мучат 2 вопроса:

1. Справедливо ли следующее утверждение: "Видеокарточка, которая "AGP 4X supported" НЕ работает на матерях "AGP 2X supported". Если справедливо, то:

а). Почему у меня POST прошел успешно, винды грузанулись, нашлись драйвера, все как нада, restart и .... все аж в 16 цветах при 640х480!!! Все нормально работает в этом режиме. Меня это, понятное дело, не очень устраивало,. 32 бита в настройках теоретически ползунком можно надвинуть, но после Restart-а винды все "в черном" и комп ни на что не реагирует...
Это глюка винды (в то время были некоторые проблемы) или просто видеокарточка у меня работала потому, что все карточки "для совместимости" поддерживают старые адреса видеостраниц и т.п.????!!!! Ответьте, ато я перед диллемой: хочу видеокарточку прикупить, и придется наверно брать 2X, которых почти ниде нет уже и вообще не очень то уж и нада чтоб они были!!!! и сразу отсюдава б):
б). Какая 2Х видюха самая наикрутейшая (по показателям) из всех??? и в):
в). Отчего вообще такая хрень с AGP? Втыкал в "разрядность шины" 2Х и 4Х но с этой точки зрения вообще вроде все должно работать...

Варианты типа: "поменяй мать (и проц туда же)" рассматриваться не будут! ;(
Спасибо.

Ответ

Так какая ты говоришь у тебя видеокарта ? :)


Отправил эксперт: Bart Simpson
Эксперт отправил ответов (всего): 14

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

Вопрос №1611

Уважаемые эксперты! Меня давно уже мучат 2 вопроса:

1. Справедливо ли следующее утверждение: "Видеокарточка, которая "AGP 4X supported" НЕ работает на матерях "AGP 2X supported". Если справедливо, то:

а). Почему у меня POST прошел успешно, винды грузанулись, нашлись драйвера, все как нада, restart и .... все аж в 16 цветах при 640х480!!! Все нормально работает в этом режиме. Меня это, понятное дело, не очень устраивало,. 32 бита в настройках теоретически ползунком можно надвинуть, но после Restart-а винды все "в черном" и комп ни на что не реагирует...
Это глюка винды (в то время были некоторые проблемы) или просто видеокарточка у меня работала потому, что все карточки "для совместимости" поддерживают старые адреса видеостраниц и т.п.????!!!! Ответьте, ато я перед диллемой: хочу видеокарточку прикупить, и придется наверно брать 2X, которых почти ниде нет уже и вообще не очень то уж и нада чтоб они были!!!! и сразу отсюдава б):
б). Какая 2Х видюха самая наикрутейшая (по показателям) из всех??? и в):
в). Отчего вообще такая хрень с AGP? Втыкал в "разрядность шины" 2Х и 4Х но с этой точки зрения вообще вроде все должно работать...

Варианты типа: "поменяй мать (и проц туда же)" рассматриваться не будут! ;(
Спасибо.

Ответ

Здравствуйте, Broken Sword!
Да ты шо, кто тебе такое сказал? Стандарт AGP4x обратно совместим с стандартом AGP2x , если это никому ни о чем не говорит - на старую маму на BX'е c слотом AGP2x можно поставить любые AGP-видюхи вплоть до GeForce3. Любая видеокарточка обязана уметь работать во всех версиях AGP(1x,2x,4x), будь то автоопределение или переключение режима с помощью перемычек. Но главная прелесть в том , что переходя с AGP 4x на AGP 2x, ты практически ничего не теряешь - пропускной способности AGP 2x хватает и по сей день, некоторые конечно трясутся даже из-за 1-2 fps... Так, что можешь не ограничивать свой выбор картами для AGP2x.


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

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

Вопрос №1608

Здравствуйте уважамые Эксперты!
Странно... Задавал вопрос, вроде в базу ушел - и ни ответа ни привета... Видимо по проводам размазался ;) Ну тогда если не возражаете я его повторю:
1. Многие вири садясь резидентами в память перехватывают прерывание(я) просто корректируя таблицу векторов - ну это все знают. В одной книженции вычитал что для того чтобы никакой вирь не смог сесть в память резидентно необходимо и достаточно перед запуском подозрительной проги сохранять таблицу векторов а после выполнения подозрительной проги - восстанавливать ее. Но ведь многие вири не свой обработчик назначают а врезаются в существующий, например длинным межсегментным CALL'ом! Как в таком случае обезопаситься? Сохранять и таблицу и сами обработчики в виде двоичного файла? Ну, просьба такая - киньте простенький пример как именно врезаться в обработчик не сильно калеча его. А то теорию-то знаю а вот практически...
2. Ковыряя дизасмом один вирь (Win32.Aliz) наткнулся на команду CALL EBX. Как в данном случае работает CALL? Выполнение участка проги или чего-то там по значению смещения в EBX? Или как-то еще?
З.Ы. Тут я еще много писал насчет помирания рассылки, все повторять не буду а то длинно получается, скажу суть - рассылка жила, жива и будет жить, как великое Дело Ленина ;) Вот только подняли вопрос убить реальный режим и отвечать на вопросы только о защищенном... Мне грустно, я плакалъ, так как еще толком в реале освоится не могу - что ж, на полпути бросать ? Неохота как-то...
С уважением, Диман

Ответ

Здравствуйте, Диман!
1. Вообще пример писать лень (а скорее просто не все получится...), могу полить теории:
Все это довольно сложно (сохранить ВСЕ обработчики); С адресами - тут все просто. Проблема вот в чем: ты знаешь адрес в памяти, по которому точно начинается обработчик, но где ж его финиш??? Ведь ты заранее не знаешь даже размера обработчика!!!! А УЧИТЫВАЯ ТО, СКОЛЬКО CALL-ов и JMP-ов в самом простеньком обработчике (ведь умный вирь же не будет тебе сидеть в начале обработчика и ждать тебя, а преспокойно пропишется где-то по тринадцатому и тридцать второму CALL-у. Так что придется делать полный дамп первого мега оперативы (обработчики вообще большие любители раскидаться позаковыристей в адресном пр-ве первого мега...) Видишь проблему??? Я да - у тебя не будет работать НИ ОДНА ПОРЯДОЧНАЯ РЕЗИДЕНТНАЯ ПРОГА!!! ;)
Конкретный вирь - это да, тут ты заранее можешь знать все его адреса прописки, и сохраняешь что-то вполне конкретное... Вообще это все из серии "форматировать винт" и "очищать всю память" перед каждым запуском проги с сохранением на дискетку и последующим восстановлением... Это панацея от всех резидентных и нерезидентрых вирусов, так что лучше забудь... хотя идейка неплохая сама по себе, у ней может есть будущее...

2. Прошу больше никогда не задавать вопросов типа: а что будет если вот такая команда... ;( !!!! Ну так у тебя же комп то зачем то и стоит дома!!!! Или только для того чтобы вопросы задавать??? Может проблемы с отладчиком??? у тебя его нет?? тода извини... постой! как же ты ее тода вообще заприметил то??? да.... все ясно! Ладна, это я так... к слову пришось ;) На самом деле так и есть: происходит jmp на адрес, который в ebx-е находится (и ты думаешь, я это знал??? все отладчик - великая вещь скажу я тебе!!)

Пиши! )


Отправил эксперт: Broken Sword
Эксперт отправил ответов (всего): 218

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

Вопрос №1611

Уважаемые эксперты! Меня давно уже мучат 2 вопроса:

1. Справедливо ли следующее утверждение: "Видеокарточка, которая "AGP 4X supported" НЕ работает на матерях "AGP 2X supported". Если справедливо, то:

а). Почему у меня POST прошел успешно, винды грузанулись, нашлись драйвера, все как нада, restart и .... все аж в 16 цветах при 640х480!!! Все нормально работает в этом режиме. Меня это, понятное дело, не очень устраивало,. 32 бита в настройках теоретически ползунком можно надвинуть, но после Restart-а винды все "в черном" и комп ни на что не реагирует...
Это глюка винды (в то время были некоторые проблемы) или просто видеокарточка у меня работала потому, что все карточки "для совместимости" поддерживают старые адреса видеостраниц и т.п.????!!!! Ответьте, ато я перед диллемой: хочу видеокарточку прикупить, и придется наверно брать 2X, которых почти ниде нет уже и вообще не очень то уж и нада чтоб они были!!!! и сразу отсюдава б):
б). Какая 2Х видюха самая наикрутейшая (по показателям) из всех??? и в):
в). Отчего вообще такая хрень с AGP? Втыкал в "разрядность шины" 2Х и 4Х но с этой точки зрения вообще вроде все должно работать...

Варианты типа: "поменяй мать (и проц туда же)" рассматриваться не будут! ;(
Спасибо.

Ответ

Здравствуйте, Broken Sword!
Предварительный ответ, полный будет завтра...
1.Вообще-то работают...
Проблемы с дровами, как бороться, сообщу позже
А совет такой-купи Voodoo 3 - она круче TNT, примерно как GeForce2 MX200, а то и Noname MX400


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

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

Вопрос №1614

Ребята, может быть я чегото недопонял, но я подписывался на рассылку "АССЕМБЛЕР" - а получаю в каждом письме кучу хлама - о том, как перемножить матрицы на ПАСКАЛЕ, или ввести и просумировать элементы массива на БЭЙСИКЕ, или как выправить "ногу" в разъеме винта... (примеры из последней рассылки)
Я нечего не имею против как самих вопросов, так и авторов этих вопросов, но (обращаюсь к авторам вопросов) имейте совесть - отсылайте такие вопросы в соответствующие форумы или рассылки или еще куда-нибудь. И (обращаюсь к экспертам) не проще-ли оставлять такие вопросы без ответа. Может быть тогда такие вопросы перестанут попадать в эту рассылку. Хотя может быть (обращаюсь к читателям рассылки) эксперты гонятся за балами?
Очень грусно, а вам (обращаюсь ко всем)

P.S. Учите русский язык - как в плане граматики, так и в плане синтаксиса.

P.P.S. Собираюсь получать эту рассылку еще несколько номеров... (и то, перебарывая острое желание поплеваться и отписаться от нее) а там видно будет...

Ответ

Здравствуйте, mr. Botsman!
Ты когда писал вопрос, выбирал тему, так вот, там есть и вопросы по железу, а по поводу Паскаля либо Бейсика-людям помощь нужна. а экспертам тоже типа не в лом ...
А по Паскалю или Бейсику таких рассылок нету в природе


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

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

Вопрос №1614

Ребята, может быть я чегото недопонял, но я подписывался на рассылку "АССЕМБЛЕР" - а получаю в каждом письме кучу хлама - о том, как перемножить матрицы на ПАСКАЛЕ, или ввести и просумировать элементы массива на БЭЙСИКЕ, или как выправить "ногу" в разъеме винта... (примеры из последней рассылки)
Я нечего не имею против как самих вопросов, так и авторов этих вопросов, но (обращаюсь к авторам вопросов) имейте совесть - отсылайте такие вопросы в соответствующие форумы или рассылки или еще куда-нибудь. И (обращаюсь к экспертам) не проще-ли оставлять такие вопросы без ответа. Может быть тогда такие вопросы перестанут попадать в эту рассылку. Хотя может быть (обращаюсь к читателям рассылки) эксперты гонятся за балами?
Очень грусно, а вам (обращаюсь ко всем)

P.S. Учите русский язык - как в плане граматики, так и в плане синтаксиса.

P.P.S. Собираюсь получать эту рассылку еще несколько номеров... (и то, перебарывая острое желание поплеваться и отписаться от нее) а там видно будет...

Ответ

Здравствуйте, mr. Botsman!Эита рассылка общая, как собственно и все остальные, многие ламеры просто не глядя подписывают себя неизвестно куда


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

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

Вопрос №1564

Здравствуйте уважаемые эксперты!
Есть у меня к вам несколько вопросов!
1) "в компьютерах с процессорами Intel все данные хранятся так, что младший байт находится по младшему адресу"
У меня процессор AMD Thunderbird, а данные храняться точно так же, к чему бы это?
2) Объясните пожалуйста, влияет ли изменение в программе, которое я сделал, на объем занимаемой памяти(программой при ее выполнении) и быстродействие?
Я так думаю, что выделяя под переменную pck_bcd 2 байта в место 4-х, программа должна в памяти меньше места занимать, прав ли я?
3) К эксперту Broken Sword. Увидел в одной из рассылок, что для ДОС-а вы советовали в качестве отладчика AVPUTIL. Не могли бы вы мне его прислать.
ilya.div@nm.ru. Заранее спасибо всем!

Ответ

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

1. Более правильное выражение не "с процессорами Intel", а "с процессорами, построенными на архитектуре x86". Потому как хранение данных описывается не производителем процессора, а его архитектурой. Так вот, согласно архитектуре x86 многобайтные данных хранятся в памяти по принципу "младший байт - по младшему адресу". И это будет справедливо для любого процессора от 8088 до Pentium ля-ля-ля независимо от производителя. В т.ч. и для вашего AMD.

2. Боюсь, что ваше исправление неправильное. Т.к. в самой программе обращение к данным выполняется по команде
shld dword ptr pck_bcd, eax, 4
, т.е. процессор ожидает "увидеть" 4 байта данных, а вы ему даете только 2. В оставшихся двух байтах будет "мусор", в т.ч. может оказаться и 0. Поэтому работа программы не будет стабильной.


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

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

Вопрос №1610

Здравствуйте эксперты!
Стоит задача программирования однокристального процессора семейства Z80 фирмы Zilog, однако ощущается сильный недостаток средств программирования. Точнее кроме ассемблера и линкера ничего нет. Никаких средств отладки. Если кто-нибудь работал с такими процессорами и может чем-нить помочь, буду очень благодарен.
Заранее спасибо за уделённое внимание!

Ответ

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

Нельзя ли подробнее насчет процессора, машины и ОС, на которых это все должно крутиться?
У меня есть программка xdbg.com - это деббагер для MSX DOS 1.0. Точно работала на машинке Yamaha MSX-II.


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

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

Вопрос №1614

Ребята, может быть я чегото недопонял, но я подписывался на рассылку "АССЕМБЛЕР" - а получаю в каждом письме кучу хлама - о том, как перемножить матрицы на ПАСКАЛЕ, или ввести и просумировать элементы массива на БЭЙСИКЕ, или как выправить "ногу" в разъеме винта... (примеры из последней рассылки)
Я нечего не имею против как самих вопросов, так и авторов этих вопросов, но (обращаюсь к авторам вопросов) имейте совесть - отсылайте такие вопросы в соответствующие форумы или рассылки или еще куда-нибудь. И (обращаюсь к экспертам) не проще-ли оставлять такие вопросы без ответа. Может быть тогда такие вопросы перестанут попадать в эту рассылку. Хотя может быть (обращаюсь к читателям рассылки) эксперты гонятся за балами?
Очень грусно, а вам (обращаюсь ко всем)

P.S. Учите русский язык - как в плане граматики, так и в плане синтаксиса.

P.P.S. Собираюсь получать эту рассылку еще несколько номеров... (и то, перебарывая острое желание поплеваться и отписаться от нее) а там видно будет...

Ответ

Здравствуйте, mr. Botsman!
1. Рассылка отнюдь не только по Ассемблеру, собственно состоит она из
нескольких разделов, а соостветственно групп экспертов, охватывающих
те или иные аспекты компьютера, как то: программирование на Асме,
пользовательская работа с Windows, Модели, типы компьютеров и т.д.
2. Рассылка не становится хуже от того, что в ней находятся несколько
разделов, но она в прямом смысле засерается такими "вопросами",
подобными вашим. Вы поймите, сейчас эксперты опять подогреются на
вашем вопросе и выльют в рассылку огромную кучу никому не нужного
базара, это из-за того , что кто-то не знал структуры рассылки. И в
следующий раз вам придет рассылка, в которой не то что по Асме, там и
по Паскалю, и по Виндозу ничего не будет, зато будут полноформатные
ответы на ваш "вопрос".

P.S. Считаю, что всё-таки прежде всего эксперт должен быть экспертом,
а не искушенным знатоком русского языка (хотя конечно и то и другое
намного лучше ;) Ну что ж если уж вы так желаете, то пора бы открыть
рассылку для экспертов по освоению некогда забытого со школы Великого
и Могучего, только кто тогда будет на вопросы отвечать.
P.S.S. А подписываться, на рассылку - это уж ваше личное право, и не
надо заострять на этом наше внимание.


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

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

Вопрос №1610

Здравствуйте эксперты!
Стоит задача программирования однокристального процессора семейства Z80 фирмы Zilog, однако ощущается сильный недостаток средств программирования. Точнее кроме ассемблера и линкера ничего нет. Никаких средств отладки. Если кто-нибудь работал с такими процессорами и может чем-нить помочь, буду очень благодарен.
Заранее спасибо за уделённое внимание!

Ответ

Здравствуйте, Shein!
Сходи на Z80.Ru, там в разделе софт, есть даже софт для PC с Ассемблером Z80 - для Спекки!!! Или на Spectrum.ru zx.da.ru!


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

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

Вопрос №1615

Привет всем!
Возможно совсем глупый вопрос, но все же..
Есть програмка, которая каждый РОВНЫЙ (это важно) час играет музыку. Ну у каждого, наверное, есть?? Имеется в виду под DOS. Висит она резидентой и каждый тик таймера проверяет в адресе 0040:006С. По этому адресу расположено слово, где хранится общее количество тиков с момента СБРОСА (тоже важно). Слово это расположено в области данных BIOS.
Так вот мучает меня вопрос: КТО, КОГДА и КАК инициализирует это слово в BIOSe, ведь я могу сброситься в любое время, и прогу запустить в любое, почему же тогда она играет в 00 минут? Ну, то есть, я хочу сказать, что если я запущусь, допустим, в 16:14 то для нашего музыкального резидента точка отсчета будет 16:14, и играть он вроде бы должен каждый час в 14 минут. Можно значит предположить, что при перезагрузке в какой-то момент времени 0040:006С инициализируется данными из CMOS. Так КОГДА ЖЕ, КОГДА…..???
С уважением Вал.Ик.
P.S. Огромнейшее спасибо всем экспертам за ответы на мои вопросы, прошу прощения за свой гон на экспертов в рассылке, ответами, просто таки, забросали…..

Ответ

Здравствуйте, Вал.Ик.!
Я так понимаю, что по этому адресу висит количество тиков не от сброса проца, а от полуночи, так как в полночь он опять инициализируется, а настраивается это дело скорей всего по запуску биоса


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

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

Вопрос №1616

Здравствуйте уважаемые эксперты!
Покажите, пожалуйста, как стереть первые 1024 байта оперативки.

Ответ

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

А зачем? Между прочим, там таблица прерываний живет!
А если от всего этого отвлечься, то как-нибудь так:

xor ax, ax
mov es, ax
mov di, ax ; es:di = 0:0
mov cx, 1024/2
cli
rep stosb
sti ; и не более чем через 1/18.2 с все умерло! :)


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

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

Вопрос №1617

Народ что делает эта прога?
Если можно в общих чертах.
Поподробнее про последние 4 строки.

Спасибо.

Ответ

Здравствуйте, Владимир!

Вообще-то после
mov ax, 4cff
int 21h

больше ничего не выполниться! Это - завершение текущей программы.
А вообще, она выводит строку с адреса 0eh до символа '$' (почему-то в листинге ее не видно).



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

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

Вопрос №1616

Здравствуйте уважаемые эксперты!
Покажите, пожалуйста, как стереть первые 1024 байта оперативки.

Ответ

Здравствуйте, Kostia!
Интересно, куда ты их собрался стирать??? Комп уснет мертвым сном!!! И не вздумай там лазить даже!!! Первый же "тик" таймера все завесит! Ишь чего надумал!!! Ни ни! Итак дрожишь чтоб ни дай бог никакая хрень не попала в обработчик, а он - стереть все подчистую!!! Насмешил однако ты меня... ;(



Отправил эксперт: Broken Sword
Эксперт отправил ответов (всего): 219

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

Вопрос №1617

Народ что делает эта прога?
Если можно в общих чертах.
Поподробнее про последние 4 строки.

Спасибо.

Ответ

1. Здравствуйте,
2. Сначала выводит строку по смещению 000Eh от начала сегмента кода. Там обычно храниться адрес обработчика int 23h (нажатие Ctrl+Break). Зачем он это делает - я объяснить не в состоянии (более того, ближайший 24h (код $ - конец строки) - х. знает где, т.ч. именно этот кусок в этом самом месте конкретно глюканет. Не знаю, шли всю прогу чтоли, т.к. 100% что перед вызовом int 21h в этом месте прогой были изменены байты по этому адресу (000Eh) - выводиться какое-то послание.
3. Потом обычный выход по 4Ch-ф-ции 21h прерывания.
4. На последние байты вообще не обращай внимания. Это и вовсе не команды (не всё в асме команды, что данные, ну и наоборот...) Это просто кусок-обрывок предложения (я его даже расшифровал ;) ) - "Win32 on...".
Вот если б это была крутая прога - типа мало того что послание зашифровано какое-нить кульное, так еще и к тому же при исполнении ченить полезное творит теми же байтами - это и есть то, к чему нам всем здесь нада стремиться!!! ;)

p.s. отдельное спасиба: Sensey, DivX, AllAddIn, Bart Simpson (уж кто помог так этот!).


Отправил эксперт: Broken Sword
Эксперт отправил ответов (всего): 220

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

Вопрос №1617

Народ что делает эта прога?
Если можно в общих чертах.
Поподробнее про последние 4 строки.

Спасибо.

Ответ

Здравствуйте, Владимир!
Как я вогнал последние 4 строки вообще ничего не делают, т.к. передними вызывается функция дос завершить программу (4с).


Отправил эксперт: Painbringer (http://limanski.narod.ru - нечто наподобие домашней страницы)
Эксперт отправил ответов (всего): 253

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

Вопрос №1619

Здравствуйте эксперты!
Объясните пожалуйста назначение этих команд LDS/LES/LFS/LGS/LSS, если можно с примерами(для последующего исследования в отладчике) их использования, а то никак не дойдет их смысл.
Заранее спасибо!

Ответ

Здравствуйте, ILYA!
Загрузка соответствующего сегментного регистра . Тока для 386 и старше. Т.е. ds,es,fs и т.д.
Например
mov ax,0b800h
les ax
для дальнейшего вывода символа


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

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

Вопрос №1616

Здравствуйте уважаемые эксперты!
Покажите, пожалуйста, как стереть первые 1024 байта оперативки.

Ответ

Здравствуйте, Kostia!
Как как, а вот так.
mov cx,512
xor si,si
mov es,si
metka:
mov word ptr es:[si],0
add si,2
loop metka
Тока спрашивается пофига.


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

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

Вопрос №1615

Привет всем!
Возможно совсем глупый вопрос, но все же..
Есть програмка, которая каждый РОВНЫЙ (это важно) час играет музыку. Ну у каждого, наверное, есть?? Имеется в виду под DOS. Висит она резидентой и каждый тик таймера проверяет в адресе 0040:006С. По этому адресу расположено слово, где хранится общее количество тиков с момента СБРОСА (тоже важно). Слово это расположено в области данных BIOS.
Так вот мучает меня вопрос: КТО, КОГДА и КАК инициализирует это слово в BIOSe, ведь я могу сброситься в любое время, и прогу запустить в любое, почему же тогда она играет в 00 минут? Ну, то есть, я хочу сказать, что если я запущусь, допустим, в 16:14 то для нашего музыкального резидента точка отсчета будет 16:14, и играть он вроде бы должен каждый час в 14 минут. Можно значит предположить, что при перезагрузке в какой-то момент времени 0040:006С инициализируется данными из CMOS. Так КОГДА ЖЕ, КОГДА…..???
С уважением Вал.Ик.
P.S. Огромнейшее спасибо всем экспертам за ответы на мои вопросы, прошу прощения за свой гон на экспертов в рассылке, ответами, просто таки, забросали…..

Ответ

Здравствуйте, Вал.Ик.!
В смысле если она после перезагрузки делает свое подлое дело, то значит использует резервные байты CMOS'а


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

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

Вопрос №1615

Привет всем!
Возможно совсем глупый вопрос, но все же..
Есть програмка, которая каждый РОВНЫЙ (это важно) час играет музыку. Ну у каждого, наверное, есть?? Имеется в виду под DOS. Висит она резидентой и каждый тик таймера проверяет в адресе 0040:006С. По этому адресу расположено слово, где хранится общее количество тиков с момента СБРОСА (тоже важно). Слово это расположено в области данных BIOS.
Так вот мучает меня вопрос: КТО, КОГДА и КАК инициализирует это слово в BIOSe, ведь я могу сброситься в любое время, и прогу запустить в любое, почему же тогда она играет в 00 минут? Ну, то есть, я хочу сказать, что если я запущусь, допустим, в 16:14 то для нашего музыкального резидента точка отсчета будет 16:14, и играть он вроде бы должен каждый час в 14 минут. Можно значит предположить, что при перезагрузке в какой-то момент времени 0040:006С инициализируется данными из CMOS. Так КОГДА ЖЕ, КОГДА…..???
С уважением Вал.Ик.
P.S. Огромнейшее спасибо всем экспертам за ответы на мои вопросы, прошу прощения за свой гон на экспертов в рассылке, ответами, просто таки, забросали…..

Ответ

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

Помоему модификацией этого счетцика занимается обработчик прерывания 8. А почему резидент играет ежечасно - то скорее всего он не пользуется этим счетчиком. просто он регулярно вызывается (через то же прерывание таймера и проверяет системное время. (я так думаю)


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

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

Вопрос №1619

Здравствуйте эксперты!
Объясните пожалуйста назначение этих команд LDS/LES/LFS/LGS/LSS, если можно с примерами(для последующего исследования в отладчике) их использования, а то никак не дойдет их смысл.
Заранее спасибо!

Ответ

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

adr:
dw offset, segment


prog:
les di, adr

в результате es = segment, di = offset

Аналогично и все остальные сегменты.


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

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

Вопрос №1619

Здравствуйте эксперты!
Объясните пожалуйста назначение этих команд LDS/LES/LFS/LGS/LSS, если можно с примерами(для последующего исследования в отладчике) их использования, а то никак не дойдет их смысл.
Заранее спасибо!

Ответ

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

А что здесь непонятного? Вот что написано в Tech Help:

LEA reg16,addr load address into a register
reg16 <- (result of EA calculation of addr offset)

LDS reg16,mem load DS and reg16 from memory variable
reg16 <- [mem16]; DS <- [mem16+2]
LES reg16,mem load ES and reg16 from memory variable
reg16 <- [mem16]; ES <- [mem16+2]
LFS reg16,mem load DS and reg16 from memory variable
reg16 <- [mem16]; FS <- [mem16+2]
LGS reg16,mem load ES and reg16 from memory variable
reg16 <- [mem16]; GS <- [mem16+2]
LSS reg16,mem load SS and reg16 from memory variable
reg16 <- [mem16]; SS <- [mem16+2]

А действует это так.
LEA - вычисляется эффективный адрес выражения, заданного вторым операндом, и результат загружается в регистр, указанный первым операндом.

LDS/LES/LFS/LGS/LSS - из ячейки памяти (двойное слово) по адресу, указанному вторым операндом, считывается значение. Младшее слово загружается в указанный первым операндом регистр, старшее - в соответствующий сегметный регистр.

Вот, собственно, и все.


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

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

Вопрос №1624

До простят меня все присуцтвуюшие за вопрос вне темы!Увожаемый Painbringer, благодарю за ответ по Сям!
Но я весь день вчера долбался..., передолбался..., но нечго не работает, а скоро надо здавать работу... .
-----------------------------------------------------------
#include
#include
#include
void main()
{
randomize( );
printf ("%d ", rand ( ));
}
------------------------------------------------------------
Компилятор выдает такие ошибки:
--------------------Configuration: 123 - Win32 Debug--------
Compiling...
123.c
c:\myp\си\123\123.c(6) : warning C4013: 'randomize' undefined; assuming extern returning int
Linking...
123.obj : error LNK2001: unresolved external symbol _randomize
Debug/123.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

123.exe - 2 error(s), 1 warning(s).
------------------------------------------------------------
Буду благодарен за любую помошь!
P.S.Надеюсь меня за офтопик не побьют:))

Ответ

Здравствуйте, Alex!
Не понятно, что у тебя не работает..
Точней, что за #include без имен заголовочных файлов
Держи прогу, которая работает

Приложение:


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

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

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

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

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


Ваше имя *:

Ваш e-mail *:

Подгруппы:

Вопрос *:

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


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

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


Управляющий рассылкой,

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

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


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


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

В избранное