Рейтинг:  0 / 5

Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
 

Команда Синтаксис Действие Пример
ADD ADD A,B Прибавляет к переменной A значение B

MOV AX,2

ADD AX,3 !5

CMP CMP A,B

Задает сравниваемые величины A и B

A - это переменная

B - неважно

MOV AX,2

MOV BX,3

CMP AX,BX

DIV DIV B

Операция делит значение регистра AX на значение переменной B

Целую часть пишет в AX, остаток от деления в DX

MOV AX,10

MOV BX,8

DIV BX

!AX = 1

!DX = 2

INC INC X Увеличение на 1 значение переменной X

MOV AX,5

INC AX!AX == 6

JLE

CMP...

JLE L

Если A<=B, то перейти по метке L, иначе идти дальше

MOV AX,1

CMP AX,2

JLE LI !goto LI

JMP JMP LI Беспрекословный переход по метке LI

JMP LI

...

LI:

JNA

CMP...

JNA LI

Если A==B, то перейти по метке LI

MOV AX,2

CMP AX,2

JNA LI! goto Li

LOOP LOOP L

Цикл for. В Регистр CX записывается число повторов цикла.

Для перехода на новую итерацию используется метки (в данном случае L)

MOV CX,5

L1: PUSH CX

LOOP L1 ! 5,4,3,2,1

MOV MOV A,B

Изменяет значение переменной A на значение B

MOV AX,2 !2
MOVB MOVB RL,A Запись в байт RL регистра значения A MOVB AH,1 !AX=256
MUL MUL A Операция умножения значение регистра AX на значение переменной A

MOV AX,2

MOV BX,3

MUL BX! AX=6

PUSH PUSH A Кладет на стек значение A PUSH 2
SHL SHL A,B

Побитовый сдвиг переменной A на B позиций влево (умножение на 2)

//Почему то иногда требуется, чтобы B == 1

MOV AX,3

SHL AX,1 !AX==6

SHR SHR A,B

Побитовый сдвиг переменной A на B позиций вправо (целочисленное деление на 2)

//Почему то иногда требуется, чтобы B == 1

MOV AX,9

SHR AX,1 !AX=4

SUB SUB A,B Вычитает из переменной A значение B

MOV AX,3

SUB AX,3 !0

.BSS Раздел для переменных, не инициализируемых в начале
.DATA Раздел данных
.SPACE a: .SPACE b Описание переменной без инициализации с памятью b res: .SPACE 2
.TEXT Раздел текста программы
.WORD x: .WORD y Описание переменной с типом Слово и значением y y: .WORD 2

Операторы сравнений:

Некоторые примеры программ на Ассемблере:

Перемножение всех положительных элементов массива

.SECT .TEXT

!Создается косвенная адресация
  MOV BX, arr 

!Подсчет кол-ва итераций
  MOV CX,end-arr
  SHR CX,1

!результат
  MOV AX,1
l:

!Сравниваем текущий элемент с 0
  CMP (BX),0 

!Если он меньше или равен 0,то переход к l2
  JLE l2 

!Умножаю AX на текущий элемент
  MUL (BX) 

!Перехожу к слудующему элементу массива
l2:  ADD BX,2 

!Переход к следующей итерации цикла
  LOOP l


.SECT .DATA

!массив

  arr: .WORD 1,-1,2,-2,3,-3,-5

!конец массива
  end: .BYTE 0
.SECT .BSS

Заполнение массива десятью первыми числами Фибоначи

!Константа размера массива

AR_LEN_BYTES = 20
.SECT .TEXT

!Создается косвенная адресация
  MOV BX, arr
  MOV CX,AR_LEN_BYTES

!Выставление кол-ва итераций
  SHR CX,1 

!Выставление 0-го числа
  MOV SI,0 

!Выставление 1-го числа
  MOV DI,1 

!уменьшаю на 1 кол-во итераций
  SUB CX,1

!записываю первое число Фибоначи в массив
  MOV (BX),1 

! Перехожу к следующему элементу массива
  ADD BX,2
l:
  MOV AX,SI

!Высчитываю новое значение числа Фибоначи
  ADD AX,DI 

!Кладу его в массив
  MOV (BX),AX 

!Выставляю предыдущие элементы
  MOV SI,DI
  MOV DI, AX

!перехожу к слудующему элементу массива
  ADD BX,2
  LOOP l

!Кладу все элементы массива на стек

  MOV BX, arr
  MOV CX, AR_LEN_BYTES
  SHR CX,1
l2:
  PUSH (BX)
  ADD BX,2
  LOOP l2
.SECT .DATA

.SECT .BSS
  arr: .SPACE AR_LEN_BYTES