Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архитектура ВС-пособие.docx
Скачиваний:
8
Добавлен:
01.05.2025
Размер:
728.99 Кб
Скачать

Демонстрационные примеры

Пример 1. Демонстрация синтаксиса и семантики логических команд and, or, xor, not, test

CODE SEGMENT

ORG 100h

ASSUME cs:code, ds:code

Begin:

mov ax,0100001100100001b ; (BX)=4321h

mov bx,ax

; --------------------------------------------

; Обнуление битов регистра BX c 4-го по 7-ой и с 12-го по 15-ый

; ----------------------

and bx,0000111100001111b ; (BX)=0301h

mov cx,bx ; (CX)=(BX)=0301h

; ----------------------------------------

; Установка 5-го и 14-го битов регистра CX

; ----------------------------------------

or cx,0100000000100000b ; (CX)=4321h

; ------------------------------------------

; Проверка того факта, совпадают ли значения

; регистров AX и CX. В случае положительного

; ответа значение регистра AX станет 0

; ------------------------------------

xor ax,cx ; (AX)=0

; ---------------------------------------

; Инвертирование 0-го, 5-го, 8-го, 9-го и

; 14-го битов регистра AX

; -----------------------------------

xor ax,0100001100100001b ; (AX)=4321h

; --------------------------------

; Инвертирование битов регистра DX

; -----------------------------------

not dx ; (DX)=FFFFh

; ---------------------------------

; Установка того факта, все ли биты

; регистра dx установлены в единицу

; ---------------------------------

test dx,0 ; (ZF)=1

; --------

Mov ax, 4C00h

int 21h

CODE ENDS ; Конец сегмента кода

END Begin

Пример 2. Демонстрация установления чётности данного целого числа

include bibl-mcr.inc

CODE SEGMENT

ORG 100h

ASSUME cs:code, ds:code

Begin:

Print str1 ; Печать строки

Vvod_AX ; Ввод целого числа в регистр AX

mov bx,1 ; (BX)=1

and ax,bx ; (AX)=0 или (AX)=1

; --------

Print str2 ; Печать строки

Vivod_AX ; Печать целого числа из регистра AX

Print str3 ; Печать строки

; --------

mov ah,08h ; Функция задержки экрана

int 21h ; Вызов функции DOS 21h

mov ax,4C00h ; Функция стандартного выхода из программы

int 21h ; Вызов функции DOS 4C00h

; ----------------------------------------

str1 DB "Введите целое число: ",'$'

str2 DB "Результат: ",'$'

str3 DB 0Ah,0Dh,"'1' - знак того, что введённое число"

DB "чётное.",0Ah,0Dh,"'0'-знак того, что введённое"

DB "число нечётное.",'$'

; ------------------------------------

CODE ENDS ; Конец сегмента кода

END Begin

Пример 3. Демонстрация вычисления выражения 2 в степени n по заданному натуральному числу n

include bibl-mcr.inc

CODE SEGMENT

ORG 100h

ASSUME cs:code, ds:code

Begin:

Print str1 ; Печать строки

Vvod_AL_pos ; Ввод целого числа n>=0 в регистр AL

mov cl,al ; (CL)=n

mov bx,1 ; (BX)=1

shl bx,cl ; Логический сдвиг (BX) влево на n битов

mov ax,bx ; (AX)=(BX)

; --------

Print str2 ; Печать строки

Vivod_AX ; Печать целого числа из регистра AX

; --------

mov ah,08h ; Функция задержки экрана

int 21h ; Вызов функции DOS 08h

; --------

mov ax,4C00h

int 21h

; ----------------------------------------

str1 DB "Введите натуральное число n=",'$'

str2 DB " 2^n=",'$'

; ----------------------------------------

CODE ENDS ; Конец сегмента кода

END Begin

Пример 4. Демонстрация синтаксиса и семантики команд: shr (логический сдвиг вправо), sal (арифметический сдвиг вправо)

include bibl-mcr.inc

CODE SEGMENT

ORG 100h

ASSUME cs:code, ds:code

Begin:

Print prigl

Vvod_AX ; Ввод целого числа в регистр AX

mov bx,ax ; (AX)=(BX)

; -------

shr ax,1 ; Логический сдвиг (AX) вправо на 1 бит

sar bx,1 ; Арифметический сдвиг(BX)вправо на 1бит

Print str1 ; Печать строки

Vivod_AX ; Печать целого числа из регистра AX

; -------

mov ax,bx

Print str2 ; Печать строки

Vivod_AX ; Печать целого числа из регистра AX

; --------

mov ah,08h ; Функция задержки экрана

int 21h ; Вызов функции DOS 08h

; --------

mov ax,4C00h

int 21h

; ----------------------------------------

prigl DB "Введите целое число: ",'$'

str1 DB "Результат выполнения логической команды "

DB "'shr' : ",'$'

str2 DB 0Ah,0Dh,"Результат выполнения арифметической "

DB "команды 'sal': ",'$'

; -----------------------------------

CODE ENDS ; Конец сегмента кода

END Begin

Пример 5. Демонстрация умножения числа (размером в двойное слово), располагающегося в паре регистров DX и AX, на 4

CODE SEGMENT

ORG 100h

ASSUME cs:code

Begin:

; --------------------------

; Умножение числа 65537 на 4

; --------------------------

mov ax,65535

add ax,2

adc dx,dx

; (DX_AX)=65537*4

shl ax,1 ; Бит 15 регистра AX сдвигается во флаг переноса

rcl dx,1 ; Флаг переноса сдвигается в бит 0 регистра DX

shl ax,1 ; Бит 15 регистра AX сдвигается во флаг переноса

rcl dx,1 ; Флаг переноса сдвигается в бит 0 регистра DX

; -------------------------------------------------------

; Умножение числа -32769 на 4

; ---------------------------

mov ax,-32768

add ax,-1

sbb dx,dx

; (DX_AX)=-32769*4

shl ax,1 ; Бит 15 регистра AX сдвигается во флаг переноса

rcl dx,1 ; Флаг переноса сдвигается в бит 0 регистра DX

shl ax,1 ; Бит 15 регистра AX сдвигается во флаг переноса

rcl dx,1 ; Флаг переноса сдвигается в бит 0 регистра DX

mov ax,4C00h ; Функция стандартного выхода из программы

int 21h ; Вызов функции DOS 4C00h

CODE ENDS ; Конец сегмента кода

END Begin

Пример 6. Демонстрация установки флага ZF во флаг CF

CODE SEGMENT

ORG 100h

ASSUME cs:code

Begin:

xor ax,ax ; Установка флага ZF

lahf ; Содержимое регистра флагов - в регистре AH

; (AH)=(S)(Z)0(A)0(P)1(C)b

and ah,1000000b ; (AH)=01000000b

shl ah,2 ; Логический сдвиг (AH) влево на 2 бита

; ----------

mov ax,4C00h

int 21h

CODE ENDS

END Begin

Пример 7. Демонстрация установки флагов SF, ZF и CF по содержимому регистра AH

CODE SEGMENT

ORG 100h

ASSUME cs:code

Begin:

mov ah,11000011b ; (AH)=(S)(Z)0(A)0(P)1(C)b

sahf ; (SF)=1, (ZF)=1, (CF)=1

; ----------

mov ax,4C00h

int 21h

CODE ENDS

END Begin