Материал: 775

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

;

0

1

1

 

 

 

;

1

0

1

 

 

 

;

1

1

0

 

 

 

;

реализация:

 

 

 

 

 

mov bl,b1

; bl := b1

;

 

xor bl,b2

; bl := b1 xor b2

 

0 0 1 1

0 0 0 1

 

 

;

 

это b1

в двоичном виде

;

 

0 0 0 0

0 1 0 1

это b2

в двоичном виде

;

 

| |

| |

| | | |

 

 

;

 

v v v v

v v v v

 

 

;

 

0 0 1 1

0 1 0 0

результат выполнения операции «исключающее ИЛИ»

 

 

mov soob2+2,bl

; soob2 := soob2 & bl

 

 

mov ah,09

; вывод сообщения "Привет!"

 

 

lea dx, soob1

 

 

 

 

int 21h

 

 

 

 

 

mov ah,09

; вывод сообщения soob2 с результатом

 

 

lea dx, soob2

; на месте цифры 3

 

 

int 21h

; т.е. должно быть: 1244

 

 

mov ah,0

 

 

 

 

int 16h

 

 

 

 

 

ret

 

 

;вернуться в DOS

main endp codesg ends

end main

==================================================================

Пример 2.6

;lab2not.asm EXE-программа для демонстрации операции "логическое НЕ" ;Компиляция: tasm.exe lab2not.asm

; tlink.exe lab2not.obj stacksg segment para 'Stack'

db 128 dup (?) stacksg ends

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

datasg segment para 'Data' soob1 db 'Привет!',0dh,0ah,'$'

;

 

 

soob2

db '1234',0ah,0dh,'$'

b1

db -3

; 11111101

;b2

db '5'

; в примере

;

b3 db 3

; не

66

;w1 dw 64 ; используются datasg ends

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

codesg segment para 'Code'

assume cs:codesg,ds:datasg,ss:stacksg main proc far

push ds xor ax,ax push ax

mov ax,datasg mov ds,ax

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

;логическое "не" (

у=not(х1) )

;

 

 

 

 

 

;

х1

у

 

 

 

;

0

1

 

 

 

;

1

0

 

 

 

;

 

mov bl,b1

 

; bl := b1

 

 

 

;

 

not bl

 

 

; bl двоичный код "не (b1)", т.е. 00000010

 

1 1 1 1

1 1 0 1

 

;

 

это b1 в двоичном виде

;

 

| | | |

| |

| |

 

;

 

v v v v

v v v v

 

;

 

0 0 0 0

0 0 1 0

результат побитового выполнения операции

;

 

 

 

 

«логическое НЕ»

 

 

or bl,30h

 

;преобразование одной цифры в ascii-код

 

 

mov soob2+3,bl

;получится 00110010, т.е. 32h (ascii–код цифры '2')

 

 

; soob2 := soob2 & bl

 

 

mov ah,09

 

; вывод сообщения "Привет!"

 

 

lea dx, soob1

 

 

 

int 21h

 

 

 

 

 

mov ah,09

 

; вывод сообщения soob2 с результатом

 

 

lea dx,soob2

 

; на месте цифры 4

 

 

int 21h

 

; должно быть: 1232

 

 

mov ah,0

 

 

 

 

int 16h

 

 

 

 

 

ret

 

 

;вернуться в DOS

 

 

main endp

 

 

codesg ends end main

67

Приложение 2.1

Варианты формул для программирования

Вторая формула (во 2, 3, 4, 5, 7, 11, 12, 13, 14 лабораторных работах)

№

Выполняемые вычисления

п/п

или действия

 

1

b1 or b2 xor w1 and w2

or (d1 xor

 

b3)

 

2

b1 xor b2 or w1 and w2

xor (d1 xor

 

b3)

 

3

w1 or w2 xor b1 and b2 or (d1 xor

 

b3)

 

4

w1 xor w2 or b1 and b2 xor (d1

 

xor b3)

 

5

w1 or b1 xor w1 and w2 or (d1 xor

 

b2)

 

6

w1 xor b1 or w1 and w2 xor (d1

 

xor b2)

 

7

d1 or d2 xor b1 and b2 or (w1 xor

 

b3)

 

8

d1 xor d2 or b1 and b2 xor (w1 xor

 

b3)

 

9

d1 or b1 xor w1 and w2 or (w3 xor

 

b2)

 

10

d1 xor b1 or w1 and w2 xor (w3

 

xor b2)

 

11

d1 or w1 xor b1 and b2 or (w2 xor

 

b3)

 

12d1 xor w1 or b1 and b2 xor (w2 xor b3)

№Выполняемые вычисления

п/п

 

 

или действия

 

13

w1

and

w2

xor (d1 xor b1) or (b2

 

or

b3)

 

 

 

 

14

w1

and

w2

or (d1 xor b2) xor (b2

 

xor b3)

 

 

 

 

15

b1 and b2 xor d1 xor b3

or (w1

or

 

w2)

 

 

 

 

16

b1 and b2 or d1 xor b3

xor (w1

xor

 

w2)

 

 

 

 

17

w1

and

w2

xor (d1 xor b1) or (w3

 

or

b2)

 

 

 

 

18

w1

and

w2

or (d1 xor b1) xor (w3

 

or

b2)

 

 

 

 

19

b1 and b2 xor w1 xor b3

or (d1

or

 

d2)

 

 

 

 

20

b1 and b2 or w1 xor b3

xor (d1

xor

 

d2)

 

 

 

 

21

w1

and

w2

xor (w3 xor b1) or (d1

 

or

d2)

 

 

 

 

22

w1

and

w2

or (w3 xor b1) xor (d1

 

or

b2)

 

 

 

 

23

b1 and b2 xor w1 xor b3

or (d1

or

 

w2)

 

 

 

 

24b1 and b2 or w1 xor b3 xor (d1 xor w2)

68

Окончание прил. 2.1

Вариант № 25 для лабораторной работы №2

Выполняемые

Х1=

Выполняемые

Х1=

Выполняемые

Х1=

вычисления

 

вычисления

 

вычисления

 

b_i or b_i+1

Х1= i+32

w_I and not(w_I+1)

Х1=I+45

d_i and d_i+1

Х1=i+58

 

 

 

 

 

 

w_i or w_i+1

Х1= i+33

b_I and not(w_I)

Х1=I+46

d_i and w_i

Х1=i+59

w_i or b_i

Х1= i+34

b_I and not(d_I)

Х1=I+47

q_i and q_i+1

Х1=i+60

d_i or d_i+1

Х1= i+35

w_I and not(d_I)

Х1=I+48

q_i and d_i

Х1=i+61

 

 

 

 

 

 

d_i or b_i

Х1=i+36

w_I and not(b_I)

Х1=I+49

d_i and neg(d_i+1)

Х1=i+62

 

 

 

 

 

 

d_i or w_i

Х1=i+37

q_I and not(b_I)

Х1=I+50

b_i and neg( b_i+1)

Х1=i+63

 

 

 

 

 

 

b_i xor b_i+1

Х1=i+38

d_I and not(w_I)

Х1=I+51

w_i and neg(w_i+1)

Х1=i+64

 

 

 

 

 

 

w_i xor w_i+1

Х1=i+39

w_I and not(b_I)

Х1=I+52

b_i and neg(w_i)

Х1=i+65

 

 

 

 

 

 

w_i xor b_i

Х1=i+40

d_I and not(b_I)

Х1=I+53

d_i and neg( w_i )

Х1=i+66

 

 

 

 

 

 

d_i xor d_i+1

Х1=i+41

w_i and b_i

Х1=i+54

w_i and neg( d_i )

Х1=i+67

 

 

 

 

 

 

d_i xor b_i

Х1=i+42

d_i and b_i

Х1=i+55

w_i and neg( b_i )

Х1=i+68

 

 

 

 

 

 

d_i xor w_I

Х1=I+43

b_i and b_i+1

Х1=i+56

d_i and neg( b_i )

Х1=i+69

 

 

 

 

 

 

b_i and not(b_I+1)

Х1=I+44

w_i and w_i+1

Х1=i+57

 

 

 

 

 

 

 

 

Обозначения:

b1, b2, b3 – переменные, занимающие один байт, т.е. определенные в сегменте данных директивой db;

w1, w2, w3 – переменные, занимающие одно слово (два байта), т.е. определенные в сегменте данных директивой dw;

d1, d2 – переменные, занимающие двойное слово (четыре байта), т.е. определенные в сегменте данных директивой dd.

==================================================================

Приложение 2.2

Пример лабораторной работы №2

;==================================================================

;lb2_1bnn.asm ЛАБОРАТОРНАЯ РАБОТА №2 (модуль 1)

;РАЗРАБОТАНО (частично с использованием чужого кода конечно, но здесь его уже

;поменьше :) студентом 1 курса СибАДИ группы БИ11 БУСЛАЕВЫМ НИКОЛАЕМ

;НИКОЛАЕВИЧЕМ, г.Омск, октябрь 2003 г. ;==================================================================

;Сегмент стека

;Начало сегмента стека (директива segment)

STACSG SEGMENT PARA STACK 'STACK' db 1024 dup(?)

STACSG ENDS

;Конец сегмента стека (директива ends)

; Сегмент данных

69

;Начало сегмента данных (директива segment)

PUBLIC W1,W2,W13,W19,W21,B13,B16,REZULT

extrn FORM34:proc,FORM35:proc,FORM49:proc,FORM57:proc,FORM62:proc DATASG SEGMENT PARA 'DATA' ;начало сегмента данных

SOOB1 db 'ПРОГРАММА РАСЧЕТА ПО ФОРМУЛАМ','$' SOOBFORM1 db '#1 B1*B2*B3-D1/B3+W1+W2=','$' SOOBFORM34 db '#34 W1 OR W2','$'

SOOBFORM35 db '#35 W1 XOR W2','$' SOOBFORM49 db '#49 W13 AND B13 ','$' SOOBFORM57 db '#57 W19 AND NOT(B16)','$' SOOBFORM62 db '#62 W21 AND NEG(W2)','$'

SOOBFORMNUM db 'ВВЕДИТЕ, ПОЖАЛУЙСТА, НОМЕР ФОРМУЛЫ: $' soob_vixod db "Для выхода нажмите любую клавишу!","$" soobformnumerr db ‘Формулы с таким номером не существует!$’

X

db 1

 

 

b1

db 5

 

 

b2

db 2

 

 

b3

db 1

 

 

W1

dW 1

 

 

W2

dW 1

 

 

D1

dd 1

 

 

B13

db 1

 

 

B16

db 1

 

 

W13

dw 1

 

 

W19

dw 1

 

 

W21

dw 1

 

 

REZULT

dd 0

 

RES

dd 0

 

 

RES1W

dw 0

 

RES2 dd 0

 

 

;NAMEPAR_X LABEL BYTE

; не используется

;MAXLEN_X db 4

 

;FAKTLEN_X db ?

 

;NAMEFLD_X db 4 dup(' ')

 

NAMEPAR_b LABEL BYTE

MAXLEN_b db 4

FAKTLEN_b db ?

NAMEFLD_b db 4 dup(' ')

NAMEPAR_w LABEL BYTE

MAXLEN_w db 6

FAKTLEN_w db ?

NAMEFLD_w db 6 dup(' ')

NAMEPAR_d LABEL BYTE MAXLEN_d db 12 FAKTLEN_d db ?

70

Источник: https://studfile.net/preview/16406832/