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

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


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler (Ассемблер)

Выпуск № 518
от 16.08.2006, 06:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 332, Экспертов: 29
В номере:Вопросов: 4, Ответов: 11


Вопрос № 51696: Я бы очень хотел начать изучать Assembler, но у меня есть некоторые сомнения. Возможно вопрос будет звучать слишком глупо (я новичок в програмировании). Дело в том что я большой поклоник процессоров AMD Athlon, но насколько я слышал прогр...
Вопрос № 51738: Здравствуйте Уважаемые экперты Купила Книгу Калашникова О. "Ассемблер это просто". Сейчас дошела до листинга 3.2(Программа для практики) где как бы должна выводиться рожица на синем фоне. Но как не странно, когда я запускаю ..
Вопрос № 51744: Подскажите пожалуйста, мне нужно чтобы переход в точку входа происходил несразу, а через определенное время. Как мне это реализовать, и если можно приведите пожалуйста пример!...
Вопрос № 51765: Уважаемые эксперты! Начал изучать ассемблер с 0 (раньше имел дело только с языками высокого уровня) и сразу столкнулся с проблемой: Файл .asm не ассемблируется (не создаются файлы .obj и .com). Дело имеем с ассмблером MASM 6.11. Подробнее: Со...

Вопрос № 51.696
Я бы очень хотел начать изучать Assembler, но у меня есть некоторые
сомнения. Возможно вопрос будет звучать слишком глупо (я новичок в
програмировании). Дело в том что я большой поклоник процессоров
AMD Athlon, но насколько я слышал програмирование на Assembler
зависит от архитектуры процессора, которая я полагаю совершенно
иная чем у Intel.

Вопрос: Существует ли литература по Assembler-у написанная
специально под архитектуру AMD или же все-таки литература по Intel
справедлива и для AMD?
Отправлен: 10.08.2006, 07:09
Вопрос задал: Бржинский Николай Александрович (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Sergijj
Здравствуйте, Бржинский Николай Александрович!

Вы правы, в компьютерном мире существовало и существует несколько "ветвей" архитектур, зачастую несовместимых друг с другом. Но могу Вас успокоить: и AMD (кроме некоторых специфических) и Intel (опять же, кроме некоторых специфицеских), относятся к одной "ветке", именуемой PC ("писи") = Personal Computer ("Персональный компьютер") и поэтому процессоры обоих производителей (и некоторых других) называются PC-compatible ("ПиСи - совместимые").
Это обозначает, что эти процессоры совместимы (с точки зрения программиста) на уровне как базовой архитектуры, так и на расширениях базовой архитектуры. Они различаютя только несколькими наборами специфических инструкций, которые применяются только для некоторых сложных вычислительных задач (хотя, например, набор инструкций MMX они поддерживают оба).
Например: WinRAR "заточен" (оптимизирован) под наборы вычислительных инструкций процессора Intel, но это не значит, что на процессоре AMD WinRAR работать не будет. Это значит только то, что на процессоре Intel, при прочих равных условиях, сессия работы программы WinRAR закончится раньше, чем на процессоре AMD. А вот разные программы, использующие набор инструкций 3DNow!, будут работать быстрее на процессорах AMD.
Это не относится к _качеству_ выполнения программы. Это относится только к _скорости_. Причём выигрыш в скорости получается не настолько впечатляющим, чтобы однозначно "охотиться" за конкретными программами или процессорами. _Работать_ будет всё.
Говорить об оптимизации можно только на уровне _конкретной_ задачи.

Итого, отвечая на Ваш вопрос: Да, у этих процессоров _разные_ архитектуры на уровне транзисторов, конвейеров, кэша, но _одинаковые_ (за исключением некоторых мелких специфик) на уровне регистров, флагов, структуры памяти, обращения к "железу" и пр..., т.е. с точки зрения программиста на Assembler'е (тем более начинающего), эти процессоры - одинаковые и литература для процессоров 80x086, 80x186, 80x087, 80x187, 80x286, 80x386, 80x486, Pentium, AMD486x5, K6, K6-2, K6-3, K7, AthlonXP, PII, PIII и пр. подойдёт в основе своей для изучения всех и каждого из перечисленных процессоров (не упомянуты многие процессоры из этой ветки, информацию о них можно найти в той же литературе).

От себя рекомендую (здесь уже высказывались мнения экспертов, поэтому могу говорить не только за себя): начинать изучение Ассемблера с архитектуры процессора i80x086 и постепенно (год за годом) двигаться дальше.
И ещё, если есть в Вашем распоряжении компьютер, на котором установлен (или может быть установлен) DOS (Real mode of processor), то начинайте лучше на нём, что позволит Вам избежать глюков, подводных камней и других особенностей программирования под разные операционные системы.
---------
Стучитесь! И Вас откопают...
Ответ отправил: Sergijj (статус: 4-ый класс)
Ответ отправлен: 10.08.2006, 09:55
Оценка за ответ: 5
Комментарий оценки:
Очень подробный и детальный ответ, спасибо.

Отвечает: EPDSota
Здравствуйте, Бржинский Николай Александрович!

Оба процессора одинаковы с точки зрения арифметики...
---------
Открыть глаза навстречу солнцу
Ответ отправил: EPDSota (статус: Специалист)
Ответ отправлен: 10.08.2006, 09:58
Оценка за ответ: 3

Отвечает: Mihasic
Здравствуйте, Бржинский Николай Александрович!
В основном, у АМД и Интела общая архитектура x86, но есть некоторые отличия, касающиеся новых возможностей. Если использовать специальные средства процессоров, то по ним можно найти документацию на сайтах производителей, а вообще рекомендую писать под архитектуру 586, которая (по-моему) поддерживается всеми современными х86 процессорами. (по-умолчанию виндоус программы требуют 386, и написаны под эту платформу и совместимы со всеми типами этих процесоров, т.к. одна и та же винда работает и под Интелом и под АМД).
Как новичку, советую не заморачиваться этими вопросами, если целевая платформа х86.
Ответ отправил: Mihasic (статус: 5-ый класс)
Ответ отправлен: 10.08.2006, 11:17
Оценка за ответ: 5


Вопрос № 51.738
Здравствуйте Уважаемые экперты
Купила Книгу Калашникова О. "Ассемблер это просто".
Сейчас дошела до листинга 3.2(Программа для практики) где как бы должна
выводиться рожица на синем фоне. Но как не странно, когда я запускаю
COM файл у меня почему - то появляется черный экран, без каких либо
рожиц и символов. Т.к. я в ассемблере новичок буду признательна,если Вы
поможете мне найти ответ на этот незамысловатый вопрос.

Приложение:

Отправлен: 10.08.2006, 13:53
Вопрос задала: Старова Наталья Евгеньевна (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: newinfo2005
Здравствуйте, Старова Наталья Евгеньевна!
Этот вопрос обсуждался здесь не раз.
http://rusfaq.ru/?Step=search&ID=34964 смотрите здесь
---------
"Спасибо" - нет такой валюты.
Ответ отправил: newinfo2005 (статус: 7-ой класс)
Ответ отправлен: 10.08.2006, 15:31

Отвечает: All
Здравствуйте, Старова Наталья Евгеньевна!
Много раз это было уже.Все уже раздражены этим.
В общем нужно установить видеорежим, напишите в начале программы после begin:
mov ax,3
int 10h
Многие вопросы по этой книге можно найти в архиве
Ответ отправил: All (статус: 1-ый класс)
Ответ отправлен: 10.08.2006, 15:35

Отвечает: Басков Олег Владимирович
Здравствуйте, Старова Наталья Евгеньевна!

К своему удивлению, столкнулся с таким же вопросом после перехода с Win98 на WinXP. Выход - добавить после метки _beg команды
mov ax,3
int 10h

и всё пойдёт нормально. Эти две команды задают текстовый режим изображения 80x25, 16 цветов. При этом видеопамять оказывается как раз в сегменте 0B800.
Единственный "побочный" эффект - очистка экрана, но здесь она не помешает.

Good luck!
---------
Факультет ПМ-ПУ - лучший в СПбГУ!
Ответ отправил: Басков Олег Владимирович (статус: 1-ый класс)
Ответ отправлен: 10.08.2006, 23:34


Вопрос № 51.744
Подскажите пожалуйста, мне нужно чтобы переход в точку входа происходил несразу, а через определенное время. Как мне это реализовать, и если можно приведите пожалуйста пример!
Отправлен: 10.08.2006, 14:47
Вопрос задал: Ilya_Ivanov (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Mihasic
Здравствуйте, Ilya_Ivanov!
Вы бы уточнили...
1. Что понимается под точкой входа - запуск приложения, вызов подпрограммы, создание потока (для многозадачных ОС).
2. Какая платформа (ДОС, Виндоус...)
3. Что значит не сразу (определенная временная задержка? а чем простая пауза в начале не подойдет?).
4. Что Вы понимаете под переходом в точку входа (в т.ч. 1).

Как реализовать паузу думаю не проблема, есть много решений в зависимости от платформ ;)
Если нужен запуск программ в определенное время, то в Винде есть такое понятие как таймеры ожидания, а также, в принципе, есть планировщик...
Ответ отправил: Mihasic (статус: 5-ый класс)
Ответ отправлен: 10.08.2006, 15:07

Отвечает: Wild_one
Здравствуйте, Ilya_Ivanov!
Все равно вопрос не совсем понятен. Если реализация через Masm то в начале кода пишем invoke Sleep,100 Второй параметр задержка в милисек.
.............................
start:
invoke Sleep,100
invoke GetModuleHandle, NULL
mov mhInst, eax
..........................

Если необходимо работать прямо под асемблером то можно сделать следующее.
Грузимся в отладчике и оказываемся на EP (Entry Point -точка входа) (В качестве отладчика я юзаю OllyDbg)
Проматываем код вниз. Там всегда располагаются нули. Делаем туда JMP. И замещаем то, что стерли когда ставили JMP. В контекстном меню отладчика выбираем search for->All intermodular calls. Если там есть в списке Sleep то просто делаем двойной клик по нему. переходим к коду типа такого:

0040262A . 68 F4010000 PUSH 1F4 ; /Timeout = 500. ms
0040262F . E8 30A10000 CALL <JMP.&KERNEL32.Sleep> ; Sleep

копируем этот кусок и вставляем куда надо. Заменяя Timeout на необходимый.

Приложение:

Ответ отправил: Wild_one (статус: 2-ой класс)
Ответ отправлен: 10.08.2006, 20:27
Оценка за ответ: 5
Комментарий оценки:
Спасибо за пример в Асме! Это то что мне было нужно!!!

Отвечает: Басков Олег Владимирович
Здравствуйте, Ilya_Ivanov!

Простите, откуда вы собираетесь переходить в точку входа?
Если вы хотите, чтобы программа после двойного клика на EXE-файле запускалась не сразу, то это невозможно. Разве что добавить вызов процедуры задержки после точки входа (см. ниже)
Если переход осуществляется из программы, то перед ним вызовите следующую процедуру:

Delay PROC NEAR ;Бездельничает одну секунду
PUSH ECX
MOV ECX,1600000000 ; Частота процессора в Гц
SHR ECX,1 ;Разделить на количество тактов для выполнения команды LOOPD
;т.е. на 2 для Pentium 4
NOP ;Умножить на количество секунд задержки (здесь на 1 умножать не надо)
POP ECX
1: LOOPD @1 ;Пустой цикл, который тянет время
RET
Delay ENDP

Надеюсь, я вам помог. Счастливо!
---------
Факультет ПМ-ПУ - лучший в СПбГУ!
Ответ отправил: Басков Олег Владимирович (статус: 1-ый класс)
Ответ отправлен: 10.08.2006, 23:34


Вопрос № 51.765
Уважаемые эксперты! Начал изучать ассемблер с 0 (раньше имел дело только с языками высокого уровня) и сразу столкнулся с проблемой: Файл .asm не ассемблируется (не создаются файлы .obj и .com). Дело имеем с ассмблером MASM 6.11.
Подробнее:
Создан файл .asm (в текстовом редакторе PWB). Открываю командную строку, ввожу c:masminml.exe c:prog.asm /AT

получаю:

Assembling c:prog.asm
fatal error A1020: cannot find link.exe

Стоит отметить, что файл link.exe совершенно спокойно находится в каталоге masmin (вместе с ML.exe)

Мне посоветовали изменить system.ini, а именно добавить в него строчку device=C:MASMBINDOSXNT.386 (вроде как ассемблер может некорректно работать под Windows XP (SP2) и это должно помочь)
не помогло....

Объясните пожалуйста что происходит и что с этим делать.

На вас последняя надежда!
Отправлен: 10.08.2006, 17:19
Вопрос задал: SRT (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 5)

Отвечает: Mihasic
Здравствуйте, SRT!
Не найден link.exe, значит, что его не там "ищут", скорее всего его ищут в рабочей директории. Один из самых простых способов это прописать в переменную PATH путь этой директории.
1. Нажимаете комбинацию клавиш Win+Break (либо второй кнопкой на "Мой Компьютер" и заходите в Свойства)
2. Заходите на вкладку Дополнительно (Advanced)
3. Там кнопка "Переменные окружения" ил среды (в англ. винде "Environment Variables")
4. Ищете переменную Path и добавляете в конец строки ";C:MASMBIN" (например, было "%SystemRoot%system32;%SystemRoot%", сделайте "%SystemRoot%system32;%SystemRoot%;C:MASMBIN").
5. После этого (возможно понадобится перелогинится, но я не уверен в этом) для файлов в C:MASMBIN можете не задавать полный путь.
Ответ отправил: Mihasic (статус: 5-ый класс)
Ответ отправлен: 10.08.2006, 17:47

Отвечает: Aliasman
Здравствуйте, SRT!

Попробуйте скопировать Ваш исходник в каталог с ml/link.exe и транслировать/компановать оттуда. Это не совет, а предположение, ибо я пишу на tasm'е.
Ответ отправил: Aliasman (статус: 1-ый класс)
Ответ отправлен: 11.08.2006, 05:40


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.35 от 27.07.2006
Яндекс Rambler's Top100

В избранное