2591
.pdf;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 |