Вопрос № 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 -НО после первой строчки на экран выдаётся:
В этих 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 числа в двоичной системе счисления, а потом выводит на экран их
сумму? Было бы хорошо, если проводилась проверка на корректность ввода данных. 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