Code segment ;директива начала сегмента кода

assume cs: code, ds: data ;задание сегментных регистров

Start: mov ax,data ;загрузка адреса

Mov ds,ax ;сегмента данных в регистр ds

.

.

Текст программы

Quit: mov ax,4c00h ;код завершения 0

Int 21h ;выход в DOS

Code ends ;директива конца сегмента кода

End start ;конец трансляции программы

Загрузка адреса сегмента данных состоит из двух команд, так как непосредственные данные нельзя заносить прямо в сегментный регистр.

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

Обработка программ в MS-DOS

Обработка программ на языке ассемблера в MS-DOS состоит из следующих этапов:

1) создать с помощью текстового редактора файл с текстом программы на языке ассемблера;

2) транслировать программу с помощью ассемблера TASM (или MASM);

3) Скомпоновать программу с помощью компоновщика (редактора связей) TLINK(или LINK);

Запустить программу на выполнение (через отладчик).

Файл исходного текста программы должен иметь расширение *.asm.

Запуск транслятора осуществляется командой: tasm <исходный файл >.

При этом будет создан объектный файл (*.obj).

Компоновщик использует объектный файл и создаёт исполняемый файл с расширением по умолчанию *.exe. Запуск компоновщика осуществляется командой: link < объектный файл >.

Для запуска под отладчиком необходимо запустить отладчик и загрузить исполняемый файл.

Пример выполнения работы

Задание: Вычислить Х = 3А+(В+5)/2–С–1, где А,В,С,Х – целые знаковые числа занимающие слово. Написать программу, реализующую данную формулу.

Распишем формулу по отдельным операциям:

АХ ← А ; значение А в регистре АХ

АХ ← 2*(АХ) ; значение 2А в регистре АХ

АХ ← (АХ) + А ; значение 3А в регистре АХ

ВХ ← В ; значение В в регистре ВХ

ВХ ← 5 + (ВХ) ; значение (В+5) в регистре ВХ

ВХ ← (ВХ)/2 ; значение (В+5)/2 в регистре ВХ

АХ ← (BX)+(AX) ; значение 3А+(В+5)/2 в регистре АХ

АХ ← (АХ)–С ; значение 3А+(В+5)/2–С в регистре АХ

АХ ← (АХ)–1 ; значение 3А+(В+5)/2–С–1 в регистре АХ

Х ← (АХ) ; значение 3А+(В+5)/2–С–1 в регистре Х

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

Листинг 2.9. Пример программы

Data segment

A dw 10

B dw 20

C dw 5

X dw ?

Data ends

Code segment

Assume cs: code, ds: data

Start: mov ax, data

Mov ds, ax

Mov ax, a

Sal ax, 1

Add ax, a

Mov bx, b

Add bx, 5

Sar bx, 1

Add ax, bx

Sub ax, c

Dec ax

Mov x, ax

quit:

Mov ax, 4c00h

Int 21

Code ends

End start

Варианты заданий

Разработать программу, реализующую указанную формулу (переменные в программе имеют размер слова). Проверить работоспособность программы на нулевом, единичном и произвольном наборах входных данных. Объяснить полученные результаты. Подтвердить полученные значения расчетами вручную или на калькуляторе.

Блок 1.

1. Х= 4А–3В+С/4

2. Х= 6А-5*(В+С)/2–1

3. Х= (А+2В–С)/4

4. Х= (С–А)/2+(В+С)/8

5. Х= (4А–7В–32С)/2

6. Х= – (–(С+2А)*5+В)

7. Х= 3*(А–2В)+50–С/2

8. Х= (3А+2В) –С/4+217

9. Х= 3*(С–2A)+(В–С+1)/2

10. Х= (2А+В)/4–С/2+168

11. Х= 6*(А-2В+С/4)+10

12. Х= 3*(А–4В)+С/4

13. Х= – (– (С +2А)*5+В*16)

14. Х= А/2–3*(А+В)+С*4

15. Х= 3*(А–2В)+50–С/2

16. Х= 5А+2В–С/4+131

17. Х= А–5*(В–2С)+2

18. Х= –4А+(В+С)/4+2

19. Х= 7А–2В–100+С/2

20. Х= –А /2+4*(В+1)+3С

21. Х= 5*(А–В) –2С+5

22. Х= (А/2+В)/4+С–1

23. Х= – (С+2А+4В)+18

24. Х= 6А+(В–С+1)/2

25. Х= 2–8*(А+В)+С/4

Блок 2.

1. Х= 2В–1+4*(А–3С)

2. Х= (2А+В)/4–С/2+144

3. Х= 6*(А–2В+С/4)+10

4. Х= (С–3А)/4+В/8

5. Х= (5А–В–10С)/4

6. Х= – (–(2*С+5А)*3+2В)

7. Х= –7*(3А–В)+40–С/4

8. Х= (6А–В)+С/2–103

9. Х= 15*(С–A)+(В–С)/8

10. Х= (А+4В)/8–2С+16А

11. Х= 4*(3А-7В+С/16)+12

12. Х= –3*(4А–3В)+С/2

13. Х= – (С +6А)*15+В/16

14. Х= –А/4–5*(2А–В)+С/2

15. Х= –16*(3А–2В)+77–С/64

16. Х= 18А+64В–(С–А)/64+17

17. Х= 4А–15*(2В–2) –22

18. Х= 4А+3*(В+С)/4–42

19. Х= 7А+9В–106+С/16

20. Х= –А/4–9*(В+11)+15С

21. Х= 2*(7А–В) –12С+55

22. Х= 3*(А/2+В/16)+С/32–61

23. Х= –(–(С+2А+4В)+16А)

24. Х= –4А+(В+3С–1)/2

25. Х= 12+16*(2А+3В)+С/2

Блок 3.

1. Х= 3В+19+3*(2А–3С)

2. Х= –(С–2А–3В) –98

3. Х= –6А+(3В–4С+11)/4

4. Х= –2–8*(7А–В)–С/4

5. Х= – (2А+В)/2–С/2–101

6. Х= –6*(3А–В–С/4) –55

7. Х= (2С–3А)/2–В/4

8. Х= (–3А–4В+С)/16

9. Х= 5*(–3А+В) –14–С/8

10. Х= – (6–А+В) –С/2+13

11. Х= –8*(4А–С)–(В+3С)/4

12. Х= (А–3В)/8+3С–55

13. Х= 6*(3А–В)+С/4

14. Х= –(–(3С–11А)*16–В/4)

15. Х= А/8–4*(А+3С)+А/2

16. Х= 14*(2–3А)+64В+С/8

17. Х= –4А+16*(–2В+11)–65С

18. Х= –4А+5*(2В+С)/4+100

19. Х= 129А+9В–256–С/16

20. Х= А/16+2*(3В–91) –16С

21. Х= –2*(7А+В) +33С+400

22. Х= А/2–В/8+4*(С/32–61)

23. Х= –(–2*(С–3А+35В) –А)

24. Х= 4А-5*(2*В–С–11)/4

25. Х= 93–8*(2А+3В) –С/2

2.4 Контрольные вопросы

Назначение директив SEGMENT и ENDS.

Назначение директивы ASSUME.

Назначение директив DB, DW.

Назначение оператора DUP в директивах DB, DW.

Назначение директивы END.

Из каких полей состоит строка программы на ассемблере?

Какие поля обязательны, а какие можно опустить?

8. В чем различие между командами: mov AX, BX и mov AX, [BX]?

В чем разница между командой mov A, 1 и директивой А dw 1?

10. Как Вы считаете, почему в рассмотренном примере для вычитания единицы использовался оператор: dec ax, а не оператор sub ax,1?

Лабораторная работа № «Команды языка Ассемблер. Циклические и разветвляющиеся программы»

Цель работы: научиться использовать циклы и условия при написании программ на языке ассемблер.

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

Теоретические сведения

Электронное представление чисел

Команды передачи, управления служат для передачи управления инструкции, не следующей непосредственно за данной. Управление может передаваться как внутри текущего сегмента кода (внутрисегментная передача управления), так и за его пределы (межсегментная передача управления). Тип передачи управления может быть задан ассемблеру предшествующим адресу перехода ключевым словом NEAR (внутрисегментная) или FAR (межсегментная).

Безусловные переходы

Инструкция безусловного перехода передаёт управление команде, адрес которой указан в инструкции. Команда безусловного перехода имеет вид, представленный в листинге 3.1.

Листинг 3.1. Синтаксис команды условного перехода

jmp [< тип > ptr ] операнд.

<тип> - тип перехода short (короткий) – смещение 127 байтов вперёд или 128 байтов назад, near (близкий) – смещение в пределах сегмента (64 Кбайта), far (дальний) – в любой сегмент с любым смещением.

ptr – приставка, которую можно перевести как указанный в...

Наши рекомендации