Программа, формирующая таблицу истинности для функции 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 в этом случае не используется