Студопедия  
Главная страница | Контакты | Случайная страница

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

Ассемблер: памятка программиста

Читайте также:
  1. Безопасность ребенка в Интернете (Памятка родителям).
  2. ДОЛЖНОСТНАЯ ИНСТРУКЦИЯ ГЛАВНОГО ПРОГРАММИСТА (РУКОВОДИТЕЛЯ ГРУППЫ) ОТДЕЛА ИНФОРМАТИЗАЦИИ
  3. Инструкция – памятка
  4. Инструкция – памятка
  5. Инструкция – памятка
  6. Инструкция – памятка
  7. ПАМЯТКА
  8. ПАМЯТКА
  9. Памятка для детей по профилактике гриппа и ОРВИ.

Классификация классов:

1) Сетевая ОС – это совокупность всех ОС локальной сети или операционная система, предоставляющая функции сетевого доступа.

2) Распределенная ОС – это ОС совокупности вычислительных систем локальной сети. Пользователю может быть не известно, на каком из узлов сети хранятся обрабатываемые им данные и на каком из узлов выполняются его процессы. В сетевой ОС пользователь это контролирует.

Сетевые ОС:

1) Одноранговые – ОС узла одноранговой сети.

Одноранговая сеть – это локальная сеть, в которой все узлы равны и одинаково используют клиентскую и серверную часть своей ОС.

2) С выделенными серверами – в которой присутствуют клиентские узлы и серверные узлы со специальными серверами ОС.

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

АСНОВА СЛОВА

Аснова – частка слова без канчатка.

вялікі грыб вялікага грыба вялікаму грыбу вялікім грыбам аб вялікім грыбе


 

Ассемблер: памятка программиста

Это скорее памятка, которая рассчитана на людей, знакомых с C++ или другим зыком программирования высокого уровня, которые хотят быстро изучить ассемблер для написания высокоэффективных алгоритмов в составе своих программ или для иных целей (например для изучения программ в отладчике/дизассемблере).

 

Ассемблер - это язык низкоуровневого программирования, где каждый оператор соответствует команде процессора. Рассмотрим синтаксис этого языка.

 

Каждый оператор записывается на новой строке. Возможен пропуск строк и вставка пробельных символов, они просто игнорируются. Комментарии должны начинаться символом '; ' и заканчиваться символом новой строки.

 

; комментарий на отдельной строке

var1db "b"; переменная var1 из 1го байта со значением 'b'

db "abcd"; просто следующий набор байтов (строка)

var2dw 121; переменная var2 из 2х байт со значением 121

var3dd -0xFFFF; переменная var3 из 4х байт со значением -FFFF (16-чная система)

arraydb 99 dup 0;массив array из 99 байтов со значениями 0

v_64dq?; переменная v_64 из 8 байтов, значение не определено

 

array2 db 20 dup (5 dup "a");строка array2 из 100 символов 'a' (20*5*1)

;Ключевое слово DUP в этой псевдокоманде означает повторить (duplicate)

 

В данном примере использовались директивы ассемблера, резервирующие память, а именно:

 

db (DEFINE BYTE) - 8 бит (1 байт);

dw (DEFINE WORD) - 16 бит (2 байта);

dd (DEFINE DOUBLEWORD) - 32 бита (4 байта);

dq (DEFINE QUADROWORD) - 64 бита (8 байт)

dt (DEFINE TEN BYTE) – 80 бит (10 байт).

 

В операторах могут использоваться как ячейки памяти, так и регистры, которые представляют собой ячейки быстродействующей памяти в процессоре. Основные регистры - это eax, ebx, ecx и edx, также часто используются регистры ebp, esi, edi и esp, каждый по 32 бита, причём младшие 16 бит именуются без префикса 'e', а младшие и старшие байты из этих 16 бит именуются суффиксами ' l ' и ' h ' соответственно:

 

(ax - 0-15,биты eax,al - 0-7 биты ax, ah - 8-15 биты ax).

 

Также в процессоре имеется регистр флагов, биты которого устанавливаются при выполнении команд. Наиболее часто используются флаги o, c, s, d и z. Флаг o устанавливается, если знаковый результат вне диапазона (переполнение), c - при беззнаковом переполнении и используется как флаг переноса. Во всех операциях сдвигов и вращений в него копируется выталкиваемый или переносимый бит.

Флаг s означает отрицательный результат, а флаг z - нулевой.

Эти два флага устанавливаются всеми арифметическими и логическими

операциями кроме умножения, деления и вращения. Флаг d устанавливает

направление приращения указателей в строковых операциях.

 

Основные операторы можно разделить на несколько основных групп:

- операторы пересылки;

- логических и арифметических операций;

- сравнения и условных переходов;

- безусловных переходов и управления флагами.

 

mov x,y

Пересылка y в x, например:

mov ax, 0xFF

mov bx, ax

mov var_2, bx

 

lea x,y

Загружает в x адрес y, почти тоже, что mov x, offset y; или mov x, y; если y задано как сумма регистров в квадратных скобках, например:

lea eax, var_1

lea ebx, [ebp+esi]

 

add x,y

Сложение x=x+y, например:

mov ax, -1

add ax, 10;ax=9

 

sub x,y

Вычитание x=x-y, например:

mov ax,10

mov bx,100

sub bx, ax;bx=90

 

inc x

Увеличение x на 1, например:

mov var_1, 1

inc var_1;var_1=2

 

dec x

Уменьшение x на 1, например:

mov var_2, 0xFF

dec var_2; var_2=0xFE

 

neg x

Арифм. инверсия x=-x, например:

mov ax, 0xFF

mov bx, 0xFF

neg ax

add ax, bx;ax=0

 

 

mul x / imul x

Умножение на x

 

Операнд Множитель Результат
1 байт al ax
2 байта ax dx:ax
4 байта eax edx:eax

 

 

При этом под dx:ax и edx:eax понимается, что старшая часть результата помещается в dx/edx, а младшая - в ax/eax.

 

Команда imul может работать с отрицательными (знаковыми) числами.

Пример:

 

varx dw 10

mov ax, 65025;ax=255*255

mul varx

;AX=60426 DX=9, 60426+9*2^16=650250=255*255*10

 

div x / idiv x

Деление на x

 

Операнд Делимое Частное Остаток
1 байт ax al ah
2 байта dx:ax ax dx
4 байта edx:eax eax edx

 

При этом под dx:ax и edx:eax понимается, что старшая часть делимого берётся из dx/edx, а младшая - из ax/eax. Команда idiv может работать с отрицательными (знаковыми) числами, при этом знак остатка равен знаку делимого. Пример:

 

mov ax,0

mov dx,1;dx:ax=256

div 3

;AX=85, DX=1, 85*3+1=256

 

 

Логические и поразрядные операции

 

Использование Название Эквивалент С
and x,y "логическое и" x=x&y
or x,y "логическое или" x=x|y
xor x,y "исключающее или" x=x^y
not x "логическое не" x=!x
shl x,(cl,[0-31]) "логический сдвиг влево" x<<[0-31]
shr x,(cl,[0-31]) "логический сдвиг вправо" x>>[0-31]
sal x,(cl,[0-31]) "арифмет. сдвиг влево" signed x<<[0-31]
sar x,(cl,[0-31]) "арифмет. сдвиг вправо" signed x>>[0-31]
rol x,(cl,[0-31]) "логическое вращение влево" x=_rotl(x,[0-31])
ror x,(cl,[0-31]) "логическое вращение вправо" x=_rotr(x,[0-31])
rcl x,(cl,[0-31]) "арифмет. вращение влево" ??????????
rcr x,(cl,[0-31]) "арифмет. вращение вправо" ??????????
test x,y "тест на ноль лог. И x, y" if(x&y==0)

 

Команды переходов и сравнений

cmp x,y

 

Сравнивает x и y

test x или test x, x

 

Проверяет на 0

j<xx> x

 

Условный переход на адрес x, если:

Использование, Ключ, Условие или флаг

Использование Ключ Условие или флаг
ja x Above > беззнаковые числа
jae x Above or Equal >= беззнаковые числа
jb x Below < беззнаковые числа
jbe x Below or Equal <= беззнаковые числа
jc x Carry c==1 (shr,shl,sar,sal,ror,rol…)
jcxz x CX is Zero cx==0
je x Equal ==
jz x Zero ==0
js x Sign <0
jg x Greater > числа со знаком
jge x Greater or Equal >= числа со знаком
jl x Less < числа со знаком
jle x Less or Equal   <= числа со знаком

 

Для каждого условия <xx> есть обратное условие < <n>xx>, например jnbe - переход по условию "не (меньше либо равно)", т.е. "больше". Пример применения:

 

mov ax,1

dec ax

test ax

jnz st1;>---------------------------*

inc ax;если ax==0 то ax++ |

st1:;обозначение адреса перехода |

mov bx,10

mul bx;<---------------------------*

 

JMP X

Условный переход на x, например:

jmp noblablabla

bla db "blablablablablablabla"

noblablabla:

mov eax, offset bla

 

offset

Помещает в регистр адрес строки, например:

01
02
03 mov DX, offset Message
...
11
12 Message db 'Hello'
13

, то в строке 03 в регистр DX будет помещено число 12.
Нужно это, чтобы не вычислять этот адрес самому. Все делает транслятор.

 

call x

Вызов функции x с последующим продолжением операций, например:

call function

mov ax,bx;просто так

 

ret x

Возврат из функции, при этом будет снято x байтов стека.

 

push x

Положить на вершину стека x, например:

mov ax, 10

push ax

push 15

;Как указатель стека используется регистр sp/esp.

 

pop x

Снять с верхушки стека и положить в x, например:

pop ax;ax=15

pop bx;bx=10

 

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

 

Использование Действие Название
clc с=0 сброс флага переноса
cld d=0 сброс флага направления
stc c=1 установка флага переноса в 1
std d=1 установка флага направления в 1

 




Дата добавления: 2014-12-19; просмотров: 45 | Поможем написать вашу работу | Нарушение авторских прав

<== предыдущая лекция | следующая лекция ==>
ВВОД-ВЫВОД| Лабораторная работа №2

lektsii.net - Лекции.Нет - 2014-2024 год. (0.017 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав