SlideShare a Scribd company logo
1 of 41
Системное программирование
Кыргызско – Российский Славянский
Университет
Кафедра ИВТ, 3-й курс ЕПИ, 5 семестр
Лекция 3
План лекции
 Accемблер
– Формат операторов ассемблера
– Определение полей памяти для размещения данных.
– Операнды команд ассемблера.
– Команды пересылки / преобразования данных
– Команды передачи управления.
– Команды обработки строк.
– Команды манипулирования битами.
– Команды ввода - вывода.
 Литература
Ассемблер
Предложения ассемблера бывают четырех типов:
 команды или инст рукции, представляющие собой
символические аналоги машинных команд.
В процессе трансляции инструкции ассемблера
преобразуются в соответствующие команды системы команд
микропроцессора;
 макрокоманды — оформляемые определенным образом
предложения текста программы, замещаемые во время
трансляции другими предложениями;
 директ ивы, являющиеся указанием транслятору ассемблера
на выполнение некоторых действий. У директив нет аналогов
в машинном представлении;
 ст роки коммент ариев, содержащие любые символы, в том
числе и буквы русского алфавита. Комментарии
игнорируются транслятором.
Формат команды ассемблера
[<Метка> :] <Код операции > [<Список операндов >]
[; <Комментарий>]
Примеры:
1) m1: mov AX,BX ; пересылка числа
2) cbw ; преобразование в слово
3) ; суммы по месяцам
Операнды команд ассемблера
1. Операнды команд ассемблера могут размещаться:
а) в регистрах;
б) в команде – литералы;
в) в памяти.
Примеры:
1) mov AX,10
2) mov AX, 6[BX+DI] ; сегментный регистр по умолчанию - DS
2. Длина операнда определяется:
а) кодом команды:
б) регистром:
в) явно: byte ptr, word ptr, dword ptr
Пример:
mov 0[BX],10  mov word ptr 0[BX],10
Символическая адресация
Адреса (метки) переходов и местоположение данных, размещенных в оперативной
памяти, в программе могут указываться с использованием символических имен:
jmp met
...
met: mov AX,A+2 ; cycle – метка, А – имя поля данных
При трансляции каждому символическому имени сопоставляется:
 для данных – смещение обозначенного именем адреса относительно начала сегмента
данных (содержимого DS);
 для меток – смещение обозначенного именем адреса относительно начала сегмента
кода (содержимого СS).
Сегмент
кода
СS
met Сегмент
данных
DS
A
jmp CS:[25] mov AX,DS:2[36]
25 36
Определение полей памяти для размещения данных
DB <Число> или (<Список чисел>) или ?
[<Имя поля>] DW < Количество > DUP ( <Список чисел > )
DD < Количество > DUP ( ? )
Примеры:
a db 12
db ?
dw 1234H
db 5 dup (?)
b db ′A′
s dw 4,-1
k db 00001100b
0 C
?
3 4 1 2
? ? ? ? ?
6 1
0 4 0 0 F F F F
a
b
s
0 C
k
Команды пересылки / преобразования данных
1. Команда пересылки данных
MOV <Адрес приемника>,< Адрес источника>
Примеры:
а) mov AX, BX
б) mov SI, 1000
в) mov 0[DI], AL
г) mov AX, code
mov DS, AX
Литерал
Сегментные
регистры
AX,BX,CX,DX,
SI, DI. SP, BP
Оперативная
память
Команды пересылки / преобразования данных (2)
2. Команда обмена данных
ХCHG <Операнд 1> , <Операнд 2>
Примеры:
а) xchg BX, CX
б) xchg BX, 0[DI]
3. Команда загрузки исполнительного адреса
LEA <Регистр> , <Операнд 2>
Пример:
а) lea BX, exword
б) lea DI, 6[BX,SI]
Адрес
сегмента
Смещение
exword
Команды пересылки / преобразования данных
(3)
4-5. Команды загрузки указателя
LDS <Регистр> ,<Операнд 2>
LЕS <Регистр > ,<Операнд 2>
Пример:
lds SI, exword
6-7. Команда записи слова в стек и извлечения из стека
PUSH <Операнд>
POP <Операнд>
Примеры:
push SI
pop 0[BX]
Команды пересылки / преобразования данных (4)
8-9. Команды сложения
ADD <Операнд 1>, <Операнд 2>
ADC <Операнд 1>, <Операнд 2>
Пример. Сложение 32-разрядных чисел
mov AX,value1
add AX,value2
mov res,AX
mov AX,value1+2
adc AX,value2+2
mov res+2,AX
10-11. Команды вычитания
SUB <Операнд 1>, <Операнд 2>
SBB <Операнд 1>, <Операнд 2>
мл.байт ст.байт
Команды пересылки / преобразования данных (5)
12. Команда сравнения
СМP <Операнд 1> , <Операнд 2>
Примеры:
а) cmp AX,5
б) cmp byte ptr 0[BX],’A’
13-14. Команда добавления/вычитания единицы
INC <Операнд>
DEC <Операнд>
Примеры:
inc AX
dec byte ptr 8[BX,DI]
15. Команда изменения знака
NEG <Операнд>
Команды пересылки / преобразования данных (6)
16-17. Команды умножения
MUL <Операнд>
IМUL <Операнд>
mov AX,4
imul word ptr A
Команды пересылки / преобразования данных (7)
18-19. Команды «развертывания» чисел
CBW ; AL -> AX
CWD ; AX -> DX:AX
Команды пересылки / преобразования данных (8)
20-21. Команды деления
DIV <Операнд>
IDIV <Операнд>
mov AX,40
cwd
idiv word ptr A
Пример программирования выражения
X = (A+C)(B-1)/(C+8)
Сегмент данных:
A dw 25
B dw -6
C dw 11
X dw ?
Сегмент кода:
mov CX,C
add CX,8
mov BX,B
dec BX
mov AX,A
add AX,C
imul BX
idiv CX
mov X,AX
Команды передачи управления
1. Команда безусловного перехода
short
JMP near ptr <Символическое имя или адрес>
far ptr
Примеры:
а) jmp short Label1
б) cycle: …
jmp cycle
в) jmp BX
г) jmp dword ptr [BX]
Команды передачи управления (2)
2. Команды условного перехода
<Команда> <Символическое имя или адрес>
Команды условного перехода:
JZ – переход по "ноль";
JE – переход по "равно";
JNZ – переход по "не нуль";
JNE – переход по "не равно";
JL – переход по "меньше";
JNG, JLE – переход по "меньше или равно ";
JG – переход по "больше";
JNL, JGE – переход по "больше или равно ";
JA – переход по "выше" (беззнаковое “больше”);
JNA, JBE – переход по "не выше"(беззнаковое “не больше”);
JB – переход по "ниже" (беззнаковое “меньше”);
JNB, JAE – переход по "не ниже" (беззнаковое “не меньше”).
Условный переход на более чем 128 байт
jz zero jnz continue
jmp zero
continue: ...

Пример. Определение НОД
code segment
assume cs:code,ds:code
c dw ?
a dw 24
b dw 18
begin proc far
push DS
mov AX,0
push AX
mov AX,code
mov DS,AX
Пример. Определение НОД (2)
mov ax,a
mov bx,b
cycl: cmp ax,bx
je kon
jl lit
sub ax,bx
jmp short com
lit: sub bx,ax
com: jmp cycl
kon: mov c,ax
ret
begin endp
code ends
end begin
Начало
Ввод
A, B
A=B
A>B
A:=A-B B:=B-A
Вывод
A
Конец
нет
да
да нет
com kon
cycl
lit
Команды передачи управления (3)
3. Команды организации циклической обработки
1) Команда организации цикла
LOOP < Символическое имя или адрес>
Пример:
mov cx, loop_count
begin_loop: < Тело цикла>
…
loop begin_loop
Команды передачи управления (4)
2) Команда перехода по обнуленному счетчику
JCXZ <адрес перехода>
Пример:
mov cx, loop_count
jcxz end_of_loop
begin_loop: < Тело цикла >
…
loop begin_loop
end_of_loop: ...
Команды передачи управления (5)
3) Команды организации цикла с условием
LООРE <Символическое имя или адрес>
LOOPNE <Символическое имя или адрес>
Пример:
mov CX, loop_count
jcxz end_of_loop
begin_loop:
< Тело цикла>
cmp al, 100
loopne begin_loop
end_of_loop: ...
Программирование циклической обработки
Пример. Определить сумму натуральных чисел 1..n.
; сегмент данных
S dw 0
n dw 18
; сегмент кода
mov CX,n
mov AX,0
cycle: add AX,CX
loop cycle
mov S,AX
S=0
i=1,n
S=S+i
mov CX,n
mov AX,0
mov BX,1
cycle: add AX,BX
inc BX
loop cycle
mov S,AX
Программирование обработки массивов
A dw 4,6,-1,7,5
Вариант 1
mov AX,0
lea BX,A
mov CX,5
cycle:add AX,0[BX]
add BX,2
loop cycle
4 6 -1 7 5
A
S=0
i=1,n
S=S+A[i]
Вариант 2
mov AX,0
mov BX,0
mov CX,5
cycle:add AX,A[BX]
add BX,2
loop cycle
4 6 -1 7 5
A
DS
4 6 -1 7 5
A
DS
BX BX
A db 2,3,1,-1,8
db 6,-8,5,4,7
db 8,6,3,1,6
mov BX,0
mov CX,3
cycle1: push CX
mov CX,5
cycle2: ... A[BX]
inc BX
loop cycle2
pop CX
loop cycle1
Программирование обработки матриц
A db 2,3,1,-1,8
db 6,-8,5,4,7
db 8,6,3,1,6
mov BX,0
mov CX,3
cycle1: push CX
mov CX,5
cycle2: ... A[BX]
inc BX
loop cycle2
pop CX
loop cycle1
2 3 -1 -1 8
A
6 -8 5 4 7
8 6 -3 1 6
2 3 -1 -1 8
A
6 -8 5 4 7 8 6 -3 1 6
DS
BX mov DI,0
mov CX,5
cycle1: push CX
mov CX,3
mov BX,0
cycle2: ... A[BX,DI]
add BX,5
loop cycle2
pop CX
inc DI
loop cycle1
DI
Команды передачи управления (6)
4) Команды вызова подпрограмм
а) Команда вызова процедуры
CALL <Символическое имя или адрес >
б) Команда возврата управления
RET [<Целое>]
Текст процедуры должен быть оформлен в виде:
<Имя процедуры> ргос < Описатель удаленности>
<Тело процедуры>
<Имя процедуры> endp
Организация передачи управления в процедуру
CALL <Имя>
<Имя> PROC
RET
<Имя> ENDP
Основная программа Процедура
Адрес возврата
Стек
2 или 4 байта
Команды обработки строк
Элемент: байт или слово
Установка/сброс флага направления:
STD
CLD
DS:SI
ES:DI
Источник
Приемник
DF =0
DF =0
Команды обработки строк (2)
1) Команда загрузки строки LODS
LODSB ; загрузка байта
LODSW ; загрузка слова
2) Команда записи строки STOS
STOSB ; запись байта
STOSW ; запись слова
3) Команда пересылки MOVS.
MOVSB ;пересылка байта
МОVSW ;пересылки слова
DS:SI
AX(AL)
ES:DI
AX(AL)
DS:SI
ES:DI
Команды обработки строк (3)
4) Префиксная команда повторения
REP <команда>
Пример:
mov CX,10
lea SI, A
lea DI, B
rep movsb
Команды обработки строк (4)
5) Команда сканирования строки SCAS
SCASB ;поиск байта
SCASW ;поиск слова
AX(AL)-(ES:DI) -> флаги
6) Команда сравнения строк CMPS
СMPSB ;сравнение байт
СMPSW ;сравнение слов
(CS:SI)-(ES:DI) -> флаги
AX(AL)
DS:SI
ES:DI
ES:DI
Команды обработки строк (5)
7) Префиксные команды "повторять, пока равно" и "повторять,
пока не равно"
REPE < Команда >
REPNE < Команда >
Пример:
mov CX,10
lea SI, A
lea DI, B
repe cmpsb
Пример. Сравнение строки с таблицей
A B C D E
S F D Y E
D H F Y U
A B C D R
F Y E D K
A B C D E
S Y U F K
S
Tabl
DS:SI
ES:DI
Flaq=0
i = 1,6
S=Tabl[i]
Flaq=0
нет да
Flaq=i
Сравнение строки с таблицей (2)
code segment
assume CS:code,DS:code,ES:code
Flag DB 0
S DB 'ABCDE'
Tabl DB 'ARTYG','FGJJU'
DB 'FGHJK','ABCDY'
DB 'ABCDE','FTYRG'
begin proc far
push DS
mov AX,0
push AX
mov AX,code
mov DS,AX
mov ES,AX
lea SI,S
lea DI,Tabl
mov CX,6
mov BL,1
cld
Cycle: push SI
push DI
push CX
mov CX,5
repe cmpsb
pop CX
pop DI
pop SI
je Found
add DI,5
inc BL
loop Cycle
jmp not_Found
Found: mov byte ptr Flag,BL
not_Found: ret
begin endp
code ends
end begin
Команды манипулирования битами
1. Логические команды
NOT <Операнд> ; логическое НЕ;
AND <Операнд 1>, <Операнд 2> ;логическое И;
OR <Операнд 1>, <Операнд 2> ;логическое ИЛИ;
XOR <Операнд 1>, <Операнд 2> ;исключающее ИЛИ;
TEST <Операнд 1>, <Операнд 2> ; И без записи результата
Пример. Выделить из числа в AL первый бит:
and al, 10000000B
10110001
10000000
10000000
Команды манипулирования битами (2)
2. Команды сдвига
<Код операции> <Операнд>, СL или 1
Команды:
SAL – сдвиг влево арифметический;
SHL – сдвиг влево логический;
SAR – сдвиг вправо арифметический;
SHR – сдвиг вправо логический;
ROL – сдвиг влево циклический;
ROR – сдвиг вправо циклический;
RCL – сдвиг циклический влево с флагом переноса;
RCR – сдвиг циклический вправо с флагом переноса
CF 0
CF 0
CF
0
CF
CF
CF
Команды манипулирования битами (3)
Пример. Умножить число в AX на 10:
mov bx, ax
shl ax, 1
shl ax, 1
add ax, bx
shl ax, 1
Управление вводом/выводом
IN AL или AX, <Порт> или DX
OUT <Порт> или DX, AL или AX
Пример:
in AL, 60H
out60H, AL
МП
Порты
Устройство
в/в
ОП
Интерфейс
Шина
Упр.
шиной
И
н
т
-
с
Генератор
синхронизации
Литература
 1. Бредли Д. Программирование на языке ассемблера для персональных ЭВМ
фирмы IBM.: Пер. с англ. - М. : Радио и связь, 1988. - 448 с.
 2. Дао Л. Программирование микропроцессора 8086:Пер. с англ. - М.: Мир,
1988. - 357 с.
 3. Исида Л. Программирование для микрокомпьютеров: Пер. с яп. - М.: Мир,
1988. - 224 с.
 4. Шнайдер А. Язык ассемблера для персонального компьютера фирмы IBM:
Пер. с англ. - М.: Мир, 1988. - 406 с.
 Лю Ю-Чжен, Гибсон Г. Микропроцессоры семейства 8086/8088. Архитектура,
программирование u проектирование микрокомпьютерных систем.: Пep. с
англ. - М.: Радио и связь, 1987. - 512 с.
 6. Скэнлон Л. Персональные ЭВМ IBM PC и XT. Программирование на языке
ассемблера: Пер. с англ. - М.: Радио и связь. 1989. - 336 с.
 7. Джордейн Р. Справочник программиста персональных компьютеров ЭВМ
IBM PC, XT и AT: Пер. с англ. - М.: Финансы и статистика, 1992. - 544 с.
 8. Финогенов К.Г. Самоучитель по системным функциям MS DOS. - М.: Радио и
связь, Энтроп, 1995. - 382 с.

More Related Content

Similar to system software programming - assembler programming.pp

028
028028
028JIuc
 
Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Alex Tutubalin
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU
 
Как приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMКак приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMTech Talks @NSU
 
Теория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямТеория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямSergey Staroletov
 
027
027027
027JIuc
 
C++ весна 2014 лекция 2
C++ весна 2014 лекция 2C++ весна 2014 лекция 2
C++ весна 2014 лекция 2Technopark
 
Экстремальная оптимизация производительности на примере MongoDB Java Driver
Экстремальная оптимизация производительности на примере MongoDB Java DriverЭкстремальная оптимизация производительности на примере MongoDB Java Driver
Экстремальная оптимизация производительности на примере MongoDB Java DriverVitebsk DSC
 
High Load 2009 Dimaa Rus Ready 16 9
High Load 2009 Dimaa Rus Ready 16 9High Load 2009 Dimaa Rus Ready 16 9
High Load 2009 Dimaa Rus Ready 16 9HighLoad2009
 
Как построить высокопроизводительный Front-end сервер (Александр Крижановский)
Как построить высокопроизводительный Front-end сервер (Александр Крижановский) Как построить высокопроизводительный Front-end сервер (Александр Крижановский)
Как построить высокопроизводительный Front-end сервер (Александр Крижановский) Ontico
 
sphinx Hlpp2008
sphinx Hlpp2008sphinx Hlpp2008
sphinx Hlpp2008Ontico
 
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesPlatonov Sergey
 
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesPlatonov Sergey
 
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru GroupКак не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru GroupMail.ru Group
 
C:\fakepath\кмсзи экз
C:\fakepath\кмсзи   экзC:\fakepath\кмсзи   экз
C:\fakepath\кмсзи экзdarina andr
 
!Predictive analytics part_3
!Predictive analytics part_3!Predictive analytics part_3
!Predictive analytics part_3Vladimir Krylov
 

Similar to system software programming - assembler programming.pp (20)

028
028028
028
 
Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12
 
Clojure #2 (2014)
Clojure #2 (2014)Clojure #2 (2014)
Clojure #2 (2014)
 
SAP hands on lab_ru
SAP hands on lab_ruSAP hands on lab_ru
SAP hands on lab_ru
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVM
 
Как приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMКак приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVM
 
Теория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямТеория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциям
 
027
027027
027
 
My sql 0
My sql 0My sql 0
My sql 0
 
Programming c++ (begin-if-else)
Programming c++ (begin-if-else)Programming c++ (begin-if-else)
Programming c++ (begin-if-else)
 
C++ весна 2014 лекция 2
C++ весна 2014 лекция 2C++ весна 2014 лекция 2
C++ весна 2014 лекция 2
 
Экстремальная оптимизация производительности на примере MongoDB Java Driver
Экстремальная оптимизация производительности на примере MongoDB Java DriverЭкстремальная оптимизация производительности на примере MongoDB Java Driver
Экстремальная оптимизация производительности на примере MongoDB Java Driver
 
High Load 2009 Dimaa Rus Ready 16 9
High Load 2009 Dimaa Rus Ready 16 9High Load 2009 Dimaa Rus Ready 16 9
High Load 2009 Dimaa Rus Ready 16 9
 
Как построить высокопроизводительный Front-end сервер (Александр Крижановский)
Как построить высокопроизводительный Front-end сервер (Александр Крижановский) Как построить высокопроизводительный Front-end сервер (Александр Крижановский)
Как построить высокопроизводительный Front-end сервер (Александр Крижановский)
 
sphinx Hlpp2008
sphinx Hlpp2008sphinx Hlpp2008
sphinx Hlpp2008
 
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templates
 
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templates
 
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru GroupКак не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
 
C:\fakepath\кмсзи экз
C:\fakepath\кмсзи   экзC:\fakepath\кмсзи   экз
C:\fakepath\кмсзи экз
 
!Predictive analytics part_3
!Predictive analytics part_3!Predictive analytics part_3
!Predictive analytics part_3
 

system software programming - assembler programming.pp

  • 1. Системное программирование Кыргызско – Российский Славянский Университет Кафедра ИВТ, 3-й курс ЕПИ, 5 семестр Лекция 3
  • 2. План лекции  Accемблер – Формат операторов ассемблера – Определение полей памяти для размещения данных. – Операнды команд ассемблера. – Команды пересылки / преобразования данных – Команды передачи управления. – Команды обработки строк. – Команды манипулирования битами. – Команды ввода - вывода.  Литература
  • 3. Ассемблер Предложения ассемблера бывают четырех типов:  команды или инст рукции, представляющие собой символические аналоги машинных команд. В процессе трансляции инструкции ассемблера преобразуются в соответствующие команды системы команд микропроцессора;  макрокоманды — оформляемые определенным образом предложения текста программы, замещаемые во время трансляции другими предложениями;  директ ивы, являющиеся указанием транслятору ассемблера на выполнение некоторых действий. У директив нет аналогов в машинном представлении;  ст роки коммент ариев, содержащие любые символы, в том числе и буквы русского алфавита. Комментарии игнорируются транслятором.
  • 4. Формат команды ассемблера [<Метка> :] <Код операции > [<Список операндов >] [; <Комментарий>] Примеры: 1) m1: mov AX,BX ; пересылка числа 2) cbw ; преобразование в слово 3) ; суммы по месяцам
  • 5. Операнды команд ассемблера 1. Операнды команд ассемблера могут размещаться: а) в регистрах; б) в команде – литералы; в) в памяти. Примеры: 1) mov AX,10 2) mov AX, 6[BX+DI] ; сегментный регистр по умолчанию - DS 2. Длина операнда определяется: а) кодом команды: б) регистром: в) явно: byte ptr, word ptr, dword ptr Пример: mov 0[BX],10  mov word ptr 0[BX],10
  • 6. Символическая адресация Адреса (метки) переходов и местоположение данных, размещенных в оперативной памяти, в программе могут указываться с использованием символических имен: jmp met ... met: mov AX,A+2 ; cycle – метка, А – имя поля данных При трансляции каждому символическому имени сопоставляется:  для данных – смещение обозначенного именем адреса относительно начала сегмента данных (содержимого DS);  для меток – смещение обозначенного именем адреса относительно начала сегмента кода (содержимого СS). Сегмент кода СS met Сегмент данных DS A jmp CS:[25] mov AX,DS:2[36] 25 36
  • 7. Определение полей памяти для размещения данных DB <Число> или (<Список чисел>) или ? [<Имя поля>] DW < Количество > DUP ( <Список чисел > ) DD < Количество > DUP ( ? ) Примеры: a db 12 db ? dw 1234H db 5 dup (?) b db ′A′ s dw 4,-1 k db 00001100b 0 C ? 3 4 1 2 ? ? ? ? ? 6 1 0 4 0 0 F F F F a b s 0 C k
  • 8. Команды пересылки / преобразования данных 1. Команда пересылки данных MOV <Адрес приемника>,< Адрес источника> Примеры: а) mov AX, BX б) mov SI, 1000 в) mov 0[DI], AL г) mov AX, code mov DS, AX Литерал Сегментные регистры AX,BX,CX,DX, SI, DI. SP, BP Оперативная память
  • 9. Команды пересылки / преобразования данных (2) 2. Команда обмена данных ХCHG <Операнд 1> , <Операнд 2> Примеры: а) xchg BX, CX б) xchg BX, 0[DI] 3. Команда загрузки исполнительного адреса LEA <Регистр> , <Операнд 2> Пример: а) lea BX, exword б) lea DI, 6[BX,SI] Адрес сегмента Смещение exword
  • 10. Команды пересылки / преобразования данных (3) 4-5. Команды загрузки указателя LDS <Регистр> ,<Операнд 2> LЕS <Регистр > ,<Операнд 2> Пример: lds SI, exword 6-7. Команда записи слова в стек и извлечения из стека PUSH <Операнд> POP <Операнд> Примеры: push SI pop 0[BX]
  • 11. Команды пересылки / преобразования данных (4) 8-9. Команды сложения ADD <Операнд 1>, <Операнд 2> ADC <Операнд 1>, <Операнд 2> Пример. Сложение 32-разрядных чисел mov AX,value1 add AX,value2 mov res,AX mov AX,value1+2 adc AX,value2+2 mov res+2,AX 10-11. Команды вычитания SUB <Операнд 1>, <Операнд 2> SBB <Операнд 1>, <Операнд 2> мл.байт ст.байт
  • 12. Команды пересылки / преобразования данных (5) 12. Команда сравнения СМP <Операнд 1> , <Операнд 2> Примеры: а) cmp AX,5 б) cmp byte ptr 0[BX],’A’ 13-14. Команда добавления/вычитания единицы INC <Операнд> DEC <Операнд> Примеры: inc AX dec byte ptr 8[BX,DI] 15. Команда изменения знака NEG <Операнд>
  • 13. Команды пересылки / преобразования данных (6) 16-17. Команды умножения MUL <Операнд> IМUL <Операнд> mov AX,4 imul word ptr A
  • 14. Команды пересылки / преобразования данных (7) 18-19. Команды «развертывания» чисел CBW ; AL -> AX CWD ; AX -> DX:AX
  • 15. Команды пересылки / преобразования данных (8) 20-21. Команды деления DIV <Операнд> IDIV <Операнд> mov AX,40 cwd idiv word ptr A
  • 16. Пример программирования выражения X = (A+C)(B-1)/(C+8) Сегмент данных: A dw 25 B dw -6 C dw 11 X dw ? Сегмент кода: mov CX,C add CX,8 mov BX,B dec BX mov AX,A add AX,C imul BX idiv CX mov X,AX
  • 17. Команды передачи управления 1. Команда безусловного перехода short JMP near ptr <Символическое имя или адрес> far ptr Примеры: а) jmp short Label1 б) cycle: … jmp cycle в) jmp BX г) jmp dword ptr [BX]
  • 18. Команды передачи управления (2) 2. Команды условного перехода <Команда> <Символическое имя или адрес> Команды условного перехода: JZ – переход по "ноль"; JE – переход по "равно"; JNZ – переход по "не нуль"; JNE – переход по "не равно"; JL – переход по "меньше"; JNG, JLE – переход по "меньше или равно "; JG – переход по "больше"; JNL, JGE – переход по "больше или равно "; JA – переход по "выше" (беззнаковое “больше”); JNA, JBE – переход по "не выше"(беззнаковое “не больше”); JB – переход по "ниже" (беззнаковое “меньше”); JNB, JAE – переход по "не ниже" (беззнаковое “не меньше”).
  • 19. Условный переход на более чем 128 байт jz zero jnz continue jmp zero continue: ... 
  • 20. Пример. Определение НОД code segment assume cs:code,ds:code c dw ? a dw 24 b dw 18 begin proc far push DS mov AX,0 push AX mov AX,code mov DS,AX
  • 21. Пример. Определение НОД (2) mov ax,a mov bx,b cycl: cmp ax,bx je kon jl lit sub ax,bx jmp short com lit: sub bx,ax com: jmp cycl kon: mov c,ax ret begin endp code ends end begin Начало Ввод A, B A=B A>B A:=A-B B:=B-A Вывод A Конец нет да да нет com kon cycl lit
  • 22. Команды передачи управления (3) 3. Команды организации циклической обработки 1) Команда организации цикла LOOP < Символическое имя или адрес> Пример: mov cx, loop_count begin_loop: < Тело цикла> … loop begin_loop
  • 23. Команды передачи управления (4) 2) Команда перехода по обнуленному счетчику JCXZ <адрес перехода> Пример: mov cx, loop_count jcxz end_of_loop begin_loop: < Тело цикла > … loop begin_loop end_of_loop: ...
  • 24. Команды передачи управления (5) 3) Команды организации цикла с условием LООРE <Символическое имя или адрес> LOOPNE <Символическое имя или адрес> Пример: mov CX, loop_count jcxz end_of_loop begin_loop: < Тело цикла> cmp al, 100 loopne begin_loop end_of_loop: ...
  • 25. Программирование циклической обработки Пример. Определить сумму натуральных чисел 1..n. ; сегмент данных S dw 0 n dw 18 ; сегмент кода mov CX,n mov AX,0 cycle: add AX,CX loop cycle mov S,AX S=0 i=1,n S=S+i mov CX,n mov AX,0 mov BX,1 cycle: add AX,BX inc BX loop cycle mov S,AX
  • 26. Программирование обработки массивов A dw 4,6,-1,7,5 Вариант 1 mov AX,0 lea BX,A mov CX,5 cycle:add AX,0[BX] add BX,2 loop cycle 4 6 -1 7 5 A S=0 i=1,n S=S+A[i] Вариант 2 mov AX,0 mov BX,0 mov CX,5 cycle:add AX,A[BX] add BX,2 loop cycle 4 6 -1 7 5 A DS 4 6 -1 7 5 A DS BX BX
  • 27. A db 2,3,1,-1,8 db 6,-8,5,4,7 db 8,6,3,1,6 mov BX,0 mov CX,3 cycle1: push CX mov CX,5 cycle2: ... A[BX] inc BX loop cycle2 pop CX loop cycle1 Программирование обработки матриц A db 2,3,1,-1,8 db 6,-8,5,4,7 db 8,6,3,1,6 mov BX,0 mov CX,3 cycle1: push CX mov CX,5 cycle2: ... A[BX] inc BX loop cycle2 pop CX loop cycle1 2 3 -1 -1 8 A 6 -8 5 4 7 8 6 -3 1 6 2 3 -1 -1 8 A 6 -8 5 4 7 8 6 -3 1 6 DS BX mov DI,0 mov CX,5 cycle1: push CX mov CX,3 mov BX,0 cycle2: ... A[BX,DI] add BX,5 loop cycle2 pop CX inc DI loop cycle1 DI
  • 28. Команды передачи управления (6) 4) Команды вызова подпрограмм а) Команда вызова процедуры CALL <Символическое имя или адрес > б) Команда возврата управления RET [<Целое>] Текст процедуры должен быть оформлен в виде: <Имя процедуры> ргос < Описатель удаленности> <Тело процедуры> <Имя процедуры> endp
  • 29. Организация передачи управления в процедуру CALL <Имя> <Имя> PROC RET <Имя> ENDP Основная программа Процедура Адрес возврата Стек 2 или 4 байта
  • 30. Команды обработки строк Элемент: байт или слово Установка/сброс флага направления: STD CLD DS:SI ES:DI Источник Приемник DF =0 DF =0
  • 31. Команды обработки строк (2) 1) Команда загрузки строки LODS LODSB ; загрузка байта LODSW ; загрузка слова 2) Команда записи строки STOS STOSB ; запись байта STOSW ; запись слова 3) Команда пересылки MOVS. MOVSB ;пересылка байта МОVSW ;пересылки слова DS:SI AX(AL) ES:DI AX(AL) DS:SI ES:DI
  • 32. Команды обработки строк (3) 4) Префиксная команда повторения REP <команда> Пример: mov CX,10 lea SI, A lea DI, B rep movsb
  • 33. Команды обработки строк (4) 5) Команда сканирования строки SCAS SCASB ;поиск байта SCASW ;поиск слова AX(AL)-(ES:DI) -> флаги 6) Команда сравнения строк CMPS СMPSB ;сравнение байт СMPSW ;сравнение слов (CS:SI)-(ES:DI) -> флаги AX(AL) DS:SI ES:DI ES:DI
  • 34. Команды обработки строк (5) 7) Префиксные команды "повторять, пока равно" и "повторять, пока не равно" REPE < Команда > REPNE < Команда > Пример: mov CX,10 lea SI, A lea DI, B repe cmpsb
  • 35. Пример. Сравнение строки с таблицей A B C D E S F D Y E D H F Y U A B C D R F Y E D K A B C D E S Y U F K S Tabl DS:SI ES:DI Flaq=0 i = 1,6 S=Tabl[i] Flaq=0 нет да Flaq=i
  • 36. Сравнение строки с таблицей (2) code segment assume CS:code,DS:code,ES:code Flag DB 0 S DB 'ABCDE' Tabl DB 'ARTYG','FGJJU' DB 'FGHJK','ABCDY' DB 'ABCDE','FTYRG' begin proc far push DS mov AX,0 push AX mov AX,code mov DS,AX mov ES,AX lea SI,S lea DI,Tabl mov CX,6 mov BL,1 cld Cycle: push SI push DI push CX mov CX,5 repe cmpsb pop CX pop DI pop SI je Found add DI,5 inc BL loop Cycle jmp not_Found Found: mov byte ptr Flag,BL not_Found: ret begin endp code ends end begin
  • 37. Команды манипулирования битами 1. Логические команды NOT <Операнд> ; логическое НЕ; AND <Операнд 1>, <Операнд 2> ;логическое И; OR <Операнд 1>, <Операнд 2> ;логическое ИЛИ; XOR <Операнд 1>, <Операнд 2> ;исключающее ИЛИ; TEST <Операнд 1>, <Операнд 2> ; И без записи результата Пример. Выделить из числа в AL первый бит: and al, 10000000B 10110001 10000000 10000000
  • 38. Команды манипулирования битами (2) 2. Команды сдвига <Код операции> <Операнд>, СL или 1 Команды: SAL – сдвиг влево арифметический; SHL – сдвиг влево логический; SAR – сдвиг вправо арифметический; SHR – сдвиг вправо логический; ROL – сдвиг влево циклический; ROR – сдвиг вправо циклический; RCL – сдвиг циклический влево с флагом переноса; RCR – сдвиг циклический вправо с флагом переноса CF 0 CF 0 CF 0 CF CF CF
  • 39. Команды манипулирования битами (3) Пример. Умножить число в AX на 10: mov bx, ax shl ax, 1 shl ax, 1 add ax, bx shl ax, 1
  • 40. Управление вводом/выводом IN AL или AX, <Порт> или DX OUT <Порт> или DX, AL или AX Пример: in AL, 60H out60H, AL МП Порты Устройство в/в ОП Интерфейс Шина Упр. шиной И н т - с Генератор синхронизации
  • 41. Литература  1. Бредли Д. Программирование на языке ассемблера для персональных ЭВМ фирмы IBM.: Пер. с англ. - М. : Радио и связь, 1988. - 448 с.  2. Дао Л. Программирование микропроцессора 8086:Пер. с англ. - М.: Мир, 1988. - 357 с.  3. Исида Л. Программирование для микрокомпьютеров: Пер. с яп. - М.: Мир, 1988. - 224 с.  4. Шнайдер А. Язык ассемблера для персонального компьютера фирмы IBM: Пер. с англ. - М.: Мир, 1988. - 406 с.  Лю Ю-Чжен, Гибсон Г. Микропроцессоры семейства 8086/8088. Архитектура, программирование u проектирование микрокомпьютерных систем.: Пep. с англ. - М.: Радио и связь, 1987. - 512 с.  6. Скэнлон Л. Персональные ЭВМ IBM PC и XT. Программирование на языке ассемблера: Пер. с англ. - М.: Радио и связь. 1989. - 336 с.  7. Джордейн Р. Справочник программиста персональных компьютеров ЭВМ IBM PC, XT и AT: Пер. с англ. - М.: Финансы и статистика, 1992. - 544 с.  8. Финогенов К.Г. Самоучитель по системным функциям MS DOS. - М.: Радио и связь, Энтроп, 1995. - 382 с.