Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1328.pdf
Скачиваний:
0
Добавлен:
07.01.2021
Размер:
1.07 Mб
Скачать

Приложение 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

lea

dx,soobform62

int

21h

;call stroka

lea

dx,soobform3

int

21h

;call stroka

lea

dx,soobform4

int

21h

;call stroka

lea

dx,soobform5

int

21h

;call stroka

lea

dx,soobform6

int

21h

;call stroka add ln,11 ret

himess endp

;************************************************************************ ; Процедура вычисления по формуле b1*b2*b3-d1/b3+w1+w2 ;************************************************************************

form1 proc

 

 

; Вычисление w1+w2:

 

 

xor

dx,dx

;dx=0

 

mov

ax,w1

;ax=w1

 

add

ax,w2

;ax =ax+w2=w1+w2

 

adc

dx,0

;dx=dx+0+CF

 

mov

word ptr rezult,ax

;(dx:ax)= w1+w2

 

 

 

mov

word ptr rezult+2,dx

;результат в rezult

; Вычисление b1*b2*b3

 

 

mov

al,b1

;al=b1

 

mul

b2

;ax=al*b2=b1*b2

 

mov

bl,b3

;bl=b3

 

xor

bh,bh

;bx=bl=b3

 

mul

bx

;(dx:ax)=ax*bx=b1*b2*b3

 

mov

word ptr res, ax

 

 

mov

word ptr res+2, dx

; результат в res

;

Вычисление d1/b3

 

 

mov

ax,word ptr d1

 

 

mov

dx,word ptr d1+2

 

 

mov

bL,b3

 

 

xor

bh,bh

 

 

div

bx

;(dx:ax)/bx

 

 

 

;частное в ax, остаток в dx

; можно по-другому: div bl

;ax/bl

 

mov

res1w,ax

; но частное в al, а остаток в ah

 

 

;

Вычисление res (b1*b2*b3) - d1/b3

 

 

 

 

76

 

mov

ax,word ptr res

 

 

mov

dx,word ptr res+2

;(dx:ax)=res

 

sub

ax,res1w

;ax=ax-res1w

 

sub

dx,0

 

;dx=dx-0-CF

;

mov

word ptr res,ax

;(dx:ax)= res - res1w

 

;

mov

word ptr res+2,dx

 

; Вычисление (b1*b2*b3-d1/b3) +

(w1+w2)

 

add

ax,word

ptr rezult

 

 

adc dx,word

ptr rezult+2

;прибавляем к (dx:ax) rezult

;

mov

word ptr rezult,ax

т.е. w1+w1

 

; заносим результат в rezult

 

mov

word ptr rezult+2,dx

 

; в итоге результат хранится в ячейке rezult (двойное слово) ret

form1 endp

;************************************************************************* ; Ввод и преобразование номера формулы (числа X) ;*************************************************************************

entx proc

 

 

 

 

 

Xb:

mov

ah,09

; вывод приглашения

 

 

lea

dx,soobformnum

 

 

 

 

int

21h

 

 

 

 

mov

ah,0Ah

; ввод с клавиатуры X

 

lea

dx,namepar_b

 

 

 

 

int

21h

 

 

 

 

call

stroka

 

 

 

 

call

asc2bin_byte

;перевод из ASCII в bin

 

xor

ax,ax

;переносим переведённый байт в X

 

mov

al,byte ptr binval_b

 

 

 

 

mov

X,al

 

 

 

;

mov

al,b1

;b1 сравниваем с 127

 

 

;

cmp

al,127

 

 

 

 

;

ja

Xm

 

;если >, то на метку Хm

e

Xm:

jmp

Xe

;если <= , то на метку Х

mov

ah,09

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

 

 

lea

dx,strerr1

;сообщения об ошибке

 

int

21h

 

 

 

Xe:

jmp

Xb

;переход на Xb

 

 

 

 

 

 

ret entx endp

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

;Процедура перевода из двоичного в ASCII

;(исправлено для перевода двойного слова...)

;чтобы преревести четверное, надо раскомментировать строчки

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

bin2asc proc

77

lea si,ascval[19]

m1:

;cmp word ptr rezult[6],0

;jne m2

;cmp word ptr rezult[4],0

;jne m2

cmp word ptr rezult[2],0 jne m2

cmp word ptr rezult,10 jnb m2

mov ax,word ptr rezult or al,30h

mov [si],al

dec si jmp m3

m2:

sub word ptr rezult,10 sbb word ptr rezult[2],0

;sbb word ptr rezult[4],0

;sbb word ptr rezult[6],0 add word ptr kol,1 adc word ptr kol[2],0

;adc word ptr kol[4],0

;adc word ptr kol[6],0 jmp m1

m3:

;cmp word ptr kol[6],0

;jne m4

;cmp word ptr kol[4],0

;jne m4

cmp word ptr kol[2],0 jne m4

cmp word ptr kol,0

jne m4

 

ret

; выход из процедуры bin2asc

m4:

mov ax,word ptr kol mov word ptr rezult,ax mov ax,word ptr kol[2] mov word ptr rezult[2],ax

;mov ax,word ptr kol[4]

;mov word ptr rezult[4],ax

;mov ax,word ptr kol[6]

;mov word ptr rezult[6],ax mov word ptr kol,0

mov word ptr kol[2],0

;mov word ptr kol[4],0

;mov word ptr kol[6],0 jmp m1

bin2asc endp

78

clrascval proc mov cx,20 mov si,19

clr1: and ascval[si],30h dec si

loop clr1 ret

clrascval endp

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

asc2bin_byte proc

;процедура перевода из ASCII в bin для байта

mov

mult10,1

 

mov

binval_b,0

 

xor

ax,ax

 

xor

dx,dx

 

mov

cx,10

; фактор умножения

lea

si,namefld_b – 1

; адрес ascval

mov

bl,faktlen_b

; длина ascval

mov

bh,0

 

a21:

 

 

mov

al,[si+bx]

; выбрать ASCII-символ

and

ax,000Fh

; очистить зону тройки

mul

mult10

; умножить на фактор 10

add

binval_b,ax

; прибавить к двоичному

mov

ax,mult10

; вычислить следующий

mul

cx

; фактор умножения

mov

mult10,ax

 

dec

bx

; последний. ASCII-символ?

jnz

a21

; нет - продолжить

ret

 

 

asc2bin_byte endp

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

asc2bin_word proc

;процедура перевода из ASCII в bin для слова

mov

mult10,1

 

mov

binval_w,0

 

xor

ax,ax

 

xor

dx,dx

 

mov

cx,10

; фактор умножения

lea

si,namefld_w – 1

; адрес ascval

mov

bl,faktlen_w

; длина ascval

mov

bh,0

 

b20:

 

 

mov

al,[si+bx]

; выбрать ASCII-символ

and

ax,000Fh

; очистить зону тройки

mul

mult10

; умножить на фактор 10

add

binval_w,ax

; прибавить к двоичному

mov

ax,mult10

; вычислить следующий

mul

cx

; фактор умножения

mov

mult10,ax

 

 

 

79

dec

bx

; последний. ASCII-символ?

jnz

b20

; нет - продолжить

ret asc2bin_word endp

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

asc2bin_dword proc

 

 

 

 

 

 

;процедура перевода из ASCII в bin для двойного слова

comment @

mov

mult10,1

 

 

 

mov

binval_d,0

 

 

 

 

 

 

xor

ax,ax

 

 

 

 

 

 

 

 

 

 

 

 

xor

dx,dx

 

 

 

 

 

 

 

 

 

 

 

 

mov

cx,10

 

 

 

 

 

 

 

 

 

 

 

 

lea si,namefld_d-1

 

 

 

mov

bl,faktlen_d

 

 

 

 

mov

bh,0

 

 

 

 

 

 

 

 

 

abd20:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

mov

al,[si+bx]

 

 

 

 

and

ax,000fh

 

 

 

 

 

mov

DI,mult10

 

 

 

 

mul

DI

 

 

 

 

 

 

 

 

 

;mul mult10

add word ptr binval_d,ax adc word ptr binval_d+2,dx

mov

ax,mult10

mul

cx

 

 

mov

 

 

mult10,ax

dec

bx

 

 

jnz

abd20

 

ret

 

 

 

 

 

@

xor ax,ax xor bx,bx xor cx,cx xor dx,dx

mov word ptr binval_d,ax mov word ptr binval_d[2],ax mov word ptr mult10[2],ax mov word ptr mult10,1 mov al,faktlen_d

mov cl,al dec al mov si,ax

met1_d: mov bl,namefld_d[si] cmp bx,30h

jb error_d cmp bx,39h ja error_d and bl,0fh mov dx,0 mov ax,0

abd1: cmp bl,0

80

jz abd2

add ax,word ptr mult10 adc dx,word ptr mult10[2] dec bl

jmp abd1

abd2: add word ptr binval_d,ax adc word ptr binval_d[2],dx mov bl,9

mov dx,word ptr mult10[2] mov ax, word ptr mult10

abd3: cmp bl,0 jz abd4

add word ptr mult10,ax adc word ptr mult10[2],dx dec bl

jmp abd3 abd4: dec si

loop met1_d

mov dx,word ptr binval_d[2] mov ax,word ptr binval_d jmp end_error_d

error_d:

call stroka mov ah,09h lea dx,strerr3 int 21h

;mov osh_v,1 end_error_d:

ret asc2bin_dword endp

;*************************************************************************

;Перевод из ASCII в bin числа b1 ;*************************************************************************

entb1 proc b1b:

;

вывод сообщения 'b1= '

 

 

mov ah,09

 

 

lea dx,soob2

 

 

int 21h

 

;

ввод с клавиатуры b1

 

 

mov ah,0Ah

 

 

lea dx,namepar_b

 

 

int 21h

 

 

call stroka

 

 

call asc2bin_byte

;перевод из ASCII в bin

 

xor ax,ax

;переносим переведённый байт в b1

 

mov al,byte ptr binval_b

 

 

mov b1,al

 

 

;

mov al,b1

 

;b1 сравниваем с 127

 

cmp al,127

 

 

 

 

 

81

ja b1m

;если >, то на метку b1m

jmp b1e

;если <= , то на метку b1e

b1m:

 

mov ah,09

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

lea dx,strerr1

;сообщения об ошибке

int 21h

 

jmp b1b

; переход на B1B

b1e:

 

ret entb1 endp

;************************************************************************* ; Перевод из ASCII в bin числа b2 ;*************************************************************************

entb2 proc

 

b2b:

 

mov ah,09

; вывод сообщения: 'b2= '

lea dx,soob3

 

int 21h

 

;ввод с клавиатуры b2 mov ah,0Ah

lea dx,namepar_b int 21h

;mov mult10,1

call stroka

 

call asc2bin_byte

;перевод из ASCII в bin

xor ax,ax

;переносим переведённый байт в b2

mov al,byte ptr binval_b

 

mov b2,al

 

;

mov al,b2

 

;b2 сравниваем с 127

cmp al,127

 

ja b2m

;если >, то на метку b2m

jmp b2e

;если <= , то на метку b2e

b2m:

 

 

 

mov ah,09

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

lea dx,strerr1

;сообщения об ошибке

int 21h

 

jmp b2b

; переход на b2b

b2e:

 

 

 

ret entb2 endp

;************************************************************************ ; Перевод из ASCII в bin числа b3 ;************************************************************************

entb3 proc

 

b3b:

 

mov ah,09

; вывод сообщения 'b3= '

lea dx,soob4

 

int 21h

 

; ввод с клавиатуры b3

 

mov ah,0Ah

 

 

82

lea dx,namepar_b int 21h

call stroka

;mov mult10,1

;перевод из ASCII в bin

call asc2bin_byte

; переносим переведённый байт в b3 xor ax,ax

mov al,byte ptr binval_b mov b3,al

;mov al,b3

cmp al,127

;b3 сравниваем с 127

ja b3m

;если >, то на метку b3m

jmp b3e

;если <= , то на метку b3e

b3m:

 

mov ah,09

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

lea dx,strerr1

;сообщения об ошибке

int 21h

 

jmp b3b

; переход на b3b

b3e:

 

ret entb3 endp

;************************************************************************ ; Перевод из ASCII в bin числа b13 ;************************************************************************ entb13 proc

b13b:

;вывод сообщения 'b13= ' mov ah,09

lea dx,soob5 int 21h

;ввод с клавиатуры b13 mov ah,0Ah

lea dx,namepar_b int 21h

call stroka

 

call asc2bin_byte

;перевод из ASCII в bin

xor ax,ax

;переносим переведённый байт в b13

mov al,byte ptr binval_b

 

mov b13,al

 

;

mov al,b13

 

;b13 сравниваем с 127

cmp al,127

 

ja b13m

;если >, то на метку b13m

jmp b13e

;если <=, то на метку b13e

b13m:

 

 

 

mov ah,09

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

lea dx,strerr1

;сообщения об ошибке

int 21h

 

 

 

jmp b13b

; переход на b13b

b13e:

 

 

 

 

 

 

83

ret entb13 endp

;************************************************************************ ; Перевод из ASCII в bin числа b16 ;************************************************************************ entb16 proc

b16b:

;вывод сообщения 'b16= ' mov ah,09

lea dx,soob6 int 21h

;ввод с клавиатуры b16 mov ah,0Ah

lea dx,namepar_b int 21h

call stroka

 

call asc2bin_byte

;перевод из ASCII в bin

xor ax,ax

;переносим переведённый байт в b16

mov al,byte ptr binval_b

 

mov b16,al

 

;

mov al,b16

 

;b16 сравниваем с 127

cmp al,127

 

ja b16m

 

 

;если >, то на метку b16m

jmp b16e

;если <= , то на метку b16e

b16m:

 

 

 

mov ah,09

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

lea dx,strerr1

;сообщения об ошибке

int 21h

 

 

 

jmp b16b

; переход на b16b

b16e:

 

 

 

ret entb16 endp

;************************************************************************ ; Перевод из ASCII в bin числа w1 ;************************************************************************

entw1 proc

 

 

 

 

w1b:

 

 

 

 

mov ah,09

; вывод сообщения 'w1= '

lea dx,soob7

 

int 21h

 

; ввод с клавиатуры w1

 

mov ah,0ah

 

lea dx,namepar_w

 

int 21h

 

call stroka

 

;mov mult10,1

 

 

;перевод из ASCII в bin

call asc2bin_word

;

xor ax,ax

 

 

mov

ax,binval_w

;переносим переведённое значение в w1

mov w1,ax

 

 

 

 

 

84

;mov ax,w1

cmp ax,32767

;w1 сравниваем с 32767

ja w1m

;если >, то на метку w1m

jmp w1e

;если <= , то на метку w1e

w1m:

 

mov ah,09

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

lea dx,strerr2

;сообщения об ошибке

int 21h

 

jmp w1b

; переход на w1b

w1e:

 

ret entw1 endp

;************************************************************************

; Перевод из ASCII в bin числа w2 ;************************************************************************

entw2 proc

 

 

 

 

w2b:

 

 

 

 

mov ah,09

; вывод сообщения 'w2= '

lea dx,soob8

 

int 21h

 

; ввод с клавиатуры w2

 

mov ah,0Ah

 

lea dx,namepar_w

 

int 21h

 

call stroka

 

;mov mult10,1

 

 

;перевод из ASCII B BIN

call asc2bin_word

xor ax,ax

;переносим переведённый байт в w2

mov ax, binval_w

 

mov w2,ax

 

;

mov ax,w2

 

 

cmp

ax,32767

 

;w2 сравниваем с 32767

ja w2m

;если >, то на метку w2m

jmp w2e

;если <= , то на метку w2e

w2m:

 

 

 

 

mov ah,09

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

lea dx,strerr2

;сообщения об ошибке

int 21h

 

jmp w2b

; переход на w2b

w2e:

 

 

 

 

ret entw2 endp

;************************************************************************ ; Перевод из ASCII в bin числа w13 ;************************************************************************

entw13 proc

 

w13b:

 

mov ah,09

; вывод сообщения 'w13= '

lea dx,soob7

 

int 21h

 

 

85

; ввод с клавиатуры w13

 

mov ah,0Ah

 

lea dx,namepar_w

 

int 21h

 

call stroka

 

;mov mult10,1

 

 

;перевод из ASCII в bin

call asc2bin_word

;

xor ax,ax

 

 

mov

ax,binval_

w

;переносим переведённый байт в w1

mov w1,ax

 

;mov ax,w1

cmp ax,32767

;w13 сравниваем с 32767

ja w13m

;если >, то на метку w13m

jmp w13e

;если <=, то на метку w13e

w13m:

 

mov ah,09

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

lea dx,strerr2

;сообщения об ошибке

int 21h

 

jmp w1b

; переход на w1b

w13e:

 

ret entw13 endp

;************************************************************************ ; Перевод из ASCII в bin числа w19 ;************************************************************************

entw19 proc

 

 

 

 

w19b:

 

 

 

 

mov ah,09

; вывод сообщения 'w19= '

lea dx,soob7

 

int 21h

 

; ввод с клавиатуры w19

 

mov ah,0Ah

 

lea dx,namepar_w

 

int 21h

 

call stroka

 

;mov mult10,1

 

 

;перевод из ASCII в bin

call asc2bin_word

xor ax,ax

;переносим переведённое значение в w19

mov ax,binval_w

 

mov w19,ax

 

;

mov ax,w19

 

 

cmp

ax,32767

 

;w19 сравниваем с 32767

ja w19m

;если >, то на метку w19m

jmp w19e

;если <= , то на метку w19e

w19m:

 

 

 

 

mov ah,09

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

lea dx,strerr2

;сообщения об ошибке

int 21h

 

jmp w19b

; переход на w19b

w19e:

 

 

 

 

 

 

 

 

86

ret entw19 endp

;************************************************************************ ; Перевод из ASCII в bin числа w21 ;************************************************************************

entw21 proc

 

 

 

 

w21b:

 

 

 

 

mov ah,09

; вывод сообщения 'w21= '

lea dx,soob8

 

int 21h

 

;ввод с клавиатуры w21

 

mov ah,0ah

 

lea dx,namepar_w

 

int 21h

 

call stroka

 

;mov mult10,1

 

 

;перевод из ASCII в bin

call asc2bin_word

xor ax,ax

;переносим переведённое значение в w2

mov ax, binval_w

 

mov w21,ax

 

;

mov ax,w21

 

 

cmp

ax,32767

 

;w21 сравниваем с 32767

ja w21m

;если >, то на метку w21m

jmp w21e

;если <=, то на метку w21e

w21m:

 

 

 

 

mov ah,09

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

lea dx,strerr2

;сообщения об ошибке

int 21h

 

jmp w21b

; переход на w21b

w21e:

 

 

 

 

ret entw21 endp

;************************************************************************ ; Перевод из ASCII в bin числа d1 ;************************************************************************

entd1 proc

 

 

 

 

 

d1b:

 

 

 

 

 

mov ah,09

; вывод сообщения 'd1= '

lea dx,soob11

 

int 21h

 

mov ah,0ah

; ввод с клавиатуры d1

lea dx,namepar_d

 

int 21h

 

call stroka

 

;mov mult10,1

 

 

 

;перевод из ASCII в bin

call asc2bin_dword

;

xor ax,ax

 

 

 

xor bx,bx

 

 

 

xor cx,cx

 

;

xor dx,dx

 

 

 

 

 

 

 

87

mov ax,word ptr binval_d

;переносим переведённое значение в d1

mov dx,word ptr binval_d+2

 

 

 

mov word ptr d1,ax

 

 

 

mov word ptr d1+2,dx

 

 

 

; cmp dx,21474

;dx сравниваем с 21474

 

 

; ja d1m

;если >, то на метку d1m

 

jmp d1e

;если <= , то на метку d1e

d1m:

 

 

 

mov ah,09

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

lea dx,strerr3

;сообщения об ошибке

int 21h

 

 

 

jmp d1b

; переход на d1b

d1e:

 

 

 

ret

 

 

 

entd1 endp

;************************************************************************ ; Процедура перевода строки

;************************************************************************

stroka proc near

;процедура перевода курсора на новую строку

push

 

 

inc

ln

 

mov

ah,02

 

mov

bh,00

 

mov

dh,ln

 

mov

dl,00

 

int

10h

 

pop

 

 

ret

 

 

stroka endp

 

 

printCF proc

 

 

shr

CFval,1

 

mov

ah,09h

 

jnc

mcf0

 

lea

dx,soobcfval1

 

jmp

mcfe

 

mcf0: lea

dx,soobcfval0

 

mcfe: int

21h

 

call

stroka

 

ret

 

 

printcf endp

 

 

entcf proc

 

 

CFb:

 

 

mov

ah,09h

; вывод приглашения

lea

dx,soobcfent

 

int

21h

 

mov

ah,0ah

; ввод с клавиатуры X

lea

dx,namepar_b

int

21h

 

 

 

88

call

stroka

 

call

asc2bin_byte

;перевод из ASCII в bin

;xor ax,ax

mov

al,byte ptr binval_b

mov

CFval,al

 

;переносим переведённый байт в CFval

cmp

al,1

 

 

 

jna

CFe

 

 

 

mov

ah,09

 

 

 

lea

dx,strerr4

int

21h

 

 

 

call

stroka

 

 

jmp

Xb

 

 

 

CFe:

 

 

 

 

ret

 

 

 

 

entcf endp

 

 

 

 

; #34

 

w1 or w2

form34 proc

ax,w1

 

 

 

mov

 

 

 

or

ax,w2

 

 

 

mov

word ptr rezult,ax

mov

word ptr rezult+2,0000h

ret

 

 

 

 

form34 endp

w1 xor

w2

; #35

form35 proc

ax,w1

 

 

 

mov

 

 

 

xor

ax,w2

 

 

 

mov

word ptr rezult,ax

mov

word ptr rezult+2,0000h

ret

 

 

 

 

form35 endp

 

 

 

 

; #49

w13 and

b13

form49 proc

 

 

 

 

;

xor

ax,ax

 

mov

ax,w13

 

 

and

al,b13

 

 

xor

ah,ah

 

 

 

mov

word ptr rezult,ax

mov

word ptr rezult+2,0000h

ret

 

 

 

 

form49 endp

w19

and

not(b16)

; #57

form57 proc

b16

 

 

 

not

 

 

 

mov

ax,w19

 

 

and

al,b16

 

 

xor

ah,ah

 

 

 

mov

word ptr rezult,ax

mov

word ptr rezult+2,0000h

ret

 

 

 

 

form57 endp

w21 and neg(w2)

; #62

form62 proc

 

 

 

 

 

 

 

89

 

neg

w2

 

mov

ax,w21

 

and

ax,w2

 

mov

word ptr rezult,ax

 

mov

word ptr rezult+2,0000h

 

ret

 

form62 endp

логический сдвиг слова влево на 2

; #3

 

form3 proc

ax,w1

 

mov

 

shl

ax,1

 

shl

ax,1

 

mov

word ptr rezult,ax

 

ret

 

form3 endp

арифметический сдвиг двойного слова вправо на 3

; #4

 

form4 proc

ax,word ptr d1

 

mov

 

mov

dx,word ptr d1+2

f4b:

mov

cx,3

clc

dx,1

 

sar

 

jnc

f4e

 

shr

ax,1

 

or

ah,10000000b

f4e:

jmp

f4ee

shr

ax,1

f4ee:

loop

f4b

 

mov

word ptr rezult,ax

 

mov

word ptr rezult+2,dx

 

ret

 

form4 endp

циклический сдвиг байта влево на 4

; #5

 

form5 proc

;xor ax,ax

mov

al,b1

 

 

;

xor

cx,cx

 

mov

cl,4

 

 

rol

al,cl

 

 

mov

byte ptr rezult,al

ret

 

 

 

form5 endp

логический сдвиг слова вправо через флаг переноса на 5

; #6

form6 proc

CFval,1

shr

mov

ax,w1

 

 

mov

cl,5

 

 

rcr

ax,cl

 

 

mov

word ptr rezult,ax

rcl

CFval,1

ret

 

 

 

form6 endp

 

 

;конец сегмента кода

codesg ends

 

 

end start

 

 

 

 

 

 

90

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]