скачать рефераты
  RSS    

Меню

Быстрый поиск

скачать рефераты

скачать рефератыРеферат: Разработка программы на Ассемблере

2. PUSH RP; поместить на вершину стека содержимое пары регистров RP (например push bx).

3. POP RP; снять с вершины стека два байта и поместить в пару RP (например pop ax).

4. XCHG DST, SRC; поменять местами содержимое (DST) и (SRC). Оба операнда не могут быть одновременно содержимым ячеек памяти.

5. XLAT SRC; извлечь из таблицы с начальным адресом SRC байт данных имеющий номер от начала таблицы = (AL), и поместить его в AL. Адрес SRC должен находиться в регистре BX. Другой вариант: XLATB.

 

      ....

      .DATA

src   DB 15d,10h,00110101b,'A','B',166d

      .CODE

      ....

      mov al,2; в результате выполнения этих трех  команд

      mov bx,OFFSET src; в регистр AL будет загружен код

      xlatb; 00110101b = 35h = 53d = ASCII'5'

6. IN ACCUM, PORT; поместить в аккумулятор AL или AX байт или слово из порта с адресом PORT. Если адрес порта <= FF то адрес порта может указываться непосредственно, если адрес порта > FF, то адрес порта указывается косвенно, через содержимое регистра DX (специальная функция регистра общего назначения).

 

    in al,0a5h;ввести  в  AL  байт данных из ВУ с адресом порта A5h ....

    mov dx,379h;ввести в аккумулятор AL байт данных из

    in al,dx;внешнего устройства  с  адресом  порта  379h

7. OUT PORT, ACCUM; переслать из аккумулятора AL или AX байт или слово в ВУ с символическим адресом PORT.

 

    out 0ffh,al;

    ....

    mov dx,37Ah;переслать слово данных из AX в ВУ с адре-

    out dx,ax;сом порта 37Ah

8. LEA RP,M; загрузить в регистр RP эффективный адрес (смещение) ячейки памяти с символическим адресом M.

lea di, rus; аналог этой команды - mov di, OFFSET rus.

 АРИФМЕТИЧЕСКИЕ КОМАНДЫ

1. ADD DST, SRC; сложить содержимое SRC и DST и результат переслать в DST.

  add al, [mem_byte]; mem_byte однобайтовая ячейка памяти

  add [mem_word], dx; mem_word двухбайтовая ячейка памяти

  add ch,10001010b;

2. INC DST; увеличить (DST) на 1 (инкремент (DST)).

 

    inc si; (SI) <-- (SI) + 1.

    inc count; (count) <-- (count) + 1.

3. SUB DST, SRC; вычесть (SRC) из (DST) и результат поместить в DST.

4. DEC DST; декремент (DST).

5. CMP DST, SRC; сравнить содержимое DST и SRC. Эта команда выполняет вычитание (SRC) из (DST)   но разность не помещает в DST и по результату операции воздействует на флаги.

 

     условие                                  флаги

                                          OF  SF  ZF  CF

    DST > SRC                            0/1   0   0   0

    DST = SRC                              0   0   1   0

    DST < SRC                            0/1   1   0   1

0/1 - означает, что флаг может быть равен 0 или 1 в зависимости от значений операндов. Флаги OF и SF имеют смысл при операциях со знаковыми числами, CF для беззнаковых чисел. Флаг переполнения OF устанавливается в 1, если в результате операции сложения или вычитания значения переноса в старшиий двоичный разряд и из старшего двоичного разряда не совпадают. По другому определению OF принимает значение 1, если результат превышает диапазон представления соответствующих чисел. Пусть DST > SRC и оба являются однобайтовыми числами, тогда:

 

      DST:       1.   (+127)         2.    (+127)

      SRC:           -  (+2)              -  (-2)

                     -------               -------

                      (+125) (OF)=0        (+129)? (OF)=1

Во втором примере результат превышает диапазон: -128 <= x < = +127. Флаг знака SF устанавливается в '1', если старший бит результата операции равен 1, т.е. при отрицательном результате. В противном случае сбрасывается. Флаг нуля ZF устанавливается в '1' при нулевом результате (!), иначе сбрасывается. Флаг переноса CF = 1, если есть перенос из старшего разряда при сложении или есть заем в младший разряд при вычитании. Иначе флаг сбрасывается. Для первого примера SF = ZF = CF = 0, для второго: SF = 1, ZF = CF = 0.

ЛОГИЧЕСКИЕ КОМАНДЫ И КОМАНДЫ СДВИГА

1. AND DST, SRC; поразрядное логическое "И".

  mov dh, 10101100b;

  and dh, 0f0h;

в результате выполнения этих двух команд содержимое DH станет равно 10100000b.

2. OR DST, SRC; поразрядное логическое "ИЛИ".

 

or bx,dx;если (BX)=5F0Fh,а (DX)=7777h,то после операции

        ;(BX)=7F7Fh.
BX 0101 1111 0000 1111 = 5F0F
DX 0111 0111 0111 0111 = 7777
BX (результат) 0111 1111 0111 1111 = 7F7F

3. XOR DST, SRC; поразрядное логическое "исключающее ИЛИ".

 

xor al,55h;если (AL)=5ah, то после операции (AL)=0fh.

4. NOT DST; инверсия всех битов приемника.

5. TEST DST, SRC; выполняет операцию AND над операндами, но воздействует только на флаги и не изменяет самих операндов.

6. SHR DST, CNT; логический сдвиг вправо, освобождающиеся слева биты заполняются нулем, крайний правый бит выталкивается во флаг CF. Операнд DST может быть ячейкой памяти.

 

    mov bl,10110010b;(CF) = x

    shr bl,1;(BL) = 01011001,(CF) = 0
до  сдвига       1 0 1 1 0 0 1 0      (CF)=X
после сдвига 0---> 0 1 0 1 1 0 0 1 ------> (CF)=0

    mov cl,4;

    shr bl,cl;(BL) = 00000101,(CF) = 1.

7. SHL DST, CNT; логический сдвиг влево.

8. RLC DST, CNT; циклический сдвиг влево через перенос

9. RRC DST, CNT;циклический сдвиг вправо через перенос

10. ROR DST, CNT;циклический сдвиг влево

11. ROL DST, CNT;циклический сдвиг вправо

КОМАНДЫ ПЕРЕДАЧИ УПРАВЛЕНИЯ

1. CALL SUBR; вызов подпрограммы с адресом SUBR;

 

   call delay;

    mov ....

2. RET; возврат из подпрограммы к оператору следующему непосредственно за CALL, то есть в приведенном выше примере к MOV ..

3. JMP NAME; безусловный переход к команде с символическим адресом NAME.

 

    jmp short name;переход к метке name, отстоящей не более

                  ;чем на -128 или +127 байтов.

    jmp near name;переход к метке name,  отстоящей не более

                  ;чем на 65535 байтов, в одном сегменте.

    jmp name;аналогично jmp near name;

4. JA NAME или JNBE NAME; условный переход, если, например, в результате сравнения CMP DST, SRC приемник по абсолютной величине больше источника, то перейти к метке name.

5. JB NAME или JNAE NAME; условный переход, если, например, в результате сравнения CMP DST, SRC приемник по абсолютной величине меньше источника, то перейти к метке name (команды п4 и п5 выполняются по результатам выполнения операций над беззнаковыми числами).

6. JZ NAME или JE NAME; перейти, если результат операции влияющей на флаг нуля - нулевой (переход по "нулю").

7. JNZ NAME или JNE NAME; переход по "не нулю". (команды п6 и п7 выполняются по результатам выполнения операций над числами cо знаком ).

КОМАНДЫ УПРАВЛЕНИЯ ЦИКЛАМИ

1. LOOP NAME; эта команда неявно уменьшает (CX) на 1 и осуществляет переход к ближней метке, если (CX) не равно 0.

 

      ....

      mov cx,64h;блок операторов от метки syc до loop syc

syc:   ....;будет выполнен 100 раз.

       ....

       loop syc

2. LOOPZ NAME или LOOPE NAME кроме того осуществляет проверку ZF флага. Поэтому цикл заканчивается по условию, когда (CX) = 0 или (ZF) = 0 или и то и другое вместе. Т.о. эта команда служит для обнаружения первого ненулевого результата.

3. LOOPNZ, LOOPNE - выход из цикла по "нулю".

 

       ....

       mov cx,1000d;цикл может быть завершен раньше 1000

next:  .... ;прохода,если содержимое аккумулятора

       .... ;станет равным 129,т.е. равным ASCII коду

       cmp al,'Б';буквы Б.

       loopnz next

9.3.9 КОМАНДЫ ОБРАБОТКИ СТРОК (ЦЕПОЧЕК БАЙТОВ)

1. LODSB; команда lodsb загружает байт адресованный регистром SI из сегмента данных, и увеличивает SI на 1, если перед этим была введена команда CLD (очистить флаг направления DF) и уменьшает SI на 1, если была использована команда STD (установить флаг направления).

 

       ....

       .DATA

string DB 'abcdefg'

       .CODE

       ....

       cld;после выполнения этих команд в AL будет

       mov si,OFFSET [string+2]; загружен ASCII код 'с'

       lodsb;причем содержимое SI будет указывать на 'd'.

2. MOVSB; эта команда перемещает один байт из ячейки памяти с адресом в регистре SI в ячейку памяти с адресом в регистре DI и увеличивает (SI) и (DI) на 1. Значение SI может находиться, как в сегменте данных DS, так и в дополнительном сегменте ES. Значение DI может находиться только в дополнительном сегменте ES.

 

      ....

      .DATA

msg  DB 'Всё O.K.'

LEN  = $ - msg;LEN равно 8

      .CODE

      ....

      cld

      lea si,msg;в SI адрес источника

      mov ax,0b800h;начало сегмента видеопамяти

      mov es,ax;поместить в дополнительный сегмент

      lea di,es:(0a0h * 3);4-я строка сверху

      mov cx,LEN;LEN - количество выводимых символов

rp:   movsb;переслать символ в текущую позицию экрана

      inc di;перешагнуть через позицию атрибута

      loop rp;повторить до исчерпания (CX)

      ....;строка 'Всё O.K.' будет выведена в 4-ю строку

          ;дисплея сверху.

3. REP ;префикс повторения команды. Например окончание предыдущей программы может быть записано в виде:

 

      ....

      mov cx,LEN;несмотря на то,что массив'Всё O.K.'будет

rep   movsb;скопирован в область памяти B800:(A0 * 3), на

      ;экран дисплея будет выведено: ВёOK. Почему?

4. CMPSB; осуществляет сравнение байта строки источника c адресом (SI) и байта строки приемника с адресом (DI): то есть производит вычитание ((SI)) - ((DI)). Не путать с командой CMP DST, SRC в которой наоборот, производится вычитание источника из приемника. Команда CMPSB неявно уменьшает (CX) на 1 и увеличивает (SI) и (DI) на 1, если (DF) = 0.

5. REPZ или REPE; префикс повторения. Выполнение команды завершается, когда (CX) = 0 или (ZF) = 0.

 

     ....

     .DATA

src  DB 'To be, or not to be'

dst  DB 'To be ,or not to be'

len  = $ - dst;len равно 19

     .CODE

     ....

     cld; (DF) = 0

     push ds;совместить адреса

     pop es;сегментов ds и es

     mov cx,len;длину строки dst переслать в cx

     lea di,dst;загрузить адрес(смещение) строки dst в DI

     lea si,src

repe cmpsb;сравнивать побайтно

     je equal;если все байты совпали, то перейти к метке

     not cx;если нет - вычислить номер несовпадающих байт

     add cx,len;

     jmp notequal;

equal:    ....

          ....

notequal: ....

В конце этого примера номер первого несовпадающего байта (CX) = 5.

 КОМАНДЫ УПРАВЛЕНИЯ МИКРОПРОЦЕССОРОМ

1. CLC; сбросить флаг переноса (CF) = 0.

2. STC; установить флаг переноса (CF) = 1.

3. CMC; инвертировать флаг пнреноса.

4. CLD; очистить флаг направления (DF) = 0, в этом случае операции над строками (цепочками байтов) будут производиться от младшего адреса к старшему.

5. STD; установить флаг направления (DF) = 1,обработка цепочек байтов производится от старшего адреса к младшему.

6. STI; установить флаг прерываний (IF) = 1, разрешить прерывания от внешних устройств.

7.CLI; очистить флаг прерываний.

8. NOP; холостая операция.

КОМАНДЫ ПРЕРЫВАНИЙ

1. INT INUM; эта команда вызывает программное прерывание, то есть переход к ячейке памяти с адресом хранящимся в четырех байтах, начиная с адреса INUM * 4, где INUM = (0...255). Это 4-х байтовое число является указателем подпрограммы обработчика данного прерывания, и иначе называется вектором прерывания.Таким образом первый килобайт памяти 256 * 4 отводится под векторы прерываний.

Операции инициируемые программными прываниями определяются кодом в регистре AH, например:

 

   ....

    mov ah,14d;функция вывода символа на дисплей,с последующимм

    mov al,31h;продвижением курсора на одну позицию вправо.

    int 10h;на  экран будет выведена цифра '1'(ASCII код 31h).

       ....

       .DATA

privet DB 'Добрый morning !','$';

       .CODE

       ....

       lea dx,privet;специальная функция регистра DX

       mov ah,9;9 - функция вывода на экран дисплея

       int 21h;будет выведено приветствие ....

ВЛИЯНИЕ КОМАНД НА ФЛАГИ

В таблицу включены только те инструкции, которые влияют на флаги.

Страницы: 1, 2, 3, 4, 5, 6, 7


Новости

Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

  скачать рефераты              скачать рефераты

Новости

скачать рефераты

© 2010.