Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2591

.pdf
Скачиваний:
2
Добавлен:
07.01.2021
Размер:
25.15 Mб
Скачать

;w1 xor b3 xor ax,ax mov al,b3 cbw

xor ax,w1

mov word ptr rez2,ax

;d1 or d2 xor ax,ax xor bx,bx

mov ax,word ptr d1 mov bx,word ptr d1+2 xor ax,word ptr d2 xor bx,word ptr d2+2 mov word ptr rez3,ax

mov word ptr rez3+2,bx

;b1 and b2 xor (w1 xor b3) mov ax,word ptr rez1 xor ax,word ptr rez2 mov word ptr rez4,ax

;b1 and b2 xor (w1 xor b3) or (d1 or d2) xor ax,ax

mov ax,word ptr rez4 or ax,word ptr rez3 mov word ptr rezult,ax ret

formula2 endp

csg_mod ends

end formula2

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

; l_2_1kln.asm КАЛИНИН МИХАИЛ, СибАДИ, гр. БИ11, октябрь 2004г.

STACKSG SEGMENT PARA STACK 'STACK' ;\

db 1024 dup(?)

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

STACKSG ENDS

;/

public soobe_1,soobe_2,soob0_err,soob_b1,soob_b2,soob_d1,soob_d2,b1,b2,d1,d2,num_ln,mult 10,rezult,ten,ascval,binval_d,binval_w,binval_b,binval

public cursor,ascii_binw,ascii_bind,ascii_binb,clrascval

101

public soob0_3,soobl_err,soobl,soobl_1,soobl_2,soobl_3,soobl_4,soobl_5,soobl_n1,soobl_n2,soob l_n3,soobl_n4,soobl_n5

public namepar_b,maxlen_b,faktlen_b,namefld_b,namepar_w,maxlen_w,faktlen_w,namefld_w, namepar_d,maxlen_d,faktlen_d,namefld_d,namepar,maxlen,faktlen,namefld

public clrscr,bin_bin extrn main:proc

DATASG SEGMENT PARA 'DATA' ;начало сегмента данных

SOOB1 db 'Здравствуйте, уважаемый пользователь!','$' SOOB0 db 'w1*w2+d1/b1-(w3+b2+b3)','$'

soob0_1 db 'Выберите номер действия:','$'

soob0_2 db '[1] вычисления по формуле w1*w2+d1/b1-(w3+b2+b3)','$' soob0_3 db '[2] логические операции','$'

soob0_4 db '[3] покинуть программу','$' soobe_1 db '[1] главное меню','$' soobe_2 db '[2] покинуть программу','$'

soob0_err db 'Ошибка выбора номера операции, выберите снова','$' soobl_err db 'Ошибка выбора номера формулы, выберите снова','$' soobl db 'Выберите номер формулы:','$'

soobl_1 db 'b1 or b2','$' soobl_2 db 'b1 xor b2','$' soobl_3 db 'b1 and b2','$' soobl_4 db 'b1 and not(b2)','$' soobl_5 db 'd1 and neg(d2)','$' soobl_n1 db '[1] b1 or b2','$' soobl_n2 db '[2] b1 xor b2','$' soobl_n3 db '[3] b1 and b2','$'

soobl_n4 db '[4] b1 and not(b2)','$' soobl_n5 db '[5] d1 and neg(d2)','$'

soob_w1 db 'w1=','$' soob_w2 db 'w2=','$' soob_d1 db 'd1=','$' soob_b1 db 'b1=','$' soob_w3 db 'w3=','$' soob_b2 db 'b2=','$' soob_b3 db 'b3=','$' soob_d2 db 'd2=','$'

soob_error db 'Ошибка ввода, введите заново','$'

soob_error_b db 'Введено число больше 127, повторите ввод','$' soob_error_w db 'Введено число больше 32767, повторите ввод','$' soob_error_d db 'Введено число больше 2147483648, повторите ввод','$'

soob_error_b1 db 'В данной формуле b1 не может быть равно нулю, повторите ввод','$'

102

NAMEPAR_b LABEL BYTE

MAXLEN_b db 4

FAKTLEN_b db ?

NAMEFLD_b db "0000"

NAMEPAR_w LABEL BYTE

MAXLEN_w db 6

FAKTLEN_w db ?

NAMEFLD_w db "000000"

NAMEPAR_d LABEL BYTE

MAXLEN_d db 12

FAKTLEN_d db ?

NAMEFLD_d db "000000000000"

NAMEPAR LABEL BYTE

MAXLEN db 2

FAKTLEN db ?

NAMEFLD db "00"

binval_b dw 0 binval_w dw 0 binval_d dd 0 binval dw 0

b1 db 0

b2 db 0

b3 db 0

w1 dw 0

w2 dw 0

w3 dw 0

d1 dd 0

d2 dd 0

rez_1 dd 0 rez_2 dw 0 rez_3 dw 0

num_ln db 00 mult10 dw 1 err db 1 rezult dd 0 ten db 0

ascval db "00000000000000000000000000000000","$"

DATASG ENDS

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

103

CODESG SEGMENT PARA 'CODE'

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

BEGIN PROC FAR

 

;начало основной процедуры

assume cs:codesg,ds:datasg,ss:stacksg

;связь сегментов с сегментными регистрами

 

push ds

 

 

 

xor ax,ax

 

 

 

push ax

 

 

 

mov ax,datasg

 

 

 

mov ds,ax

 

 

beg:

call clrscr

 

 

 

call cursor

;вызов процедуры перевода курсора

 

mov ah,09h

;функция вывода на экран

 

lea dx,soob1

;загрузить адрес начала сообщения в dx

 

int 21h

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

 

call cursor

;вызов процедуры перевода курсора

 

mov ah,09h

;функция вывода на экран

 

lea dx,soob0_1

;загрузить адрес начала сообщения в dx

 

int 21h

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

 

call cursor

;вызов процедуры перевода курсора

 

mov ah,09h

;функция вывода на экран

 

lea dx,soob0_2

;загрузить адрес начала сообщения в dx

 

int 21h

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

 

call cursor

;вызов процедуры перевода курсора

 

mov ah,09h

;функция вывода на экран

 

lea dx,soob0_3

;загрузить адрес начала сообщения в dx

 

int 21h

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

 

call cursor

;вызов процедуры перевода курсора

 

mov ah,09h

;функция вывода на экран

 

lea dx,soob0_4

;загрузить адрес начала сообщения в dx

 

int 21h

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

 

call cursor

;вызов процедуры перевода курсора

vvod:

mov ah,0ah

 

 

 

lea dx,namepar

 

 

 

 

 

104

 

int 21h

 

 

 

 

xor ax,ax

 

 

 

 

lea si,namefld

 

 

 

 

mov al,[si]

 

 

 

 

and al,00fh

 

 

 

 

mov binval,ax

 

 

 

 

call cursor

 

 

 

 

cmp binval,1

 

 

 

 

je arifm

 

 

 

 

cmp binval,2

 

 

 

 

je log

 

 

 

 

cmp binval,3

 

 

 

 

je jmp_rt

 

 

 

 

mov ah,09h

 

 

 

 

lea dx,soob0_err

 

 

 

int 21h

 

 

 

 

call cursor

 

 

 

 

jmp vvod

 

 

 

jmp_rt:jmp dos

 

 

 

log:

call main

 

 

 

 

jmp beg

 

 

 

arifm:

mov ax,0600h ;\

 

|al=00 (весь экран), ah=06 (прокрутка)

 

mov bh,07

; \

 

|чёрно-белый

 

mov cx,0000

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

|левая верхняя позиция

 

mov dx,314fh

; /

 

|правая нижняя позиция

 

int 10h

;/

 

|передача управления в BIOS

 

mov num_ln,0

 

 

 

 

call cursor

 

;вызов процедуры перевода курсора

 

mov ah,09h

 

;функция вывода на экран

 

lea dx,soob0

 

 

 

 

int 21h

 

 

 

 

call cursor

 

;вызов процедуры перевода курсора

;======================= перевод из ASCII в bin числа w1 =================

lw1: mov ah,09h

;вывод на экран сообщения 'w1='

lea dx,soob_w1

 

int 21h

 

mov ah,0ah

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

lea dx,namepar_w

 

int 21h

 

 

105

call symbol_w

 

mov al,err

 

cbw

 

jns lw1

 

call ASCII_binw

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

xor ax,ax

;ax=0

mov ax,binval_w

;поместить в ax число w1

mov w1,ax

;поместить в переменную w1 число w1

call cursor

 

xor ax,ax

 

mov ax,w1

;поместить в ax число w1

cmp ax,32767

;сравнение числа w1 с 32767

ja ew1

;если w1>32767, то на метку ew1

xor ax,ax

 

jmp lw2

;если w1<=32767, то на метку lw2

ew1: mov ah,09h

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

lea dx,soob_error_w

 

int 21h

 

call cursor

;вызов процедуры перевода курсора

jmp lw1

;переход на метку lw1

;======================= перевод из ASCII в bin числа w2 ==================

lw2: mov ah,09h ;вывод на экран сообщения 'w2=' lea dx,soob_w2

int 21h

mov ah,0ah

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

lea dx,namepar_w

 

int 21h

 

call symbol_w

 

mov al,err

 

cbw

 

jns lw2

 

call ASCII_binw

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

xor ax,ax

;ax=0

mov ax,binval_w

;поместить в ax число w2

mov w2,ax

;поместить в переменную w2 введенное значение

 

106

call cursor

 

xor ax,ax

 

mov ax,w2

; поместить в ax число w2

cmp ax,32767

; сравнение числа w2 с 32767

ja ew2

; если w2>32767, то на метку ew2

xor ax,ax

 

jmp ld1

; если w2<=32767, то на метку ld1

ew2: mov ah,09h

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

lea dx,soob_error_w

 

int 21h

 

call cursor

; вызов процедуры перевода курсора

jmp lw2

; переход на метку lw2

;======================= перевод из ASCII в bin числа d1 ==================

ld1: mov ah,09h ; вывод на экран сообщения 'd1=' lea dx,soob_d1

int 21h

mov ah,0ah

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

lea dx,namepar_d

 

int 21h

 

call symbol_d

 

mov al,err

 

cbw

 

jns ld1

 

call ASCII_bind

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

xor ax,ax

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

xor dx,dx

 

mov ax,word ptr binval_d

 

mov dx,word ptr binval_d+2

 

mov word ptr d1,ax

 

mov word ptr d1+2,dx

 

call cursor

 

cmp dx,21474

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

ja ed1

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

xor dx,dx

 

jmp lb1

 

 

107

ed1: mov ah,09h

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

lea dx,soob_error_d

 

int 21h

 

call cursor

;вызов процедуры перевода курсора

jmp ld1

;переход на метку ld1

;======================= перевод из ASCII в bin числа b1 ==================

lb1: mov ah,09h ;вывод на экран сообщения 'b1=' lea dx,soob_b1

int 21h

 

mov ah,0ah

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

 

lea dx,namepar_b

 

 

int 21h

 

 

call symbol_b

 

 

mov al,err

 

 

cbw

 

 

jns lb1

 

 

call ASCII_binb

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

 

xor ax,ax

;ax=0

 

mov ax,binval_b

;поместить в al число b1

 

mov b1,al

;поместить в переменную b1 введенное значение

 

call cursor

 

 

xor ax,ax

 

 

mov al,b1

;поместить в al число b1

 

cbw

 

 

cmp ax,127

;сравнение числа b1 с 127

 

ja eb1

;если b1>127, то на метку eb1

 

cmp ax,0

 

 

je e2b1

 

 

xor ax,ax

 

 

jmp lw3

;если b1<=127, то на метку lw3

e2b1:

mov ah,09h

 

 

lea dx,soob_error_b1

 

 

int 21h

 

 

call cursor

 

 

jmp lb1

 

eb1:

mov ah,09h

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

 

lea dx,soob_error_b

 

 

 

108

int 21h

 

call cursor

;вызов процедуры перевода курсора

jmp lb1

;переход на метку lb1

;======================= перевод из ASCII в bin числа w3 ==================

lw3: mov ah,09h ;вывод на экран сообщения 'w3=' lea dx,soob_w3

int 21h

mov ah,0ah

 

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

lea dx,namepar_w

 

int 21h

 

 

call symbol_w

 

 

mov al,err

 

 

cbw

 

 

jns lw3

 

 

call ASCII_binw

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

xor ax,ax

 

;ax=0

mov ax,binval_w

;поместить в ax число w3

mov w3,ax

 

;поместить в переменную w3 введенное значение

call cursor

 

 

xor ax,ax

 

 

mov ax,w3

 

;поместить в ax число w3

cmp ax,32767

 

;сравнение числа w3 с 32767

ja ew3

 

;если w2>32767, то на метку ew3

xor ax,ax

 

 

jmp lb2

;если w2<=32767, то на метку lb2

ew3: mov ah,09h

 

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

lea dx,soob_error_w

 

int 21h

 

 

call cursor

 

;вызов процедуры перевода курсора

jmp lw3

 

;переход на метку lw3

;======================= перевод из ASCII в bin числа b2 ==================

lb2: mov ah,09h ;вывод на экран сообщения 'b2=' lea dx,soob_b2

int 21h

mov ah,0ah

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

lea dx,namepar_b

 

 

109

int 21h

call symbol_b

mov al,err cbw

jns lb2

call ASCII_binb

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

xor ax,ax

 

;ax=0

mov ax,binval_b

;поместить в al число b2

mov b2,al

 

;поместить в переменную b2 число b2

call cursor

 

 

xor ax,ax

 

 

mov al,b2

 

;поместить в al число b2

cbw

 

 

cmp ax,127

 

;сравнение числа b2 с 127

ja eb2

 

;если b2>127, то на метку eb2

xor ax,ax

 

 

jmp lb3

;если b2<=127, то на метку lb3

eb2: mov ah,09h

 

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

lea dx,soob_error_b

 

int 21h

 

 

call cursor

 

;вызов процедуры перевода курсора

jmp lb2

;переход на метку lb2

;======================= перевод из ASCII в bin числа b3 ==================

lb3: mov ah,09h ;вывод на экран сообщения 'b3=' lea dx,soob_b3

int 21h

mov ah,0ah

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

lea dx,namepar_b

 

int 21h

 

call symbol_b

 

mov al,err

 

cbw

 

jns lb3

 

call ASCII_binb

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

 

110

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