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


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

# 1087, книга: В опасности
автор: Флинн Берри

"В опасности" Флинн Берри - это напряженный и захватывающий триллер, который увлечет читателей с самого начала до шокирующего конца. История вращается вокруг жизни Лоретты, женщины, которая бежит от своего прошлого, но вскоре понимает, что ей не уйти от "скелетов в шкафу". После жестокого убийства ее мужа Лоретта решает начать новую жизнь в отдаленном городке. Однако ее чувство безопасности оказывается под угрозой, когда она сталкивается с серией загадочных и угрожающих...

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

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

Жанр:

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

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

неизвестно

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

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

Год издания:

ISBN:

978-5-8209-2052-3

Отзывы:

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

Рейтинг:

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

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

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

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

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

вперед
или назад. Это примерно 30–40 команд (в среднем одна команда
ПК занимает 3–4 байта).
Для реализации длинных условных переходов надо
привлекать команду длинного безусловного перехода. Например,
при «далекой» метке М оператор
if AX=BX then

goto M

следует реализовывать так:
if АХВХ
goto M
L:


M:


then

goto

L ; Короткий переход
; Длинный переход

На ЯА это записывается следующим образом:
CMP AX, BX
JNE L
JMP M
L:


M:


; Короткий переход
; Длинный переход

55

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

Отметим, что использовать в командах условного перехода
оператор SHORT не надо, так как все эти переходы и так короткие.
Пример 5. Дана последовательность чисел. Признак
завершения ввода — 0. Найти количество чисел, кратных 3.
A
K
TRI

DW ? ; Переменная для ввода числа
DW 0 ; Результат – количество чисел
DB 3 ; Делитель

L1: ; Ввод числа а
CMP A, 0
; Проверка на окончание ввода
JE EX
MOV AX, A
DIV TRI
; Проверка свойства кратности 3
CMP AH,0
JNE L2
INC K
; Подсчет количества
L2: JMP L1
EX: ; Вывод числа k

Рассмотренный пример некорректно работает при вводе
отрицательных чисел. Модифицируем пример так, чтобы
отрицательное число перед проверкой на кратность изменяло знак.
Пример 6.
A
K
TRI

DW ? ; переменная для ввода числа
DW 0 ; результат – количество чисел
DB 3 ; делитель

L1: ; Ввод числа A
CMP A, 0
JE EXIT
JGE L3
NEG A
; Если A < 0, то меняем знак
L3:
MOV AX, A
DIV TRI
CMP AH, 0
JNE L2
INC K
L2:
JMP L1
EXIT: ; Вывод числа k

56

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

Пример 7. Найти сумму цифр заданного натурального числа.
.686
include /masm32/include/io.asm
.data
MsgInput db "Введите положительное число > ",0
MsgOutput db "Сумма цифр равна ",0
ten dw 10
.code
start:
print "Введите положительное число > "
inint EAX
; Ввод числа
MOV EBX,
L:
MOV EDX,
DIV ten
ADD EBX,
цифру)
CMP EAX,
jne L

0

; EBX = 0

0

; Делим EDX:EAX
; на 10
; Прибавляем остаток (последнюю

EDX
0

; Если число не равно нулю, то
; возврат к метке L

print "Сумма цифр равна "
outint EBX
; вывод результата
exit
end start

Пример 8.
Дано
натуральное число
N.
Дана
последовательность, состоящая из N чисел. Найти количество
чисел, кратных пяти.
.686
include /masm32/include/io.asm
.data
MsgInput db "Введите количество элементов
последовательности > ",0
MsgInput2 db "Введите элементы > ",0
MsgOutput db "Количество : ",0
five dw 5
a dd ?
N dd ?
count dd ?
.code
start:
print "Количество элементов последовательности >"
inint N
; Ввод N
57

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

print "Введите
MOV ECX, N
;
MOV count, 0 ;
L:
inint a
;
MOV EDX, 0
MOV EAX, a
;
DIV five
;
CMP EDX, 0
;
JNE LL
;
INC count
;
LL: LOOP L

элементы > "
Число повторений цикла
Обнуляем счетчик
Ввод элемента
Деление элемента
на 5
Если не делится нацело,
то переход в конец цикла,
иначе увеличиваем количество

; следующая итерация цикла
; (возврат к метке L)

print "Количество : "
outint count ; вывод результата
exit
end start

5.3. ВЫЧИСЛЕНИЕ ЛОГИЧЕСКИХ ВЫРАЖЕНИЙ
При программировании на ЯА сложных булевских
выражений можно обойтись без логических команд, достаточно
лишь команд сравнения и условных переходов. Например,
условный оператор
if (AX>0) or (DX=l) then goto L

можно запрограммировать так:
CMP
JG
CMP
JE

AX, 0
L
DX, 1
L

; AХ>0 → L
; DX=1 → L

Для оператора
if (AX > 0) && (DX = 0) {
goto L
}

допустима такая последовательность команд:
CMP
JLE
CMP
JNE
JMP

AX,
M
DX,
M
L

0
; AХ0)
{ S1 }
else { S2 }
CMP X, 0
JLE L2
S1
JMP Fin
L2: S2
Fin: …

while (X>0)
{ S }
Beg:
CMP X, 0
JLE Fin
S
JMP Beg
Fin: …

do
{ S }
while (X 0) S

; if (A > 0 || B > 0) S

CMP x, 0
JLE L
...
L:

; if (X = 0) S1 else S2

CMP A, 0
JG L1
CMP B, 0
JLE L2
L1: ...
; S
L2:
; if (A > 0 && B > 0) S

CMP X, 0
JE L1
...
JMP L2
L1:
L2:

CMP
JLE
CMP
JLE
...
L:

; S

; S1
; S2

59

A, 0
L
B, 0
L
; S

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

; while (X > 0) do S

; do S while (X > 0)

L1: CMP X, 0
JLE L2
...
JMP L1
L2:

L:
; S

...
CMP X, 0
JG L

; S

5.5. КОМАНДЫ УПРАВЛЕНИЯ ЦИКЛОМ
5.5.1. Команда LOOP
Наиболее часто используемым является цикл с заранее
известным числом повторений тела цикла.
В качестве счетчика цикла обязательно использовать регистр
CX/ECX. Начальное значение для CX/ECX должно быть присвоено
до цикла.
Описать работу этой команды можно так:
CX = N
L:
… {тело цикла}
CX = CX - 1
if CX 0 then goto --">

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


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