Материал: 1328

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

Приложение 2

Пример работы № 3

;================================================================ ; l_3bnn.asm, Работа №3

;выполнена студентом 1 курса СибАДИ группы 11 БИ

;Буслаевым Н.Н. (здесь чужого кода еще меньше) ;================================================================

codesg segment para 'Code'

;начало сегмента кода

assume cs:codesg,ds:codesg,ss:codesg

org

100h

 

 

start: jmp

begin

;обход данных

soob1 db ' Программа расчёта по формулам',0ah,0dh,'$'

soobform1

db '#1 b1*b2*b3-d1/b3+w1+w2',0ah,0dh,'$'

soobform3

db '#3 логический сдвиг слова влево на 2',0ah,0dh,'$'

soobform4

db '#4

арифметический сдвиг двойного слова вправо на 3',0ah,0dh,'$'

soobform5

db '#5

циклический сдвиг байта влево на 4',0ah,0dh,'$'

soobform6 db '#6 циклический сдвиг слова вправо через флаг переноса на

5',0ah,0dh,'$'

soobform34 db '#34 w1 or w2 ',0ah,0dh,'$' soobform35 db '#35 w1 xor w2 ',0ah,0dh,'$' soobform49 db '#49 w13 and b13 ',0ah,0dh,'$' soobform57 db '#57 w19 and not(b16) ',0ah,0dh,'$' soobform62 db '#62 w21 and neg(w2) ',0ah,0dh,'$'

soobformnum db 'Введите, пожалуйста номер формулы: $'

soobCFval1 db 'Флаг CF содержит 1 $' soobCFval0 db 'Флаг CF содержит 0 $' soobCFent db 'Введите значение флага CF: $'

soob_vixod db 'Для выхода нажмите любую клавишу! ', '$' soobformerr db 'Формулы с таким номером не существует! $'

X

db

1

 

CFval db

0

 

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

 

71

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 ? namefld_d db 12 dup(' ')

binval_b dw 0

 

;_____________________________

binval_w dw 0

 

 

binval dd 0

 

 

 

binval_d dw 0

 

 

 

dw

0

 

 

ascval db '00000000000000000000','$'

kol dd 0

 

 

 

ln

db

0

 

 

del

dd

0

 

 

soob2 db

'Введите b1 ','$'

;_____________________________

soob3 db

'Введите b2 ','$'

 

soob4 db

'Введите b3 ','$'

 

soob5 db

'Введите b13 ','$'

 

soob6 db

'Введите b16 ','$'

 

soob7 db

'Введите w1 ','$'

 

soob8 db

'Введите w2 ','$'

 

soob11 db

'Введите d1 ','$'

 

;soobask db

'Ещё раз вычислять будем ? Если да, нажмите "1"',0ah,0dh,'$'

strerr1 db

'Ошибка! Значение больше 127',0ah,0dh,'$'

strerr2 db

'Ошибка! Значение больше 32767',0ah,0dh,'$'

strerr3 db

'Ошибка! Значение больше 2147483647',0ah,0dh,'$'

strerr4 db

'Недопустимое значение CF! $'

mult10 dw

1

 

;_____________________________

 

dw

0

 

 

;область DTA

 

 

reclen

 

equ

20

 

namepar

label

byte

 

maxlen

db

reclen

 

namelen

db

?

 

namedta

db

reclen dup (' ')

;блок управления файлом FCB

fcbrec label

byte

 

;FCB для дискового файла

fcbdriv

db 03

 

; дисковод C

fcbname

db

'result00'

; имя файла

fcbext

db

'txt'

; тип файла

 

 

 

72

fcbblk

dw

0

; номер текущего блока

fcbrcsz

dw

?

; размер логической записи

fcbflsz

dd

?

; размер файла (DOS)

 

dw

?

; дата (DOS)

 

dt

?

; зарезервировано (DOS)

fcbsqrc

db

0

; номер текущей записи

 

dd

?

; относительный номер

begin proc

far

 

;главная процедура ;_________________________

;mov ln,1

 

mov

ax,0600h

;очистка экрана

 

mov

bh,011

 

 

mov

cx,0000

 

 

mov

dx,184fh

 

 

int

10h

 

 

call

stroka

 

 

call

himess

 

entfnum:

 

 

 

call

entx

; ввод и преобразование номера формулы (Х)

 

mov

maxlen_b,4

 

 

mov

word ptr namefld_b, 2020h

 

cmp

x,1

;вычисление по формуле 1?

 

jnz

f34

; нет

 

call

entb1

; ввод и преобразование b1

 

call

entb2

; ввод и преобразование b2

 

call

entb3

; ввод и преобразование b3

 

call

entw1

; ввод и преобразование w1

 

call

entw2

; ввод и преобразование w2

 

call

entd1

; ввод и преобразование d1

 

call

form1

;вызов процедуры вычислений по формуле 1

 

jmp

rgn

 

f34:

cmp

X,34

 

 

jnz

f35

 

 

call

entw1

 

 

call

entw2

 

 

call

form34

 

 

jmp

rgn

 

f35:

cmp

X,35

 

 

jnz

f49

 

 

call

entw1

 

 

call

entw2

 

 

call

form35

 

 

jmp

rgn

 

f49:

cmp

X,49

 

 

jnz

f57

 

 

call

entw13

 

 

call

entb13

 

 

call

form35

 

 

jmp

rgn

 

f57:

cmp

X,57

 

 

 

 

73

 

jnz

f62

 

 

 

call

entw19

 

 

 

call

entb16

 

 

 

call

form57

 

 

 

jmp

rgn

 

 

f62: cmp

X,62

 

 

 

jnz

f3

 

 

 

call

entw21

 

 

 

call

entw2

 

 

 

call

form62

 

 

 

jmp

rgn

 

 

f3:

cmp

X,3

 

 

 

jnz

f4

 

 

 

call

entw1

 

 

 

call

form3

 

 

 

jmp

rgn

 

 

f4:

cmp

X,4

 

 

 

jnz

f5

 

 

 

call

entd1

 

 

 

call

form4

 

 

 

jmp

rgn

 

 

f5:

cmp

X,5

 

 

 

jnz

f6

 

 

 

call

entb1

 

 

 

call

form5

 

 

 

jmp

rgn

 

 

f6:

cmp

X,6

 

 

 

jnz

ferr

 

 

 

call

entw1

 

 

 

call

entcf

 

 

 

call

form6

 

 

 

jmp

rgn

 

 

ferr:

mov

ah,09h

 

 

 

lea

dx,soobformnumerr

 

 

int

21h

 

 

 

call

stroka

 

 

 

jmp

entfnum

 

 

rgn:

call

bin2asc

 

;вызов преобразования из bin в ascii

 

call

diskwrite

 

;вывод результата на диск

 

mov

ah,9

;\

 

 

lea

dx,ascval

 

; вывод на экран результата

 

int

21h

;/

 

 

call

stroka

 

 

 

cmp

X,6

 

 

 

jnz

mmmmm

 

 

 

call

printcf

 

 

mmmmm:

 

 

 

 

mov

ah,02

;\

| установка курсора

 

mov

bh,00

; \

| экран 0

 

mov

dh,24

; управление курсором | строка 23

 

 

 

 

74

 

mov

dl,00

; /

 

| столбец 00

 

int

10h

;/

 

| передача упр. в BIOS

 

mov

ah,09

 

 

 

 

lea

dx,soob_vixod

 

 

 

int

21h

 

 

 

 

mov

ah,0

 

;-ожидание нажатия клавиши

 

int

16h

;/

 

 

 

int

20h

 

 

 

;

ret

 

 

 

;передача управления в DOS

begin endp

 

 

 

;конец главной процедуры

diskwrite

proc

 

 

 

 

mov

ah,16h

 

;функция создания файла

 

lea

dx,fcbrec

 

 

 

 

int

21h

 

 

 

;

cmp

al,00

 

;есть место на диске?

;

jnz

c20

 

;

нет ошибка

 

mov

fcdrcsz,reclen

;размер записи (EQU)

;

lea

dx,namedta

;эагрузить адрес DTA

 

lea

dx,ascval

 

 

 

 

mov

ah,1ah

 

 

 

 

int

21h

 

 

 

 

mov

ah,15h

 

;функция записи

 

lea

dx,fcbrec

 

 

 

 

int

21h

 

 

 

 

mov

ah,10h

 

;функция закрытия

;

lea

dx,fcbrec

 

 

 

 

int

21h

 

 

 

 

ret

 

 

 

 

 

diskwrite endp

 

 

 

himess proc

 

 

 

 

 

 

mov

ah,09

 

;вывод на экран

 

lea

dx,soob1

 

;заслать в dx адрес soob1

 

int

21h

 

 

 

;

call

stroka

 

 

;вывод на экран

;

mov

ah,09

 

 

 

lea

dx,soobform1

;заслать в dx адрес soobform

 

int

21h

 

;прерывание (передача управления в BIOS)

;call stroka

lea

dx,soobform34

int

21h

;call stroka

lea

dx,soobform35

int

21h

;call stroka

lea

dx,soobform49

int

21h

;call stroka

 

lea

dx,soobform57

 

int

21h

;

call

stroka

 

75

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