среда, 26 декабря 2012 г.

Введение в прерывания

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


1.  CSEG segment 
2.  org 100h 
3.  Begin:
4.   mov ah,9
5.  mov dx,offset Message 
6.  int 21h
7.  int 20h 
8.  Message db 'Hello, world$'
9.  CSEG ends
10.end Begin 


  В нашей программе int21h и int20h - прерывания.
  Строку 8 стоит понимать так: вызываем 21 прерывание. Заметьте что после номера прерывания стоит h, эта буква показывает, что мы передаем номер прерывания в 16-тиричной системе чисел. Мы могли бы написать эту строку как: int33 (при переводи 21 из 16-тиричной в 10-тичную систему получается число 33). Итак, прерывание int21 выводит на экран заданную вами строку. Стоит обратить внимание еще на  4. mov ah,9  Она необходима для правильной работы 21h прерывания, позже я объясню это подробнее. Перейдя по этой ссылке вы можете увидеть что в зависимости от 4-й строчки нашего кода будет выполнять 21h прерывание.
  Прерывание 20h просто завершает программу, никаких дополнительных вводов значений в отличие от 21h она не требует/

понедельник, 24 декабря 2012 г.

Разбор Hello world

В прошлой статье я рассказал вам как скомпилировать программу Hello world На assembler. В этой статье я хотел бы написать о том, как работает эта программа.
Напомню еще раз код нашей программы:


1.  CSEG segment 
2.  org 100h 
3.  Begin:
4.   mov ah,9
5.  mov dx,offset Message 
6.  int 21h
7.  int 20h 
8.  Message db 'Hello, world$'
9.  CSEG ends
10.end Begin 

  К сожалению некоторые фрагменты нашей программы придется пропустить, из-за того что для начала надо будет изучить обширные темы, что бы понять их.
  Итак, в строке 3 и 10 вы видите метки, указывающие assembler на начало и на конец кода. Вместо Begin и end Begin можно использовать Start и End Start соответственно.(Стоит обратить внимание, что ассамблеру не важно, заглавными или строчными буквами вы пишите программу)
  Строки с 4 по 6 выводят наше сообщение на экран. Здесь надо будет рассказать о регистрах процессора.
  Регистр процессора - это специально отведенная память для хранения какого-либо числа.
Например:
A = 12
B = 13
Z = A+B
Получается, что A,B,Z это регистры, которым присваиваются различные значения.
В assembler за присваивание значений отвечает команда mov
  В коде есть две операции присваивания:
mov ah,9
mov dx,offset Message 
Регистру ah мы присваиваем значение 9, а регистру dx offset Message (а точнее строку Hello, world)
Вызов прерывания int 21h позволяет вывести наше сообщение на экран, int 20h завершает нашу программу.


воскресенье, 23 декабря 2012 г.

Как компилировать файл assembler?

Одна из основных проблем новичков, которые хотят изучить assembler непонимание того, как компилировать asm файл в com или exe
Но сейчас я вам объясню:
1) Для начала скачайте с этого сайта Microsoft Macro Assembler
    И отсюда DOSLNK
2)Нажмите Пуск - Выполнить - Введите cmd.exe и нажмите ok
У вас появится примерно такое окно:
Заметьте,что над красной линией располагается некий адрес, у вас он может отличаться от моего.
Распакуйте архивы с Assembler и DOSLINK по этому адресу (в моем случае распаковать в C:\Documents and Settings\Admin)

3) Откройте обычные текстовый файл и напишите в нем:

CSEG segment
org 100h 

Begin:
 mov ah,9
 mov dx,offset Message 
int 21h
 int 20h 
Message db 'Hello, world $'   
 CSEG ends
end Begin   


Сохраните назвав его pr.asm в ту же папку, куда сохраняли assembler и DOSLNK
4) Запустите снова cmd.exe и вводите:

ml /c pr.asm
нажмите enter а затем введите:
doslnk /t pr.obj

Все,в папке, в которую вы сохраняли pr.asm появился файл pr.com
Поздравляю вас с первой написанной программой на Assembler.
В следующих статьях я подробно объясню как же работает эта программа и много другого)

Обо мне

  Хочу поприветствовать тебя дорогой читатель, надеюсь информация в моем блоге будет интересна и полезна тебе.
  Желание изучать assembler у меня появилось довольно давно. Пробовал читать большое количество литературы по данной теме, но к сожалению постоянно сталкивался с разными проблемами. В этом блоге я хотел бы рассказать вам как избежать многих ошибок, с которыми столкнулся сам и объяснит азы assembler.