Программа, формирующая таблицу истинности для функции F=A+C(B+D)Рефераты >> Программирование и компьютеры >> Программа, формирующая таблицу истинности для функции F=A+C(B+D)
|
|
|
|
|
|
org 100h
assume cs:cseg,ds:dseg,ss:sseg
start:
mov ax,dseg ; установить регистр DS таким
mov ds,ax ; образом, чтобы он указывал
; на сегмент данных
mov ax,0600h
mov bh,07
mov cx,0000
mov dx,184Fh
int 10h
mov ah,9 ; функция DOS вывода строки
mov dx,OFFSET Message ; ссылка на сообщение "A B C D F"
int 21h ; вывести "A B C D F" на экран
BEGIN: ; _
; Расчет функции F = A+C*B(+)D
mov ah, B ; копирование 'B' в ah
xor ah, D ; исключающее или
mov al, A ; копирование '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 <операнд 1>,<операнд 2>
call– вызов процедуры. Передает управление процедуре адрес которой задан операндом, после завершения процедуры, выполнение продолжается командой следующей за командой call
Мнемоника: call <имя процедуры>
ret– возврат к процедуре
shr– сдвинуть логически вправо
xor – исключающее ИЛИ
Мнемоника: xor <операнд 1>,<операнд 2>
lea– загрузить ЕА
Мнемоника: lea reg,<операнд>
push– включить в stack
Мнемоника: push <операнд>
pop– извлечь из stack
Мнемоника: pop <операнд>
mov– переслать
Мнемоника: mov <приемник>,<источник>
inc– увеличение на 1
Мнемоника: inc <операнд>
dec– уменьшение на 1
Мнемоника: dec <операнд>
stosb – пересылает соединения регистра al или ax на который указывает регистр di