Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

ЗАДАНИЕ [7] 7СОДЕРЖАНИЕ ОТЧЕТА [8] 8КОНТРОЛЬНЫЕ ВОПРОСЫ СПИСОК ЛИТЕРАТУРЫ

Работа добавлена на сайт samzan.net: 2016-03-30

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 17.5.2024

Костенко Т. П.Программирование на языке ассемблер. Методические указания к выполнению лабораторных работ

СОДЕРЖАНИЕ

[1] 1 ЦЕЛЬ РАБОТЫ

[2] 2 ПОДГОТОВКА К ВЫПОЛНЕНИЮ РАБОТЫ

[3] 3 ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ ПОЛОЖЕНИЯ  ПО ПРОГРАММИ-РОВАНИЮ НА ЯЗЫКЕ АССЕМБЛЕР

[4] 4 ПРОЦЕСС  АССЕМБЛИРОВАНИЯ  И ВЫПОЛНЕНИЯ  ПРОГРАММЫ

[5] 5 ПРОГРАММИРОВАНИЕ НА  АССЕМБЛЕРЕ

[6] 6 ЗАДАНИЕ

[7] 7 СОДЕРЖАНИЕ ОТЧЕТА

[8] 8 КОНТРОЛЬНЫЕ ВОПРОСЫ

СПИСОК ЛИТЕРАТУРЫ.....................................................................................30

1 ЦЕЛЬ РАБОТЫ

Целью проведения лабораторной работы является:

  1.  ознакомление с языком ассемблер;
  2.  приобретение опыта программирования  на языке ассемблер;
  3.  работа с отладчиком программ;
  4.  изучение организации памяти, устройства микропроцессора, организации ввода - вывода.

2 ПОДГОТОВКА К ВЫПОЛНЕНИЮ РАБОТЫ

Лабораторная работа рассчитана на студентов, не имеющих опыта работы на языке ассемблер. Студент должен уметь работать в любом текстовом редакторе, c проводником или в Norton Commander. При подготовке к работе студент должен ознакомиться с материалом, изложенным в разделе 3, 4 и 5, а также с общей структурой данного методического указания. Готовность студента к выполнению лабораторной работы определяется путем проведения собеседования.

Защита лабораторной работы осуществляется после написания студентом отчета. В ходе защиты студент должен ответить на контрольные вопросы и продемонстрировать на ЭВМ работу программы.

3 ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ ПОЛОЖЕНИЯ  ПО ПРОГРАММИ-РОВАНИЮ НА ЯЗЫКЕ АССЕМБЛЕР

3.1 Режимы адресации данных микропроцессора Intel 8086

1) Непосредственный. Данное длинной 8 или 16 бит является частью команды.

Например: выражение-константа: 12; 1010В; 08АH; ‘AB’; XX-YY-5.

2) Прямой. 16-битный эффективный адрес данного является частью команды.

Например: переменнаявыражение-константа: CNT; CNT+5; ARRAY-5.

3) Регистровый. Данное содержится в определяемом командой регистре  (Аx,bx,cx,dx,si,di,sp,bp).

Например: регистр: AX; BH; DL.

4) Регистровый косвенный. Эффективный адрес данного находится в базовом регистре BX  или индексном SI,DI:

 .

Например: [регистр]:  [BX].

5) Регистровый относительный. Эффективный адрес равен сумме 8 или 16 битного смещения и содержимого базового или индексного регистров:

  .

Например: переменная + [регистрвыражение константа]: CST[BX]; MES[SI+10H]; [BX-1].

6) Базовый индексный. Эффективный адрес равен сумме содержимого базового и индексного регистров, определяемых командой:

  .

Например: [базовый регистр][индексный регистр] :   [BX][DI].

7) Относительный базовый индексный.  Эффективный адрес равен сумме 8 или 16 битного смещения и базово - индексного адреса:

  .

Например: переменная + [базовый регистрвыражение константа] [индексный регистрвыражение константа] : E[BX+5][SI-2]; DATA[BX][SI]; [BX+2][SI].

3.2 Режимы адресации переходов микропроцессора Intel 8086

1) Внутрисегментный прямой. ЭА перехода равен сумме смещения и текущего содержимого IP. В команде условного перехода смещение только 8 бит (короткий переход).

Например: меткавыражение константа: Labl1+27.

2) Внутрисегментный косвенный. ЭА перехода есть содержимое регистра или ячейки памяти, указанных в любом режиме кроме непосредственного. Допустим только для безусловных переходов.

3) Межсегментный прямой. Заменяет содержимое IP одной частью команды, а содержимое CS - другой.

Например:  меткавыражение константа:  BRANCH_EXT.

4) Межсегментный косвенный. Заменяет содержимое IP и CS содержимым двух смежных слов из памяти, определенных в любом режиме кроме, непосредственного и регистрового.

3.3 Слово состояния микропроцессора Intel 8086

Флажки условий:

Флажок знака SF. Равен старшему биту результата.

Флажок нуля ZF. Устанавливается в единицу при получении нулевого результата и сбрасывается в ноль, если результат отличается от нуля.

Флажок паритета PF. Устанавливается в единицу, если младшие 8 бит результата содержат четное число единиц, в противном случае он сбрасывается в ноль.

Флажок переноса CF. При сложении (вычитании) устанавливается в единицу, если возникает перенос (заем) из старшего бита.

Флажок вспомогательного переноса AF. Устанавливается в единицу, если при сложении (вычитании) возникает перенос (заем) из бита 3. Только для двоично-десятичной арифметики.

Флажок переполнения OF. Устанавливается в единицу, если возникает переполнение, т.е. получение результата вне допустимого диапазона. При сложении этот флажок устанавливается, если имеется перенос в старший бит и нет переноса из старшего бита и наоборот.

Флажки управления:      

Флажок направления DF. Применяется в командах манипуляции цепочками.

Флажок разрешения прерываний IF. Когда установлен этот флажок, центральный процессор распознает маскируемые прерывания, иначе прерывания игнорируются.

Флажок прослеживания (трассировки) TF. Когда этот флажок установлен, после выполнения каждой команды генерируется внутреннее прерывание.

3.4 Список сокращений и условных обозначений

 СОКРАЩЕНИЕ    СМЫСЛОВОЕ ЗНАЧЕНИЕ        СОКРАЩЕНИЕ         СМЫСЛОВОЕ ЗНАЧЕНИЕ

 OPR                         Операнд                                      DATA8        8-битный непосредственный

                                                                                                                       операнд

 SRC                         Операнд-источник            DATA16     16-битный непосредственный        

                                                                                                                       операнд

 DST                         Операнд-получатель       AX,BX.CX,DX        Регистры 16-битные

 REG                         Регистр                                       AL,AH,BL,BH         Регистры 8-битные  

 RSRC                      Регистр-источник              CL,CH,DL,DH         Регистры 8-битные

 RDST                      Регистр-получатель         IP              Регистр-указатель команды

 CNT                        Счетчик                                        SP                    Регистр-указатель стека

 DISP                  Смещение (общее обозн.)   BP                              Регистр базовый

 D8                           8-битное смещение             SI,DI                          Регистры индексные  

 ADDR                    Адрес                                               CS,SS,DS,ES            Регистры сегментные

 EA                          Эффективный адрес           оF,IF,TF                  Флажки управляющие

 SEG                       Сегмент                                         DF,SF,ZF                 Флажки условий

 DATA       Непосредственный операнд   AF,PF,CF                 Флажки условий

3.5 Общий формат ассемблерной команды

Метка:           Мнемоника    Операнд, Операнд     ; Комментарий

Первым символом в метке должна быть буква. Все имена регистров являются зарезервированными и их использовать в качестве метки нельзя. Они используются  для указания соответствующих регистров.

Команда - указывает транслятору с ассемблера какое действие должен выполнить данный оператор. В сегменте данных команда или псевдооператор определяет поле, рабочую область или константу.

Операнды - регистры, метки данных или непосредственные данные.

3.6 Определение данных

Формат операторов резервирования и инициализации данных:

Переменная  Мнемоника    Операнд,...,Операнд  ; Комментарий

Переменной назначается смещение первого резервируемого байта.

Мнемоника определяет длину каждого операнда:

  1.  DB   (определить байт);
  2.  DW (определить слово);
  3.  DD  (определить двойное слово).

Операнды показывают инициализируемые данные или объем резервируемого пространства.  Операнд  резервирует место без инициализации. Выражение может содержать константу напр. 25 или ? для неопределенного значения.

Примеры:  

Data_Byte   DB  104,56,12

Data_word  DW 100H,FFH,-5

Data_DW    DD  5*25,0FFFDH,1

Data_str      DB ‘H’,’E’,’L’,’L’,’O’

Data_str1    DB ‘HELLO’

 При определении большого числа ячеек можно применять оператор повторения DUP (Операнд,...,Операнд). Например конструкции: 

Arr      DB  30  DUP(1,2)     -  зарезервирует 30 однобайтовых ячеек с начальными значениями 1 в нечетных и 2 в четных;

ММ1   DB 15 DUP (14)        - означает, что по адресу ММ1 находятся 15 байт содержащих шестнадцатиричную цифру 0ЕH.

3.7 Команды языка ассемблер

В персональных ЭВМ форматы команд достаточно разнообразны. Имеются команды с одним или двумя операндами.

Например: 

  1.  формат команды регистр - регистр (2 байта);
  2.  формат команды регистр - память (2 - 4 байта);
  3.  формат команды регистр - непосредственный операнд (3 - 4 байта);
  4.  формат команды память- непосредственный операнд (3-6 байтов).
  5.  Команды передачи данных

Предназначены для пересылок данных, адресов и непосредственных операндов в регистры или в ячейки памяти. Их описание представлено в таблице 1.

Таблица 1 - Формат команд передачи данных

Название команды

Мнемоника и формат команды

Описание действия

Передать

MOV DST,SRC

(DST)(SRC)

Загрузить эффективный адрес

LEA   DST,SRC

(REG) (SRC)

Загрузить в DS указатель

LDS    DST,SRC

(REG) (SRC)

(DS) (SRC+2)

Загрузить в ES указатель

LES    DST,SRC

(REG) (SRC)

(ES) (SRC+2)

Обменять

XCHG OPR1,OPR2

(OPR1) (OPR2)

Ни один из флажков не изменяется.

Режимы адресации. Получатель не может быть непосредственным и не может быть CS. В  командах LEA, LES, LDS операнд REG не может быть сегментным регистром, а источник не может иметь непосредственный или регистровый режим. В команде  MOV один из операндов должен быть регистром. В команде XCHG хотя бы один из операндов должен быть регистром, но ни один из операндов не может быть сегментным регистром.

3.7.2 Команды двоичных сложений и вычитаний

Применяются для выполнения арифметических операций над двоичными, упакованными и неупакованными двоично-кодированными десятичными числами. Их описание представлено в таблице 2.

Таблица 2 - Формат команд двоичных сложений и вычитаний

Название команды

Мнемоника и формат команды

Описание действия

Сложить

ADD   DST,SRC

(DST)(SRC) + (DST)

Сложить с переносом

ADC   DST,SRC

(DST) (SRC) + (DST)

                            +(CF)

 Вычесть

SUB    DST,SRC

(DST)(DST) - (SRC)

 Вычесть с заемом

SBB    DST,SRC

(DST)(DST)-(SRC)-(CF)

Модифицируются все флажки условий.

Режимы адресации. Один из операндов должен находиться в  регистре. Другой операнд может иметь любой режим адресации.

3.7.3 Однооперандные команды двоичной арифметики и команды сравнения

Применяются для увеличения или уменьшения на единицу операнда и для сравнения двух операндов. Их описание представлено в таблице 3.

Таблица 3 - Формат однооперандных команд двоичной арифметики и команды сравнения

Название команды

Мнемоника и формат команды

Описание действия

Инкремент

INC     OPR

(OPR)(OPR) + 1

Декремент

DEC    OPR

(OPR)(OPR) - 1

Изменить знак

NEG   OPR

(OPR)(OPR) - (OPR)

Сравнить

CMP   OPR1,OPR2

(OPR1) - (OPR2)

Модифицируются все флажки условий, но команды INC и DEC не воздействуют на флажок CF.

Режимы адресации. В  командах INC, DEC, NEG  не допускается непосредственный режим. В команде CMP один из операндов должен быть регистром. Другой операнд может иметь любой режим адресации, но OPR1 не может быть непосредственным значением.

3.7.4 Команды двоичных умножения и деления

1) Умножить со знаком .

          IMUL  SRC   

операнды-байты: (AX) (AL)*(SRC)               ,

операнды-слова: (DX:AX) (AX)*(SRC)       .

Произведения со знаком. Знак определяется по алгебраическим правилам.

2) Умножить без знака. 

            MUL   SRC        .

Аналогична команде IMUL,  но операнды и произведения беззнаковые.

3) Разделить со знаком.

          IDIV  SRC   

делитель-байт:  (AL)  частное (AX)/(SRC)   ,

(AH)   остаток (AX)/(SRC)  .

Делитель-слово:   (AX)  частное (DX:AX)/(SRC),

 (DX)  остаток (DX:AX)/(SRC)    .

Частное и остаток имеют знаки, знак остатка равен знаку делимого.

4) Разделить без знака 

         DIV   SRC              .

Аналогична команде IDIV, но операнды, частное и остаток, беззнаковые

Флажки. Команды IMUL, MUL устанавливают OF и CF в состояние 1, если для результата требуется два байта (слово). Иначе эти флажки нулевые. Остальные флажки не определены.

Режимы адресации. Операнды источники не могут быть непосредственными значениями, а все другие режимы адресации допустимы. Получателем должен быть регистр AX или DX:AX.

  1.  Логические команды

Команды микропроцессора, реализующие логические операции. Все команды обрабатывают операнды (байты или слова) поразрядно. Логические команды наиболее часто используются для селективных установок, инвертирования, сброса или проверки бит в операнде получателе в соответствии с двоичным набором операнда-источника. Такие действия часто встречаются в операциях над битами регистров и данных ввода-вывода. При этом операнд источник называют маской, а сама операция называется маскированием. Их описание представлено в таблице 4.


Таблица 4 - Формат логических команд

Название команды

Мнемоника и формат команды

Описание действия

Инвертировать

NOT OPR

(OPR)not OPR

Объединить по "или"

OR DST,SRC

(DST)(DST) or (SRC)

Объединить по "и"

AND DST,SRC

(DST)(DST) and (SRC)

Сложить по MOD2

XOR DST,SRC

DST)(DST) xor (SRC)

Проверить

TEST OPR1,OPR2

OPR1 and OPR2

Флажки. Команда NOT не воздействует на флажки. Остальные команды сбрасывают OF и CF, оставляют АF не определенным и устанавливают СF, ZF, PF по обычным правилам.

Режимы адресации. В команде NOT не допускается непосредственный операнд. В остальных командах один из операндов должен быть регистром. Другой операнд может иметь любой режим адресации.

  1.  Команды сдвигов и циклических сдвигов

Эти команды перемещают все биты операнда влево на указанное CNT число. В командах сдвига влево с правой стороны операнда "вдвигаются" нули, а старшие биты "выдвигаются" с левой стороны и теряются, но последний из них сохраняется во флаге CF. Команды сдвига вправо аналогичным образом сдвигают биты вправо. Но арифметический сдвиг вправо не помещает слева нули, а дублирует в старшие биты знак операнда. Команды циклического сдвига отличаются от команд сдвига тем, что операнд считается "кольцом", в котором выдвигаемые с одной стороны вдвигаются с другой стороны. Их описание представлено в таблице 5.

Таблица 5 - Формат команд сдвигов и циклических сдвигов

Название команды

Мнемоника и формат команды

Описание действия

Сдвинуть логически влево

SHL OPR,CNT

                                0    

  CF            OPR

Сдвинуть арифметически влево

SAL OPR,CNT

 Аналогична SHL

Сдвинуть логически вправо

SHR OPR,CNT

0                                     

          OPR                  CF

Сдвинуть арифметически вправо

SAR OPR,CNT

                                      

          OPR                  CF

Сдвинуть циклически влево

ROL OPR,CNT

                               

  CF            OPR

Сдвинуть циклически вправо

ROR OPR,CNT

                                      

          OPR                  CF

Сдвинуть циклически влево через перенос

RCL OPR,CNT

                                     

  CF            OPR

Сдвинуть циклически вправо через перенос

RCR OPR,CNT

                                      

          OPR                  CF

Число сдвигов определяется CNT.  Он может быть 1, выражением - константой равной 1 или регистр CL. В CL любое число.

Флажки. Перенос CF  устанавливается в соответствии с режимом адресации. Флажки SF, ZF, PF модифицируются командами сдвига, но команды циклических сдвигов на них не воздействуют. Флажок OF имеет смысл, если только счетчик равен 1. Команды сдвигов влияют на состояние флажка АF,  но оно определенного смысла не имеет.

Режимы адресации. OPR может иметь любой режим адресации, кроме непосредственного.

3.7.7 Команды безусловных переходов

Эти команды нарушают естественный порядок выполнения команд  посредством загрузки в командный счетчик адреса команд, к которой осуществляют переход. Межсегментные передачи управления реализуются только командами безусловных переходов.  

          Название          мнемоника и формат        описание

Внутрисегментный прямой   JMP SHORT OPR      (IP)(IP)+ 8-битное

короткий переход                                              смещение, определяемое OPR

Внутрисегментный прямой   JMP NEAR OPR        (IP) (IP)+ 16-битное

близкий переход                                                 смещение, определяемое OPR

Внутрисегментный прямой   JMP OPR  *                   (IP)(EA), где EA

косвенный переход                                                        определяется OPR

Межсегментный прямой       JMP FAR PTR OPR      (IP) смещение OPR в

далекий переход                                                 сегменте (CS ) сегментный

                                                                      адрес сегмента, содержащего OPR

Межсегментный                    JMP OPR    *    (IP)(EA), где EA определяется  косвенный переход                                         OPR, (CS)(EA+2), где EA

                                                                          определяется OPR

Тип перехода определяется типом операнда.

Не модифицируются все флажки условий.

Режимы адресации. Во внутрисегментных прямых переходах применяется относительный режим, в межсегментных прямых переходах - прямой режим. В косвенных переходах не допускается непосредственный режим, а в межсегментных косвенных переходах должна адресоваться память.

  1.  Команды условных переходов

В этих командах, также как и в командах безусловного перехода, нарушается естественный порядок выполнения команд. Но в условном переходе замена содержимого программного счетчика зависит от состояния флагов.

 Название                              Мнемоника и формат           Проверочное условие

Перейти, если нуль или равно           JZ  OPR    или  (JE)  ZF = 1

Перейти, если не нуль или не равно JNZ OPR    или  (JNE) ZF = 0

Перейти, если знак установлен        JS  OPR    SF = 1

Перейти, если знак сброшен            JNS  SF = 0

Перейти, если есть переполнение   JO  OPR  OF = 1

Перейти, если нет переполнения   JNO OPR OF = 0

Перейти, если паритет установлен   JP  OPR    или  (JPE)  PF = 1

Перейти, если паритет сброшен  JNP OPR    или  (JPO)  PF = 0

Перейти, если ниже/не выше или  JB  OPR    или  (JC)  CF = 1

равно (без знака)

Перейти, если не ниже/выше или  JNB OPR    или  (JNC)  CF = 0

равно (без знака)

Перейти, если ниже или равно/  JBE OPR    или  (JNA)  CZ ZF=1

не выше (без знака)

Перейти, если не ниже или равно JNBE OPR   или  (JA)  CF ZF=0

выше (без знака)

Перейти, если меньше/не больше  JL  OPR     или  (JNGE)  SF OF=1

или равно (со знаком)

Перейти, если не меньше/больше JNL OPR    или  (JGE)  SF OF=0

или равно (со знаком)

Перейти, если  меньше или JLE OPR  или (JNG) (SF OF) ZF=1

равно/не больше (со знаком)

Перейти, если не меньше или JNLE OPR  или  (JG) (SF OF) ZF=1

равно/ больше (со знаком)

Если проверочное условие удовлетворяется,

(Программный счетчик) ( Программный счетчик)+ 8-битное смещение с расширением знака. В противном случае программный счетчик не изменяется и программа продолжается в естественном порядке.

Не модифицируются все флажки условий.

Режимы адресации. Режим относительно программного счетчика. Операнд OPR должен быть в пределах -128...127 байт от команды, находящейся за командой перехода.

3.7.9 Команды циклов

  НАЗВАНИЕ      МНЕМОНИКА И ФОРМАТ  ПРОВЕРЯЕМОЕ УСЛОВИЕ

Зациклить     LOOP OPR  (CX) 0

Зациклить, пока нуль или равно LOOPZ OPR ZF=1 и (CX) 0

Зациклить, пока не нуль или не равно LOOPNZ OPR ZF=0 и (CX) 0 Перейти  по CX    JCXZ OPR   (CX) = 0

За исключением команды JCXZ, которая не изменяет (CX), производится (CX)(CX)-1, затем, если проверяемое условие удовлетворяется, (IP)(IP)+D8 с расширением знака; в противном случае (IP)  не изменяется и программа продолжается в естественном порядке.

Не модифицируются все флажки условий.

Режимы адресации. Режим относительно IP. Операнд OPR должен быть меткой, которая находится в диапазоне -128...127 байт от команды, следующей за командой цикла.

  1.  Стековые команды

НАЗВАНИЕ                  МНЕМОНИКА И ФОРМАТ     ОПИСАНИЕ

Включить в стек PUSH SRC (SP)(SP)-2 ((SP)+1:(SP)   (SRC)

Извлечь из стека POP DST (DST)((SP)+1:(SP) (SP)(SP)+2

4 ПРОЦЕСС  АССЕМБЛИРОВАНИЯ  И ВЫПОЛНЕНИЯ  ПРОГРАММЫ

Для работы с программой необходимо:

1) Создать в любом pедактоpе пpогpамму на ассемблеpе т.е. символьный файл- исходный модуль. Имя файла должно иметь pасшиpение - .ASM.

2) Файл с pасшиpением .ASM стpанслиpовать т.е. набpать на клавиатуpе:

TASM Имя файла.ASM /Z                                    .

           После тpансляции на экpане появится сообщение:

Assembling file: транслируемый файл.

Error messages: сообщения об ошибках. ( None - нет ошибок)

Warning messages: предупреждающее сообщение.

Passes: количество страниц.

Remaining memory: занимаемая память.

Результатом работы транслятора будет файл с расширением - .OBJ - объектный модуль. После трансляции можно получить листинг - отпечатанную программу с  относительными адресами и машинным кодом.        

3) Странслированный без ошибок файл необходимо обработать компоновщиком т.е. набрать на клавиатуре:

TLINK Имя файла.OBJ /V                                 .

Результатом будет файл с расширением  .EXE или .COM - загрузочный модуль. Эти программы готовы к выполнению на ЭВМ. Их имена можно набрать на клавиатуре и нажать Enter. Выполнение команд программы можно посмотреть в отладчике.

4) Для работы в отладчике необходимо иметь программу с расширением .EXE или .COM. Набрать на клавиатуре:

TD Имя файла.EXE  

  1.  Для того, чтобы посмотреть какие ключи имеют программы TASM и TLINK надо набрать их имена на командной строке и нажать Enter.

4.1 Работа с отладчиком программ

Нижнее меню в отладчике - меню функциональных клавиш.

Значения некоторых функциональных клавиш:

  1.  F7 - просмотр текста программы без ее выполнения;
  2.  F8 - выполнять по шагам программу т.е. по программе перемещается полоса выбора (синяя) и будет выполнена та команда ниже которой эта полоса размещена. После выполнения команды  на экране появляется содержимое регистров, флагов и адpес следующей на очереди команды;
  3.  F10 - выход в главное, верхнее меню.

Запускаются команды или с помощью мыши или с помощью куpсоpа на клавиатуре.

Курсором выбирается нужная команда и нажимается клавиша Enter  или нажимается левая крайняя кнопка мыши, если выбоp был мышью.

В верхнем меню по команде FILE можно открыть любой файл, если он не был указан в команде TD при запуске отладчика.

По команде VIEW появляется еще меню, в котором Dump - команда получения содержимого памяти по соответствующему адресу заданному в регистре DS, т.е. содержимое данных определенных в нашей программе. Данные начинаются с нулевого относительного адреса. Эти данные можно изменять.

Registers - после запуска этой команды появляется окно с  регистрами и данные находящиеся в этих регистрах можно изменять.

Курсором или мышкой выбрать изменяемый регистр и перевести курсор на изменяемое данное, на клавиатуре в появившемся окне набрать новое данное и нажать Enter.

Выход из отладчика по нажатию Alt-X.

Выход из любой команды по нажатию клавиши Esc.

Переход в верхнее меню можно осуществлять с помощью мыши.

Закрыть появившееся окно можно или нажать ALT-F3 или надо перевести мышкой курсор в левый угол окна на зеленый квадрат и нажать левую  кнопку мыши.

5 ПРОГРАММИРОВАНИЕ НА  АССЕМБЛЕРЕ

5.1 Примеры программ

1) Программа сложения двух чисел:

s_s    segment stack "stack"   ;  адрес начала сегмента стека

        dw 12 dup(?)                ;  зарезервировано в памяти 12 слов с любым

                                             ;  значением

s_s    ends                              ;   адрес  конца сегмента стека

d_s    segment                        ;   адрес начала сегмента данных

aa     dw 45h,23h                    ;  данные т.е. числа 45 и 23 записаны по адре-

                                              ;  су аа и  аа+2 соответственно т.к. они опреде-

                                              ; лены как слова

sum    dw 0                             ;  данное т.е. число 0 записано по адресу sum

                                              ; (это метка)

d_s    ends                               ;  адрес  конца сегмента данных

c_s     segment                        ;      начало сегмента кода

         assume ss:s_s,ds:d_s,cs:c_s   ;псевдооператор, определяющий  каким

                                                         ;сегментным регистрам соответствуют

                                                         ;назначенные метками адреса  начала

                                                         ;сегментов  

beg:                                 ; начало пpогpаммы - имя и после него двоеточие

          mov ax,d_s;          ; пересылка в регистр сегмента данных (ds) адреса

                                       ; начала сегмента данных т.е. метки начала сегмента

                                       ; данных

          mov ds,ax             ;  пересылку в ds можно сделать только через

                                       ;  промежуточную пересылку в рабочий регистр,

                                       ; например ax     

          mov ax,aa             ; пересылка в регистр ax содержимого, находящегося

                                        ; по адресу аа т.е. числа 45        

          add ax,aa+2          ; сложить число, которое находится в регистре ax с

                                       ; содержимым, находящимся по адресу аа+2

                                       ; т.е.числа 23 и результат записывается в регистр ax       

           mov sum,ax         ;  переслать содержимое ax т.е. результат в ячейку

                                       ; памяти по  адресу sum

           mov ah,4ch          ;  для правильного завершения программы необходи-

                                       ; мо переслать в регистр ah - байт равный 4ch

           int 21h                 ; и вызвать прерывание равное 21h

c_s      ends                      ;         конец сегмента кода

          end begin              ; конец программы. Метки начала и конца програм

                                       ; мы  должны совпадать.

2) Программа сложения двух чисел c учетом переноса из старшего разряда:

s_s    segment stack "stack"    ;    начало сегмента стека

        dw 12 dup(?)                 ; зарезервировано в памяти 12 ячеек

s_s    ends                               ;  конец сегмента стека

d_s    segment                         ;       начало сегмента данных

aa      dw 5435h,4531h; данные т.е. числа 5435h,4531h записаны по адресу аа

                                 ;и аа+2 соответственно т.к. они определены как слова

s1      dw 2h                ; по адресу s1 записано число 2

sum   dw ?                  ;    любое данное  записано по адресу sum (это метка)

d_s    ends                   ;         конец сегмента данных

c_s    segment              ;      начало сегмента кода

        assume ss:s_s,ds:d_s,cs:c_s;   

begin: mov ax,d_s;     начало программы.

         mov ds,ax   

         mov ax,aa     ; пересылка в регистр ax содержимого, находящегося

                              ; по адресу аа т.е. числа 5435h

         add ax,aa+2     ;сложить число, которое находится в регистре ax с

                                 ;содержимым, находящимся по адресу аа+2 т.е.числа

                                 ;4531h, результат записывается в ax

         jno kof             ; перейти, если нет переполнения (OF=0)

         mov ax,aa        ;если OF=1 - переполнение, выбрать опять число

         add ax,s1         ; и сложить его с другим

kof:    mov sum,ax     ;   переслать содержимое ax т.е. результат в ячейку

                                  ;памяти по адресу sum

        mov ah,4ch      ; для правильного завершения программы необходимо

                                 ;переслать в регистр ah 4ch

        int 21h             ; и вызвать прерывание равное 21h

c_s    ends                ;         конец сегмента кода

        end begin        ;    конец программы.

3) Программа сброса 3 и 4 бита в байте:

s_s     segment stack "stack"    

         dw 12 dup(?)    

s_s     ends          

d_s     segment   

аа       db 75h   

sum    db 0

d_s     ends

c_s     segment

         assume ss:s_s,ds:d_s,cs:c_s

begin: mov ax,d_s

          mov ds,ax 

          mov dl,aa     ; пересылка в регистр dl содержимого, находящегося

                              ; по адресу аа

          and dl,11100111b ; сбросить биты 3 и 4 т.е. установит в ноль

          mov sum,dl ; записать результат в sum

          mov ah,4ch

          int 21h

c_s      ends

          end begin

           

  1.  пpогpамма вывода на экpан стpоки сиволов:

s_s      segment stack "stack"

          dw 12 dup(?)     

s_s      ends                 

d_s      segment

aa        dw 5h,3h

sum     dw "ОК",0ah,0dh,"$"    ;в пеpвых кавычках то, что выводим, затем

                                               ;0ah -пеpевод стpоки, 0dh- возвpат каpетки,

                                               ;$- стpока должна завеpшаться этим символом

d_s      ends

c_s      segment

          assume ss:s_s,ds:d_s,cs:c_s;

begin:  mov ax,d_s

          mov ds,ax;

          mov ah,9h    ; вывод стpоки символов на экpан. Функция 9h

          lea dx,sum    ;адpес стpоки для вывода

          int 21h          ;печатаем стpоку

          mov ah,4ch  

          int 21h     

c_s     ends

         end begin

5)  пpогpамма, использующая условный переход:

s_s      segment stack "stack"

          dw 12 dup(?)     

s_s      ends                 

d_s      segment

aa        dw 10

d_s      ends

c_s      segment

          assume ss:s_s,ds:d_s,cs:c_s;

begin:  mov ax,d_s

          mov ds,ax;

          cmp aa,10

          jge    vvv ; вызывает переход к метке vvv, если содержимое аа >=10

          ................. иначе будут выполняться следующие команды

          ................

vvv:    ..............

          mov ah,4ch  

          int 21h     

c_s     ends

         end begin

  1.   пpогpамма, использующая вызов процедуры:

s_s      segment stack "stack"

          dw 12 dup(?)     

s_s      ends                 

d_s      segment

aa        dw 10

d_s      ends

c_s      segment

          assume ss:s_s,ds:d_s,cs:c_s;

begin:  mov ax,d_s

          mov ds,ax;

          call pr1     ;вызов подпрограммы

         ...............

          call pr1     ;вызов подпрограммы

         ...............

          mov ah,4ch  

          int 21h     

pr1      proc near            ;начало подпрограммы (ближний вызов)

          push ax               ; записать в стек регистр ах

         .............

          pop ax                 ;выбрать из стека регистр ах

          ret                       ; команда возврата  на следующую команду после

                                     ; вызова прцедуры

pr1     endp                    ;конец подпрограммы

c_s     ends

         end begin

  1.  пpогpамма, использующая команды ввода-вывода. Программа проверки установлен ли математический сопроцессор:

s_s     segment stack "stack"    

         dw 12 dup(?)    

s_s     ends          

d_s     segment   

sum    db 0

d_s     ends

c_s     segment

         assume ss:s_s,ds:d_s,cs:c_s

begin: mov ax,d_s

          mov ds,ax 

          mov al,14h     ; переписать N регистра (14-хранит информацию о

          out 70h,al       ; периферии) в 70h порт (через дополнительную

                                 ; пересылку в регистр al)

          in al,71h         ; прочесть содержимое 14 регистра через 71h порт

          test al,10b       ; проверить 1 бит, который указывает есть ли

                                 ; сопроцессор

          JZ NO_C        ; если не установлен 1 бит, то переход на метку

          ................       ; если установлен (равен 1) то выполняются следующие

          ................       ; команды

NO_C  ...............       ; сопроцессора нет

          ................

          mov ah,4ch

          int 21h

c_s      ends

          end begin

      

Программы, имеющие такой вид, компонуются в файл с расширением .EXE.

Для инициализации ассемблеpной пpогpаммы необходимо:

  1.  указать ассемблеpу, какие сегментные pегистpы должны соответствовать сегментам;
  2.  загpузить в DS адpес начала сегмента данных.

Пpогpамма в фоpмате ЕХЕ может иметь любой pазмеp.

Программа с расширением .COM не должна пpевышать 64 Кбайт памяти.    

Комментарий в программе начинается на любой строке с символа;. При определении данных, начинающихся с буквы, необходимо перед буквой ставить  цифру 0.

6 ЗАДАНИЕ

  1.  Создание исходной программы на ассемблере, трансляция, компоновка и отладка программы с применением арифметических команд, логических команд, команд сдвига. Программа вычисления физического адpеса данного для 20 pазpядной шины адpеса.

Физический адрес = (DS)*16 + EA.

  1.  Создание исходной программы на ассемблере, трансляция, компоновка и отладка программы с применением логических команд, команд условных и безусловных пеpеходов. В программе установить 2 любых бита в единицу, инвертировать все, сбросить 2 любых бита, продублировать результат в другом регистре, инвертировать этот регистр, проверить установлен ли 7 бит в единицу и выдать об этом сообщение.
  2.  Создание исходной программы на ассемблере, трансляция, компоновка и отладка программы с применением команд пеpеходов на подпpограмму. Программа перевода всех шестнадцатиричных чисел в числа кода ASCII и вывода их на экран дисплея.
  3.  Создание исходной программы на ассемблере, трансляция, компоновка и отладка программы с применением  команд цикла. Программа соpтиpовки 10 любых чисел по возрастанию.
  4.  Создание исходной программы на ассемблере, трансляция, компоновка и отладка программы с применением  команд ввода - вывода. Программа определения количества памяти на системной плате. Регистры 15h (младший) и 16h (старший) микросхемы хранят информацию о количестве памяти. Возможны три варианта: 0100 h для 256К, 0200 h для 512К, 0280 h для 512К + 128К на плате расширения. Память сверх одного Мгбайта доступна через регистры 30 h и 31 h. Память канала ввода-вывода сообщается регистрами 17 h  и 18 h (с инкрементом 512К). Во всех случаях надо сначала послать номер регистра в порт 70 h, а затем прочитать значение из порта 71 h. Для вывода информации о содержимом регистров надо их значения перевести в символьную форму.

7 СОДЕРЖАНИЕ ОТЧЕТА

Отчет должен содержать следующую информацию:

  1.  распечатанную программу на ассемблере;
  2.  результат работы программы;
  3.  список использованных регистров с названием принадлежности к группе регистров.


8 КОНТРОЛЬНЫЕ ВОПРОСЫ

Необходимо ответить на такие вопросы:

  1.  на какие сегменты разбита память в ЭВМ;
  2.  как определены данные в программе;
  3.  что означает смещение по сегменту где расположены данные;
  4.  где в программе адрес начала сегмента;
  5.  в какие регистры записывается адрес начала каждого сегмента;
  6.  что нужно записать в регистр DS в начале программы;
  7.  в каком регистре находится во время выполнения программы смещение кода;
  8.  что указывает псевдооператор ASSUME;
  9.  как оформляется начало выполнения программы;
  10.   какие режимы адресации данных использованы в программе;

11) что означает корректное завершение программы.


СПИСОК ЛИТЕРАТУРЫ

  1.  Абель Питер. Язык Ассемблера для IBM PC и программирования. -М.: Высшая школа, 1992.
  2.  Скэнлон Л. Персональные ЭВМ IBM PC и XT. Программирование на языке ассемблера. -М.: Радио и связь, 1989.
  3.  Ю-Чжен Лю, Гибсон Г. Микропроцессоры семейства 8086/8088. -М.: Радио и связь, 1987.
  4.  Морс С.П., Алберт Д.Д. Архитектура микропроцессора 80286. -М.: Радио и связь, 1990.
  5.  Григорьев В.Л. Микропроцессор i486.  Архитектура и программирование (в 4-книгах). -М.:ГРАНАЛ, 1993.




1. Вариант 1 На вакантную должность водителя автобуса имеется 6 претендентов- b c d e f
2. элиты России- 19982002 КРЫШТАНОВСКАЯ Ольга Викторовна ~ кандидат философских наук докторант Института cоцио
3. Влияние гумата плодородие на урожайность овса
4. ’ Основная жалоба пациента при обструктивном бронхите1повышение температуры2головная боль3одышка4слабо.html
5. Тема Взаимодействие тел Механическое движение Мы переходим к изучению следующего раздела физики
6. Тюменский государственный университет Утверждено на заседании кафедры
7. тема финансового управления.
8. Time Commissions. The Government or the supreme executive power is the Council of Ministers.
9. Частотные характеристики линейных систем управления
10. Тренировки силовой направленности
11. тема ценностей современного учителя; ~ обозначить психологическую основу к современному Портрету учите
12. Психология социальных сетей Исследование- Псевдонимы-никнеймы Блок 1- опросник 1
13. История развития средств связи в России от почтовых коней до мобильной связи Обзорная экскурсия п.html
14. Расчет количества покупных товаров реализуемых за день в кафе и баре
15. аУ каждого святого есть прошлое у каждого грешника есть будущее У каждого святого есть прошлоеу каждого г
16. і Одним із впливових напрямів формування ринкових відносин є фінансові та банківські інститути без яких не
17. на тему- ldquo; Джейсон Стетхем ldquo;
18. на тему- Поезія Емми Андієвської
19. брате Гарно вмієш замітати
20. Органы местного управления