Главная Случайная страница


Полезное:

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


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






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





Как известно, организация циклов связана, во-первых, с формированием условия входа(выхода) в(из) цикла и, во-вторых, с, вычислением адреса входа(выхода) в(из) цикла.

Исключая команду LOOP, формирование условий выполняется программистом с помощью команд условных переходов. Различают знаковые, беззнаковые и специальные арифметические команды условных переходов

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

Синтаксис Описание переходов Флаги
JЕ/JZ <метка> Если равно/нуль ZF=1
JNЕ/JNZ <метка> Если не равно/не нуль ZF=0
JA <метка> Если выше ZF=0&CF=0
JAE <метка> Если выше или равно CF=0
JB <метка> Если ниже CF=1
JBE <метка> Если ниже или равно CF=1&ZF=1

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

Синтаксис Описание переходов Флаги
JЕ/JZ <метка> Если равно/нудь ZF=1
JNЕ/JNZ <метка> Если не равно/не нуль ZF=0
JG <метка> Если больше ZF=0ÚSF=OF
JGE <метка> Если больше или равно SF=OF
JL <метка> Если меньше SF¹OF
JLE <метка> Если меньше или равно ZF=1ÚSF¹OF

 

Специальные команды условных переходов

Синтаксис Описание переходов Флаги
JS <метка> Если знак отрицательный SF=1
JNS <метка> Если знак положительный SF=0
JC <метка> Если есть перенос CF=1
JNC <метка> Если нет переноса CF=0
JO <метка> Если есть переполнение OF=1
JNO <метка> Если нет переполнения OF=0
JP <метка> Если паритет четный PF=1
JNP <метка> Если паритет нечетный PF=0
JCXZ <метка> Если СХ=0 -

 

Команда JMP <метка> передает управление по указанному в метке адресу в пределах текущего или другого программного сегмента.

 

Команда JMP имеет 5 вариантов:

 

Название перехода Атрибут метки Границы перехода
Прямой короткий SHORT -128¸127 байт, т.е. размер метки – 8 бит
Прямой ближний NEAR PTR Текущий сегмент кода и размер метки 16 бит
Прямой дальний FAR PTR Другой сегмент кода и размер метки 32 бита
Косвенный ближний WORD PTR Меткой явл. регистр или ячейка памяти в 16 бит
Косвенный дальний DWORD PTR Меткой явл. регистр или ячейка памяти в 32 бита

 

Пример 5.

Jmp short addr; прямой короткий переход на addr

Jmp addr; прямой короткий переход на addr, если addr- ссылка вверх программы

 

Jmp near addr; прямой ближний переход

Jmp addr; прямой ближний переход, если addr- ссылка вниз программы

 

Jmp far ptr addr; прямой дальний переход на addr, addr понимается компилятором TASM как 32-битная величина

 

Jmp DS:mem1; косвенный ближний переход по значению 16-битной ячейки mem1

Jmp word ptr [bx]; косвенный ближний переход по 16-битному адресу ячейки памяти, который определяется косвенно через BX

 

Jmp DS:mem2; косвенный дальний переход по значению 32-битной ячейки mem2

Jmp dword ptr [bx]; косвенный дальний переход по 32-битному адресу ячейки памяти, который определяется косвенно через BX

Задача. По 2-мерному массиву 4´4 типа WORD построить одномерный массив, каждый элемент которого является суммой элементов соответствующего столбца

Решение. Для обхода элементов 2-мерного массива будем использовать базово-индексную адресацию, где база будет определять адрес столбца, а индекс- номер элемента в столбце.При организации циклов следует различать 2 типа регистров: регистры, описывающие количество повторений, (как правило, это регистр общего назначения СХ) и регистры адресации элементов массива
(базовые и/или индексные регистры).

Составим граф-схему алгоритма решения (рис.5)

Пусть MAS – исходный 2-мерный массив, а REZ- массив результата. Для накопления суммы по текущему столбцу будем использовать регистр DX. Условимся использовать регистр СХ как счетчик повторений при обходе массива по столбцам и при обходе по элементам в пределах столбца. Для адресации элементов будем использовать регистр ВХ как адрес столбца, а SI – как индекс в текущем столбце. Наконец, DI – как индекс элемента REZ.

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

SI=SI + m*2

Рис.5

 

Turbo Assembler Version 3.1 19/03/99 18:29:37 Page 1

mas2.asm

 

1 0000.model small

2 0000.data

3 =0004 m=4; кол-во столбцов

4 =0004 n=4; кол-во строк

5 =0001 const=1

*Warning* mas2.asm(6) Reserved word used as symbol: CONST

6 0000 0001 0002 0003 0004mas dw 1, 2, 3, 4

7 0008 0005 0006 0007 0008 dw 5, 6, 7, 8

8 0010 0009 000A 000B 000C dw 9,10,11,12

9 0018 000D 000E 000F 0010 dw 13,14,15,16

10 0020 04*(????) rez dw 4 dup(?)

11 0000.stack 128

12 0028.code

13;assume CS:code, DS:data, SS:stack

14 0000 B8 0000s mov ax,@data

15 0003 8E D8 mov ds,ax

16; begin

17 0005 2B FF sub di,di; di=0

18 0007 2B DB sub bx,bx; bx=0

19 0009 B9 0004 mov cx,m; внеш. цикл

20 000C 51 met2: push cx

21 000D B9 0004 mov cx,n внутр. цикл

22 0010 33 F6 xor si,si; si=0

23 0012 BA 0000 mov dx,0

24 0015 03 90 0000r met1: add dx,mas[bx][si]

25 0019 B8 0004 mov ax,m;

26 001C D1 E0 shl ax,const si=si+m*2

27 001E 03 F0 add si,ax;

28 0020 E2 F3 loop met1

29 0022 59 pop cx; востанов. СХ для внеш. цикла

30 0023 89 95 0020r mov rez[di],dx

31 0027 83 C7 02 add di,2

32 002A 83 C3 02 add bx,2

33 002D E2 DD loop met2

34; завершение работы

35 002F B8 4C00 mov ax,4c00h

36 0032 CD 21 int 21h

37 end; begin

 

Особенность программирования массивов на Ассемблере состоит в том, что N-мерные массивы в памяти отображаются как одномерные, поэтому доступ к ячейке N-мерного массива masN, в общем случае, выполняется по формуле:

masN[addr1][addr2]addr3]…..[addrN]

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

1. Написать программу для поиска минимального и максимального чисел в двумерном массиве 4´4. Исходный массив задается в сегменте данных. Тип элемента – dd.

2. Написать программу для вычисления сумм элементов строк двумерного массива слов 4´4. Полученные значения сохранить в массиве. Исходный массив задается в сегменте данных.

3. Написать программу для вычисления 12 чисел Фиббоначи. Полученные числа сохранить в 2-мерном массиве 6х2. (1,1,2,3,5,8,13 …)

4. Написать программу для вычисления суммы элементов выше главной диагонали двумерного массива N´N. Исходный массив задается в сегменте данных.(N=4). Тип данных – DW.

5. Написать программу для подсчета четных и нечетных элементов в двумерном массиве N´N. Исходный массив задается в сегменте данных.(N=4). Тип элементов DD.

6. Написать программу для заполнения элементов ниже главной диагонали 0 двумерного массива N´N. Исходный массив задается в сегменте данных.(N=4).

7. Написать программу для транспонирования 2-мерной матрицы байт. N´N(N=4)

8. Написать программу для суммирования элементов массива слов, начиная с нулевого, в шахматном порядке. (N´N, N=4).

9. Написать программу для заполнения элементов массива слов квадратами натуральных чисел (2, 4, 9…), начиная с нулевого, в шахматном порядке. (N´N, N=4).

10. Написать программу для вычисления сумм элементов столбцов двумерного массива байт 4´4. Полученные значения сохранить в массиве. Исходный массив задается в сегменте данных.

11. Написать программу, которая умножает элементы «четных» столбцов на 2, а «нечетных» строк на 4. Исходный массив байт 4´4 задается в сегменте данных.

12. Написать программу для декрементирования четных и инкрементирования нечетных элементов в двумерном массиве N´N. Исходный массив задается в сегменте данных.(N=4). Тип элементов DD

 

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

1. Как организовать цикл с постусловием с переменным количеством повторов

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

3. Как организовать циклы типа FOR TO и WHILE DO

4. Зачем используются команды PUSH и POP при организации вложенных циклов с LOOP. Каким образом можно обойти требование использования PUSH,POP.

5. Назовите недостатки различных типов организации циклов

6. Какие существуют атрибуты адреса команды JMP. Какой атрибут используется по умолчанию.

7. Приведите все варианты записей адресаций: базово-индексной и базово-индексной со смещением. Что такое относительная адресация. Пример

8. Задайте 4-х мерный массив и обратитесь к ячейке с номером [3,5,1,1].

9. Сравните маш. коды JMP при прямом коротком, прямом ближнем, прямом дальнем переходах.

10. Можно ли использовать атрибуты адреса в командах условных переходов. Почему?

 

Date: 2015-05-22; view: 659; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию