Библиотека knigago >> Компьютеры: Языки и системы программирования >> Assembler >> Ассемблер в примерах и задачах


СЛУЧАЙНЫЙ КОММЕНТАРИЙ

# 130, книга: Дочь демона (СИ)
автор: Марина Евгеньевна Котлова

Вначале вполне себе, но к концу... Все розовей и розовей, наивней и наивней, слаще и слаще. Пока за 20 страниц до окончания, зубы совсем не завязли. Увы дотянуть до конца не смогла.

СЛУЧАЙНАЯ КНИГА

Старик Иуда. Ги де Мопассан
- Старик Иуда

Жанр: Классическая проза

Год издания: 1958

Серия: Мисти

Наталья Юрьевна Добровольская , Олег Васильевич Гаркуша - Ассемблер в примерах и задачах

Ассемблер в примерах и задачах
Книга - Ассемблер в примерах и задачах.  Наталья Юрьевна Добровольская , Олег Васильевич Гаркуша  - прочитать полностью в библиотеке КнигаГо
Название:
Ассемблер в примерах и задачах
Наталья Юрьевна Добровольская , Олег Васильевич Гаркуша

Жанр:

Учебники и самоучители по компьютеру, Программирование: прочее, Assembler

Изадано в серии:

неизвестно

Издательство:

Кубанский государственный университет

Год издания:

ISBN:

978-5-8209-2052-3

Отзывы:

Комментировать

Рейтинг:

Поделись книгой с друзьями!

Помощь сайту: донат на оплату сервера

Краткое содержание книги "Ассемблер в примерах и задачах"

Изложены фундаментальные темы: организация современного компьютера, устройство процессоров семейства IA-32, синтаксис языка ассемблера, макросредства, программирование типовых управляющих структур, сложные структуры данных, оптимизация программ. Приведены многочисленные примеры, иллюстрирующие материал. Адресуется студентам факультета компьютерных технологий и прикладной математики, изучающим основы программирования.

Читаем онлайн "Ассемблер в примерах и задачах". [Страница - 17]

L

Тогда повторение N раз (N > 0) некоторой группы команд
(тело цикла) можно реализовать так:
MOV CX/ECX, N
L:
… {тело цикла}
LOOP L

Команда LOOP требует, чтобы в качестве счётчика цикла
использовался регистр CX/ECX. Собственно, команда LOOP
вычитает единицу именно из этого регистра, сравнивает
полученное значение с нулём и осуществляет переход на
указанную метку, если значение в регистре ECX больше 0. Метка
определяет смещение перехода, которое не может превышать 128
байт.
При использовании команды LOOP следует также учитывать,
что с её помощью реализуется цикл с постусловием,
60

Команды управления циклом

следовательно, тело цикла выполняется хотя бы один раз. Если до
начала цикла записать в регистр CX/ECX значение ≤ 0, то при
вычитании единицы, которое выполняется до сравнения с нулём,
в регистре CX/ECX окажется ненулевое значение, и цикл будет
выполняться 232 раз.
Команда LOOP не относится к самым быстрым командам. В
большинстве случаев её можно заменить последовательностью
других команд.
Поскольку команда LOOP ставится в конце цикла, то тело
цикла хотя бы раз обязательно выполнится. Поэтому для случая
EСХ = 0 наша схема цикла не подходит. Если возможен вариант,
когда число повторений может быть и нулевым, то при EСХ = 0
надо сделать обход цикла:
MOV
JECXZ
L:

LOOP
L1: …

ECX, N
L1
; ECX=0 -> L1;
; тело цикла
L

Для осуществления таких обходов в ПК была введена
команда условного перехода JECXZ. В иных ситуациях она
используется редко.
Рассмотрим пример использования команды LOOP.
Пример 9. Пусть X и Y – байтовые переменные со значением
от 0 до 6 и надо в регистр АХ записать степень Y числа X: АХ = XY

(отметим, что 66 = 46656 < 216).
Для решения этой задачи надо вначале положить АХ = 1, а
затем Y раз выполнить умножение AX = AX*X. При этом следует
учитывать, что при Y = 0 цикл не должен выполняться.
MOV АХ, 1
MOV CL, Y
MOV CH, 0
JCXZ L1
MOV SI, X
L: MOV DX, 0
MUL SI
LOOP L

; AX=1
; CX=Y как слово (счетчик цикла)
; При N=0 обойти цикл
; (DX,AX)=AX*X (DX=0)
61

Ассемблер в примерах и задачах

L1:



Другой пример использования оператора цикла в программе
— обработка последовательности чисел.
Пример 10. Дана последовательность из N чисел. Найти
сумму положительных чисел последовательности.
A
S
N

DW ?
DW 0
DW ?
MOV CX, N
; Ввод количества чисел N
L1: ; Ввод числа а
CMP A, 0
;если N / 2

EDX
N
0

; Если делитель = > N - составное

2

; Проверяем только нечетные
68

L02:
MOV F, 0
; Устанавливаем флаг в 0
L03:
}
cout --">

Оставить комментарий:


Ваш e-mail является приватным и не будет опубликован в комментарии.