Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.02.2011, 09:32   #11
wanes101
Форумчанин
 
Регистрация: 04.06.2010
Сообщений: 212
По умолчанию

Я не пользуюсь текстовыми редакторами и др. дополнениями, которые поставляются вместе с пакетами MASM32. По мне зачем учиться, как ими пользоваться? Хотя у всех свое понимание об удобности.
В общем могу посоветовать как сделать exe из asm для этого нужно: скопировать командную строку CMD.EXE приложение из папки C:\Windows\System32\ . И разместить в каталоге с компилятором. И в ней при компиляции пиши ml /c /coff name.asm & link /subsystem:windows name.obj.
Чтоб не писать одно и тоже при частой компилировании можно написать в .BAT файл в тестовом редакторе и при компиляции просто тыркни по нему и командная строка выполнит твой .BAT .

В результате получаешь EXE для Windows
wanes101 вне форума Ответить с цитированием
Старый 20.02.2011, 17:19   #12
Ibanez Wizard
Адский тунеядец
Форумчанин
 
Аватар для Ibanez Wizard
 
Регистрация: 11.06.2010
Сообщений: 164
По умолчанию

Цитата:
Сообщение от Dimarik Посмотреть сообщение
пока что только начинаю изучать ассемблер... непонятны несколько вещей:
1. В регистрах записывается информация. То есть они как бы - переменные в языках высокого уровня. То есть при написании программ на asm у нас ограниченное число перменных?
2.
mov ah,9; загружаем в регистр ah число 9
mov dx,offset Message; загружаем в регистр dx адрес сообщения для вывода
вот мы выводим сообщение на экран. Со второй строкой всё понятно. А что делает первая строка? Почему мы именно 9 загружаем и именно в регистр ah
И вывод сообщения заканчивается вызовом прерывания 21h. Оно что делает? Завершает вывод информации на экран?
или просто функция Message db 'Hello, world!$'
пользуется значением регистра ahи в зависимости от этого значения по-разному выполняется?
3. Аналогично, если не трудно, подобно первому вопросу, объясните пожалуйста, что построчно делают эти строки
mov ah, 10h;????
int 16h

P.S. мой второй и третий вопрос свидетельствует что у меня конкретный пробел в фундаментальных знаниях ассемблера. Только я не совсем понимаю что мне надо прочитать чтоб его ликвидировать. Где понятно написано про то, какими функциями прерывания пользуются, каждая за что отвечает и какими регистрами пользуются функции?

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

2. Помню на счет этого тоже парился).
Начну с конца:
В DOS (или в BIOS), есть собственно заложенные функции (процедуры). Их называют прерываниями. Вызываются они командой int. Но прерывание - это одна большая функция, в которой есть как бы "несколько функций". К примеру у прерывания 21h есть функция 9, выполняющая вывод строки на экран. Также у прерывания есть функция 10h...Вся суть в чем: в регистр ah ты загружаешь номер функции прерывания. В данном случае мы делаем вывод строки на экран, и поэтому номер функции 9. Казалось бы все:

Код:
mov ah, 9; загрузили номер функции
int 21h; вызвали прерывание для этой функции и дело в шляпе.
Но откуда взяться выводимой строке?
так вот - эта выводимая строк есть параметр функции 9 прерывания 21h.
У функций может быть и 2 и 3 и 4 параметра...В данном случае он один, и этот параметр есть ничто иное, как адрес выводимой строки. Для каждого параметра есть свой предназначенный регистр. Для нашей строки это регистр dx, куда и надо положить адрес выводимой строки:

Код:
mov dx, offset Message

offset - это директива (не знаю как правильно это называется), "узнавающая" адрес.

mov ah, 9; поместили номер функции
mov dx, offset Message; поместили единственный параметр это функции - адрес выводимой строки
int 21h; вызвали прерывание


И тут сразу, как выполниться строка int 21h выведется сообщение.

int 20h - это прерывание, которому в данном случае не надо указывать номер функции. Это прерывание завершает выполнение программы.


3.
Код:
 mov ah, 10h
 int 16h
Здесь все также). Функция 10h прерывания 16h ожидает нажатия юзером клавиши. И тут в ah мы запихали номер функции 10h, вызвали прерывание, и после выполнения строчки int 16h, программы не продолжит работу, пока юзер не нажмет enter)).

Советую все это проследить в CodeVIew (или в любом 16 битном отладчике).
Ibanez Wizard вне форума Ответить с цитированием
Старый 20.02.2011, 17:22   #13
Ibanez Wizard
Адский тунеядец
Форумчанин
 
Аватар для Ibanez Wizard
 
Регистрация: 11.06.2010
Сообщений: 164
По умолчанию

Пиши программы в Far'e, как это предлагает Калашников (поидее ты его читаешь). И компилируй как он там предлагает).
Это досовская программа (16 bit), и при написании и компиляции её в qeditor из этого ничего хорошего не выйдет.
Ibanez Wizard вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Первая программа на Java JokerWCC Помощь студентам 4 28.11.2010 17:08
Первая программа... ViJey Помощь студентам 6 27.09.2010 20:49
Моя первая программа. fragment Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 11.05.2010 11:46
Первая программа на WINAPI Syltan Win Api 8 27.02.2010 22:38
Первая программа, C++ Bulder edmynt Помощь студентам 2 31.01.2010 15:12