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

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


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

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

Выпуск № 580
от 22.10.2006, 17:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 358, Экспертов: 37
В номере:Вопросов: 3, Ответов: 6


Вопрос № 59130: Помогите разобраться с выполнением проги на acмe: 1)У какой программы-ассемблера не возникает проблем с линковщиком,потому что имеются версии MASM'a: MASM 5.1 и MASM 32 2)На MASM 5.1 я пытаюсь выполнить прогу из приложения рассылки Калашн...
Вопрос № 59138: Привет экспертам! Как создать программу на ассемблере, которая запрашивает 2 числа в двоичной системе счисления, а потом выводит на экран их сумму? Было бы хорошо, если проводилась проверка на корректность ввода данных. P.s ассемблер под ...
Вопрос № 59165: Приветствую уважаемых экспертов. хотел спросить очень важную вешь именно у Вас. что вы посоветуете читать по ассемблеру, после прочтения книги О.А Калашникова? а так же хотелось бы узнать у Вас как у профессионалов и людей явно имеющего богатый о...

Вопрос № 59.130
Помогите разобраться с выполнением проги на acмe:
1)У какой программы-ассемблера не возникает проблем с линковщиком,потому что имеются версии MASM'a:
MASM 5.1 и MASM 32
2)На MASM 5.1 я пытаюсь выполнить прогу из приложения рассылки Калашникова "Ассемблер? Это просто!":

org 100h

mov ah, 9
mov dx, Message
int 21h

int 20h

Message db 'Hello, world!$'

Для выполнения этой проги на MASM 6.11 нужно написать:

ML.exe Название.asm /AT

Что нужно,чтобы этот код выполнился на MASM32

3)Для выполнения этой же проги на MASM 5.1 нужно написать:
MASM.exe Название.asm,а затем
Link.exe Название.asm /T -НО после первой строчки на экран выдаётся:

Object filename [Название.obj]: 1)
Source listing [NUL.LST]:
Cross-reference [NUL.CRF]:

В этих 3 строчках я давал свои названия с указанным расширением
названия без расширений,названия по умолчанию,указывал полный путь
к этим файлам-ничего не помогает-выдаётся вот эта фигня:

error A2062:Missing or unreachable CS
47152 + 446396 Bytes symbol space free

0 warning Errors
1 Severe Errors

4)Что это за ошибка-fatal error LNK1190: invalid fixup found, type 0*00001(на MASM32)?

5)Я чё-то не догнал:
ASCII выдаётся 1 байт или каждому символу и почему?

6)Я недавно прочитал:
"Когда компы были 16-битными,процессор не мог работать с памятью размером более 64 килобайт
(максимум,что можно записать в 2 байта)"-но как же можно в 2 байта записать 64 килобайт?



Отправлен: 16.10.2006, 17:14
Вопрос задал: Xtreme (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Вiктор
Здравствуйте, Xtreme!
1) (не уверен) Есть ОС ДОС, а есть ОС виндовс. ДОС - 16-битная система, виндовс (с вин95 вроде бы)- 32-битная система. Формат исполняемых файлов ДОС - *.ехе и *.сом. Формат исполняемых файлов виндовс - *.ехе. Масм 5.1 делает программы для доса и виндовс, а масм 32 только для виндовс.
В досовском ехе-файле есть досовский MZ-заголовок и 16-битный код.
в виндовском ехе-файле есть досовский MZ-заголовок и 16-битный код, который выводит на экран "Эта программа работает в виндовс", виндовский PE-заголовок и виндовский 32-битный код (это очень упрощённо), поэтому виндовские и досовские ехе-файлы создаются немного по-разному.
2) (не уверен) масм 32 не может создать *.сом файл, он для этого не предназначен.
3) Линковщику надо кормить не асм-файл, а оbj-файл, т.е.
Link.exe Название.obj
ведь масм специально для вас делает obj файл, чтобы вы его передавали линковщику.
4) не знаю. возможно неправильный адрес или неправильная метка.
5) байт - это единица памяти, которая может содержать одно из 256 значений.
ASCII - это такая таблица, в которой каждому символу соответствует номер. Эта таблица стандартизирована. В таблице 2 части, основная и дополнительная. Основная - 0..127 (латинские буквы, цифры), дополнительная - 128..255 (псевдографика, местный алфавит, например кирилица), т.е. полностью таблица - 256 значений. Если в ASCII -таблице на 65-м месте стоит буква "A", значит ASCII код большой латинской "A " равен 65 (Р. S. нумерация в таблице с нуля).
Таким образом, число, содержащееся в байте, можно рассматривать как символ в ячейке таблицы под номером, равным значению байта. (запутал, да?)
6) 2 байта = 16 бит. Это соответствует 65536 возможным числам (2^16).
Чтобы работать с памятью, комп должен иметь возможность обратиться к каждому байту. Если адрес задаётся 16-тью битами, то может быть всего 655536 разных адресов, т.е. комп с 16-битной адресацией может обратиться только к 65536 байтам своей памяти. 65536 байт = 64 Кбайт (1 Кбайт = 1024 байт)
т.е. в 2 байта "влазит" АДРЕС одной из 64 Кб ячеек памяти.

---------
можно ли считать баги двигателем прогресса, если учесть, что они заставляют улучшать программы?
Ответ отправил: Вiктор (статус: 7-ой класс)
Ответ отправлен: 16.10.2006, 19:59

Отвечает: Pinkbyte
Здравствуйте, Xtreme!

Прога из рассылки Калашникова будет корректно обработана MASM 6.x! Masm 5 ее не скомпилирует!
---------
Нейтральность - высшее достижение сознания
Ответ отправил: Pinkbyte (статус: 2-ой класс)
Ответ отправлен: 19.10.2006, 15:49

Отвечает: Луковкин Николай Иванович
Здравствуйте, Xtreme!
1. После написания программы в текстовом редакторе:
а) для создания obj.файла в командной строке редактора необходимо набрать и нажать ОК:
для MASM - ml/c l1.asm (где l1.asm - название Вашей программы в текстовом формате)
б) для создания exe.файла
link l1.obj
2. Вот как я устанавливал MASM на свой ПК:
2.1. В текстовый редактор (я пользуюсь оболочкой FAR, что и Вам советую) установил (скопировал) все файлы компилятора MASM;
2.2. Теперь нам необходимо указать путь к компилятору (у меня OS Windows XP 2SP), для этого делаем следующее:
Панель управления->Система->Дополнительно->Переменные среды, где пишем:
path=%path%;c:myasmin
Чтобы это вступило в силу - перезагружаем ПК
P.S. 1.Текстовый редактор и компилятор MASM желательно установить в корневой каталог диска С:
2.3. Если у Вас другая OS(Windows95,98,Millennium), то эту фразу необходимо написать в файле autoexec.bat
2.4.Теперь нам необходимо создать командный файл, в котором содержатся команды программы-ассемблера. Для этого открываем папку BIN компилятора MASM и в командных файлах(открываем их)amake.bat,cmake.bat,dmake.bat,wmake.bat - пишем фразу
path=c:myasmin
Чтобы это вступило в силу - перезагружаем ПК.
2.5. Ну вот теперь наш Ассемблер готов к работе:
Пишем прогу в текстовом редакторе, проверяем ее (чтобы не было ошибок), сохраняем как l1.asm, после чего в командной строке редактора набираем:
amake l1(если прогу писал в среде Windows),нажимаем Enter и файл ехе. у нас готов (я повторяю еще раз, если при написании программы мы не совершили ошибки)
cmake l1 - для создания com.файла в среде DOS
dmake l1 - для создания ехе.файла в среде DOS
wmake l1 - для создания оконной программы в среде Windows.
3. Для представления всех букв, цифр и знаков появляющихся на экране монитора, используется всего 1(один) байт.
Пример:
Dec Hex Binary
буква D 68 44 01000100 (видишь - всего один байт)
? 63 3f 00111111 (то же - всего один байт)
@ 64 40 01000000 (то же - один байт)
и так все символы таблицы ASCII
4. dx,ax,bx,cx и т.д. - 16-битовый регистр и может содержать всего 65 536 различных адресов, что очень мало даже для такой старой системы как DOS. Почему же DOS не использует 32-битные регистры? Потому, что в процессорах - современниках DOS их просто не было!
Перед разработчиками встал выбор: либо обречь процессор на работу с 65 535 байтами, либо записывать адрес в двух регистрах. Был выбран второй вариант. Решили организовать память в виде СЕГМЕНТОВ, каждый из которых содержит 64 килобайта памяти!
Желаю удачи в изучении Ассемблера!
---------
Главным критерием эффективности того или иного пути может служить лишь то, достиг или нет крекер конечного результата!!!
Ответ отправил: Луковкин Николай Иванович (статус: 2-ой класс)
Ответ отправлен: 19.10.2006, 17:46


Вопрос № 59.138
Привет экспертам!
Как создать программу на ассемблере, которая запрашивает
2 числа в двоичной системе счисления, а потом выводит на экран их
сумму? Было бы хорошо, если проводилась проверка на корректность ввода данных. P.s ассемблер под dos, компилятор tasm
Отправлен: 16.10.2006, 18:42
Вопрос задал: hairbaton (статус: 3-ий класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

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

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

Приложение:

---------
Факультет ПМ-ПУ - лучший в СПбГУ!

Ответ отправил: Олег Владимирович (статус: 5-ый класс)
Ответ отправлен: 16.10.2006, 22:17
Оценка за ответ: 5


Вопрос № 59.165
Приветствую уважаемых экспертов. хотел спросить очень важную вешь именно у Вас. что вы посоветуете читать по ассемблеру, после прочтения книги О.А Калашникова?
а так же хотелось бы узнать у Вас как у профессионалов и людей явно имеющего богатый опыт работы. какие, реалные, задачи решаете Вы программируя на ассемблере? для чего, он так сказать, чаще используеться?
я просто поясню свой вопрос. дело в том, что ассемблер я изучать только для души. и хотелось бы знать его пратическую сторону, для чего он чаще всего применим.
Заранее спасибо.
Отправлен: 16.10.2006, 22:54
Вопрос задал: Чинга (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: ENS
Здравствуйте, Чинга!
Если Вы хорошо усвоили материал из рассылки, то можно почитать о win32 на wasm.ru уроки win32 iczelion'a.
Ассемблер применяется для самых различных целей, можно программировать для ДОС,Windows, UNIX, писать драйверы,ОСи.
Но самое гланое это то, что с помощью АСМа пишут ядра программ, то что требует наибольшей скорости, Вы контролируете все в подряд.
А вообще АСМ программы занимают меньше всего байт и они самые быстрые, применить можно везде.

---------
Если нет выхода ищу вход.
Ответ отправил: ENS (статус: 7-ой класс)
Ответ отправлен: 17.10.2006, 16:05
Оценка за ответ: 5

Отвечает: Луковкин Николай Иванович
Здравствуйте, Чинга!
1. После прочтения книги Олега Калашникова, я бы посоветовал Вам почитать также книгу по Ассемблеру А.Крупник( из-во Питер 2005г). Книга очень хорошая тем, что автор в ней очень доходчиво и понятно учит, как необходимо писать программы в среде Windows. И самое главное, он написанную тобой программу, учит исследовать в отладчике OllyDbg (это очень важно при изучении Ассемблера!)!
Ну а что бы быть ассом в программировании на Ассемблере, после прочтения книг Олега и Александра, советую приобретенные теоретические и практические знания, закрепить книгой по Ассемблеру С.В.Зубкова (3 издание 2006г.)
2. Преимущества Ассемблера над другими языками:
- Большую часть программ, которые пишутся (обычно) на языках высокого уровня (Delphi, C++, Pascal), ЛУЧШЕ, ПРОЩЕ и БЫСТРЕЕ написать на Асемблере!
- На каком компьютере ты не работал бы, быстрой программой всегда будет программа, написанная на Ассмблере!
3. Почему я начал изучать Ассемблер:
а) Его знание помогает отлаживать программы на других языках. Он дает представление о том, как на самом деле функционирует компьютер и что происходит при выполнении команд языка высокого уровня!
б) Без него я бы никогда не понял и не изучил замечательное исскуство - РЕВЕРСИНГа (исследование и защита программ от взлома)!!!
Удачи тебе и терпения (особенно!!!) в изучении Ассемблера!
---------
Главным критерием эффективности того или иного пути может служить лишь то, достиг или нет крекер конечного результата!!!
Ответ отправил: Луковкин Николай Иванович (статус: 2-ой класс)
Ответ отправлен: 18.10.2006, 13:31
Оценка за ответ: 5


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

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

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

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

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала 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.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное