Программа, формирующая таблицу истинности для функции F=A+C*(B+D)

Информация - Компьютеры, программирование

Другие материалы по предмету Компьютеры, программирование

опирование A в al

or al, C ; логическое сложение

not al ; инверсия

and ah, al ; логическое умножение

mov F, ah ; перенос результата в F

 

jmp FUNC ; Переход на метку FUNC для вывода

; строчки таблицы

NEXT:

 

add D, 1 ;увеличение D на 1

cmp D, 2 ;если D не равно 2 ,то

jne BEGIN ;переход на метку BEGIN

 

 

 

mov D, 0 ;обнуление D

add C, 1 ;увеличение C на 1

cmp C, 2 ;если C не равно 2 ,то

jne BEGIN ;переход на метку BEGIN

 

mov C, 0 ;обнуление C

add B, 1 ;увеличение B на 1

cmp B, 2 ;если B не равно 2 ,то

jne BEGIN ;переход на метку BEGIN

 

mov B, 0 ;обнуление B

add A, 1 ;увеличение A на 1

cmp A, 2 ;если A не равно 2 ,то

jne BEGIN ;переход на метку BEGIN

 

ENDLAB:

mov ah,4ch ; функция DOS для

int 21h ; завершения программы

 

FUNC: ; Функции ДОС для вывода символов

; Выводим двоичные значения A B C D, а также F

mov ah,2 ; загрузка номера функции DOS для вывода символа на экран

mov dl, 48 ; код выводимого символа 48=0

add dl,A ; выводим на экран

int 21h ; значение A

mov ah,2

mov dl, 32 ; код выводимого символа 48=пробел

int 21h

 

mov ah,2

mov dl, 48

add dl,B

int 21h

mov ah,2

mov dl, 32

int 21h

 

mov ah,2

mov dl, 48

add dl,C

int 21h

mov ah,2

mov dl, 32

int 21h

 

mov ah,2

mov dl, 48

add dl, D

int 21h

mov ah,2

mov dl, 32

int 21h

 

mov ah,2

mov dl, 48

add dl, F

int 21h

mov ah,2

mov dl, 32

int 21h

 

mov ah,2

mov dl, 13

int 21h

mov ah,2

mov dl, 10

int 21h

jmp NEXT ;переход на метку NEXT

cseg ends

dseg segment

 

A DB 0

B DB 0

C DB 0

D DB 0

F DB 0

Message DB A B C D F,13,10,$

dseg ends

sseg segment stack stack

db 100 dup (0)

sseg ends

end start

 

 

 

 

Примечания:

Ниже приведины команды использовались в программе:

sub двоичное вычитание. Вычитается из первого операнда содержимое второго операнда

Мнемоника:sub

call вызов процедуры. Передает управление процедуре адрес которой задан операндом, после завершения процедуры, выполнение продолжается командой следующей за командой call

Мнемоника:call

ret возврат к процедуре

shr сдвинуть логически вправо

xor исключающее ИЛИ

Мнемоника:xor

lea загрузить ЕА

Мнемоника:lea reg,

push включить в stack

Мнемоника:push

pop извлечь из stack

Мнемоника:pop

mov переслать

Мнемоника:mov

inc увеличение на 1

Мнемоника:inc

dec уменьшение на 1

Мнемоника:dec

stosb пересылает соединения регистра al или ax на который указывает регистр di

loop команда организации цикла со счетчиком, также короткие переходы (127б) команда уменьшает значение счетчика cx, без изменения каких-либо флагов, если соединение cx >0, то осуществляется переход на заданную метку, в противном случае цикл завершается.

Мнемоника:loop

.CODE открывает сегмент кода

.DATA -- открывает сегмент данных

.STACK N определяет сегмент stack(а); дерективы закрытия сегментов в этом случае не используются; N показывает размер stack(a) в байтах

Примечание: при использовании таких деректив регистр ds инициализируется следующим образом:mov ax,@data

mov ds,ax

assume в этом случае не используется