2591
.pdflea dx,NAMEPAR_b |
|
int 21h |
|
CALL STROKA |
|
call ASC2BIN_BYTE |
;перевод из ASCII в bin |
xor ax,ax |
;переносим переведённый байт в b1 |
mov al,byte ptr binval_b |
|
mov b13,al |
|
mov al,b13 |
; В1 сравниваем с 127 |
cmp al,127 |
|
ja B13M |
; если >, то на метку osi |
jmp B13E |
; если <= , то на метку www |
B13M: |
|
mov ah,09 |
;вывод на экран |
lea dx,STRERR1 |
;сообщения об ошибке |
int 21h |
|
jmp B13B |
; переход на QQ1 |
B13E: |
|
RET
ENTB13 ENDP
;*************************************************************************** ;перевод из ASCII в bin числа b16 ;***************************************************************************
ENTB16 PROC |
|
|
B16B: |
|
|
; вывод сообщ: 'b16= ' |
|
|
mov ah,09 |
|
|
lea dx,soob16 |
|
|
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 |
|
;В16 сравниваем с 127 |
cmp al,127 |
|
|
ja B16M |
|
; если >, то на метку osi |
jmp B16E |
|
;если <= , то на метку www |
B16M: |
|
|
mov ah,09 |
|
;вывод на экран |
lea dx,STRERR1 |
;сообщения об ошибке |
|
int 21h |
|
|
|
|
81 |
jmp B16B |
; переход на QQ1 |
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 |
|
call ASC2BIN_WORD |
;перевод из ASCII в bin |
xor ax,ax |
;переносим переведённый байт в w1 |
mov ax,binval_w |
|
mov w1,ax |
|
mov ax,w1 |
; w1 сравниваем с 32767 |
cmp ax,32767 |
|
ja W1M |
;если >, то на метку dd2 |
jmp W1E |
;если <= , то на метку dd3 |
W1M: |
|
mov ah,09 |
; вывод на экран |
lea dx,STRERR2 |
; сообщения об ошибке |
int 21h |
|
jmp W1B |
; переход на dd1 |
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 |
|
|
82 |
;mov mult10,1 |
|
call ASC2BIN_WORD |
;перевод из ASCII в bin |
xor ax,ax |
;переносим переведённый байт в w2 |
mov ax, binval_w |
|
mov w2,ax |
|
mov ax,w2 |
; w2 сравниваем с 32767 |
cmp ax,32767 |
|
ja W2M |
;если >, то на метку z2 |
jmp W2E |
;если <= , то на метку z3 |
W2M: |
|
mov ah,09 |
;вывод на экран |
lea dx,STRERR2 |
;сообщения об ошибке |
int 21h |
|
jmp W2B |
; переход на z1 |
W2E: |
|
RET
ENTW2 ENDP
;*************************************************************************** ;перевод из ASCII в bin числа w13 ;***************************************************************************
ENTW13 PROC W13B:
mov ah,09 |
; вывод сообщения 'w13= ' |
lea dx,soob14 |
|
int 21h |
|
; ввод с клав w1 |
|
mov ah,0Ah |
|
lea dx,NAMEPAR_w |
|
int 21h |
|
|
CALL STROKA |
|
;mov mult10,1 |
|
|
call ASC2BIN_WORD |
; перевод из ASCII в bin |
|
xor ax,ax |
; переносим переведённый байт в w13 |
|
mov ax,binval_w |
|
|
mov w13,ax |
|
|
;mov ax,w13 |
; w13 сравниваем с 32767 |
|
; |
cmp ax, |
|
; ja W13M |
;если >, то на метку dd2 |
|
; jmp W13E |
;если <= , то на метку dd3 |
|
;W13M: |
|
|
; |
mov ah,09 |
;вывод на экран |
; |
lea dx,STRERR2 |
;сообщения об ошибке |
; |
int 21h |
|
; |
jmp W1B |
; переход на dd1 |
;W13E: |
|
RET
ENTW13 ENDP
83
;*************************************************************************** ;перевод из ASCII в bin числа w19 ;***************************************************************************
ENTW19 PROC |
|
W19B: |
|
mov ah,09 |
; вывод сообщения 'w19= ' |
lea dx,soob15 |
|
int 21h |
|
; ввод с клав w1 |
|
mov ah,0Ah |
|
lea dx,NAMEPAR_w |
|
int 21h |
|
CALL STROKA |
|
;mov mult10,1 |
|
call ASC2BIN_WORD |
;перевод из ASCII в bin |
xor ax,ax |
;переносим переведённый байт в w19 |
mov ax,binval_w |
|
mov w19,ax |
|
mov ax,w19 |
; w19 сравниваем с 32767 |
cmp ax,32767 |
|
ja W19M |
; если >, то на метку dd2 |
jmp W19E |
;если <= , то на метку dd3 |
W19M: |
|
mov ah,09 |
; вывод на экран |
lea dx,STRERR2 |
; сообщения об ошибке |
int 21h |
|
jmp W19B |
; переход на dd1 |
W19E: |
|
RET
ENTW19 ENDP
;*************************************************************************** ;перевод из ASCII в bin числа w21 ;***************************************************************************
ENTW21 PROC |
|
W21B: |
|
mov ah,09 |
; вывод сообщения 'w2= ' |
lea dx,soob17 |
|
int 21h |
|
;ввод с клав W2 |
|
mov ah,0Ah |
|
lea dx,NAMEPAR_w |
|
int 21h |
|
CALL STROKA |
|
;mov mult10,1 |
|
call ASC2BIN_WORD |
; перевод из ASCII в bin |
xor ax,ax |
; переносим переведённый байт в w2 |
mov ax, binval_w |
|
|
84 |
mov w21,ax |
|
mov ax,w21 |
; w21 сравниваем с 32767 |
cmp ax,32767 |
|
ja W21M |
;если >, то на метку z2 |
jmp W21E |
;если <= , то на метку z3 |
W21M: |
|
mov ah,09 |
; вывод на экран |
lea dx,STRERR2 |
; сообщения об ошибке |
int 21h |
|
jmp W21B |
; переход на z1 |
W21E: |
|
RET |
|
ENTW21 ENDP
;*************************************************************************** ;перевод из ASCII в bin числа d1 ;*************************************************************************** ENTD1 PROC
D1B: |
|
mov ah,09 |
; вывод сообщения 'd1= ' |
lea dx,soob11 |
|
int 21h |
|
mov ah,0Ah |
; ввод с клавиатуры w5 |
lea dx,NAMEPAR_d |
|
int 21h |
|
CALL STROKA |
|
;mov mult10,1 |
|
call ASC2BIN_dword |
; перевод из ASCII в bin |
xor ax,ax |
; переносим переведённый байт в d1 |
xor bx,bx |
|
xor cx,cx |
|
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 |
|
cmp dx,21474 |
; dx сравниваем с 21474 |
ja D1M |
; если >, то на метку u2 |
jmp D1E |
; если <= , то на метку u3 |
D1M: |
|
mov ah,09 |
; вывод на экран |
lea dx,STRERR3 |
; сообщения об ошибке |
int 21h |
|
jmp D1B |
; переход на uu1 |
D1E: |
|
RET |
|
ENTD1 ENDP |
|
|
85 |
;*************************************************************************** ; ПРОЦЕДУРА ПЕРЕВОДА СТРОКИ ;***************************************************************************
STROKA proc near |
; процедура перевода курсора на новую строку |
PUSH AX |
|
inc |
ln |
mov |
ah,02 |
mov |
bh,00 |
mov |
dh,ln |
mov |
dl,00 |
int |
10h |
POP AX |
|
ret |
|
STROKA endp |
|
CODESG ENDS |
; конец сегмента кода |
END BEGIN |
; конец программы |
;================================================================== ; lb2_2bnn.asm ЛАБОРАТОРНАЯ РАБОТА №2 (модуль 2)
;РАЗРАБОТАНО (здесь чужого кода совсем между прочим, нет все своими ручками :) ;студентом 1 курса СибАДИ гр. БИ11 БУСЛАЕВЫМ НИКОЛАЕМ НИКОЛАЕВИЧЕМ ;================================================================== extrn B13:BYTE,B16:BYTE,W1:WORD,W2:WORD,W13:WORD,W19:WORD,W21:WORD,RE ZULT:dwORD
PUBLIC FORM34,FORM35,FORM49,FORM57,FORM62
CODESG SEGMENT PARA 'Code'
FORM34 PROC
MOV AX,W1
OR AX,W2
MOV WORD PTR REZULT,AX
MOV WORD PTR REZULT+2,0000H
RET
FORM34 ENDP
FORM35 PROC
MOV AX,W1
XOR AX,W2
MOV WORD PTR REZULT,AX
MOV WORD PTR REZULT+2,0000H
RET
FORM35 ENDP
FORM49 PROC
XOR BX,BX
XOR AX,AX
MOV BX,W13
MOV AL,B13
86
AND BX,AX
;XOR AH,AH
MOV WORD PTR REZULT,BX
MOV WORD PTR REZULT+2,0000H RET
FORM49 ENDP
FORM57 PROC
NOT B16 MOV AX,W19 AND AL,B16 XOR AH,AH
MOV WORD PTR REZULT,AX MOV WORD PTR REZULT+2,0000H RET
FORM57 ENDP
FORM62 PROC
NEG W2 MOV AX,W21 AND AX,W2
MOV WORD PTR REZULT,AX MOV WORD PTR REZULT+2,0000H RET
FORM62 ENDP
CODESG ENDS END
;================================================================= ; l_2_1zal.asm ЗАБИЯКИН АЛЕКСЕЙ
stacksg segment para stack 'Stack' db 1024 dup (?)
stacksg ends ;-------------------------------------------------------------------------------
public b1,b2,b3,w1,d1,d2
public rez1,rez2,rez3,rez4,rezult,ascval public bin_ASCII
extrn formula2:proc ;-------------------------------------------------------------------------------
datasg segment para 'Data' b1 db 0
b2 db 0
b3 db 0
w1 dw 0
w2 dw 0
d1 dd 0
d2 dd 0
x1 db 0
87
vvod_b label byte max_b db 4 fact_b db 0 field_b db '0000','$' vvod_w label byte max_w db 7 fact_w db 0
field_w db '0000000','$' vvod_d label byte max_d db 11
fact_d db 0
field_d db '00000000000','$'
ascval db "00000000000000000000","$";поле переведённых данных
binval db 0 |
;результат преобразования |
asclen db 20 |
;длина введенного символьного числа |
mult10 db 1 |
;фактор умножения |
binval_w dw 0
soob_p db 'Здравствуйте, уважаемый пользователь',0dh,0ah,'$'
soob_f db 'Программа вычисляет по формулам w1*w2+d1/b1-(b2-b3) и',0ah,0dh,'$' soob_f2 db 'b1 and b2 xor (w1 xor b3) or (d1 or d2)',0ah,0dh,'$'
soob_v db 'Нажмите 1 или 2 для выбора формулы',0ah,0dh,'$' s_b1 db 'Введите b1',0ah,0dh,'$'
s_b2 db 'Введите b2',0ah,0dh,'$' s_b3 db 'Введите b3',0ah,0dh,'$' s_w1 db 'Введите w1',0ah,0dh,'$' s_w2 db 'Введите w2',0ah,0dh,'$' s_w3 db 'Введите w3',0ah,0dh,'$' s_d1 db 'Введите d1',0ah,0dh,'$' s_d2 db 'Введите d2',0ah,0dh,'$'
soob_o db 'Ответ будет равен:',0ah,0dh,'$'
soob_vixod db "Для выхода нажмите любую клавишу",0ah,0dh,"$" soob db 'До свидания',0ah,0dh,'$'
perevod_cursora db 0dh,0ah,"$"
oshibka_v db "Ошибка ввода!(введите другое число)",0dh,0ah,"$"
rez1 dd 0 rez2 dd 0 rez3 dd 0 rez4 dd 0 rezult dq 0 kol dq 0 osh_v db 0 prom dw 0 promd dd 0 fml dd 0 stroka db 2
88
datasg ends ;-------------------------------------------------------------------------------
codesg segment para 'Code'
assume cs:codesg,ds:datasg,ss:stacksg mainproc proc far
push ds xor ax,ax push ax
mov ax,datasg mov ds,ax
mov ax,0600h |
|
;\ |
| ah=06 (прокрутка), al=00 (весь экран) |
|
mov bh,02 |
|
; \ |
|
| нормальный атрибут (черно-белый) |
mov cx,0000 |
|
; |
очистка экрана | верхняя левая позиция |
|
mov dx,314fh |
|
; / |
| нижняя правая позиция |
|
int 10h |
;/ |
|
|
| передача управления в BIOS |
mov ah,02 |
|
;\ |
|
| установка курсора |
mov bh,00 |
|
; \ |
|
| экран 0 |
mov dh,01 |
|
; |
управление курсором | строка 01 |
|
mov dl,00 |
|
; / |
|
| столбец 00 |
int 10h |
;/ |
|
|
| передача упр. в BIOS |
mov ah,09 |
|
;\ |
|
\ |
lea dx,soob_p |
|
; вывод на экран сообщения \ |
||
int 21h |
;/ |
|
|
\ |
mov ah,09 |
|
;\ |
|
\ |
lea dx,soob_f |
|
; вывод на экран сообщения \ |
||
int 21h |
;/ |
|
|
\ |
mov ah,09 |
|
;\ |
|
\ |
lea dx,soob_f2 ; вывод на экран сообщения \ |
||||
int 21h |
;/ |
|
|
\ |
povtor_x1:
mov ah,09 ;выбор формулы mov osh_v,0
lea dx,soob_v int 21h
mov ah,0ah lea dx,vvod_b int 21h
call ASCII_bin_b ;Преобразование из кода ASCii в двоичный код mov x1,al
mov prom,0 call cursor
cmp osh_v,0 je ii1
89
jmp povtor_x1 |
|
mov field_b,0 |
;очистить поле |
mov field_b+1,0 |
|
mov field_b+2,0 |
|
mov field_b+3,0 |
|
ii1: |
|
cmp x1,1 |
|
jz povtor_b1 |
|
cmp x1,2 |
|
jz povtor_b1 |
|
jmp povtor_x1 |
|
povtor_b1: |
|
;vvod_d: |
|
mov ah,09 |
;Вывод сообщения 'Введите B1= ' |
mov osh_v,0 |
|
lea dx,s_b1 |
|
int 21h |
|
mov ah,0ah |
;Ввод с клавиатуры значения B1 |
lea dx,vvod_b |
|
int 21h |
|
call ASCII_bin_b |
;Преобразование из кода ASCii в двоичный код |
mov b1,al |
|
mov prom,0 |
|
call cursor |
|
cmp osh_v,0 |
|
je ii2 |
|
jmp povtor_b1 |
|
ii2: |
|
povtor_b2: |
|
mov field_b,0 |
;очистить поле |
mov field_b+1,0 |
|
mov field_b+2,0 |
|
mov field_b+3,0 |
|
mov ah,09 |
; вывод сообщения 'Введите B2= ' |
mov osh_v,0 |
|
lea dx,s_b2 |
|
int 21h |
|
mov ah,0ah |
; ввод с клавиатуры значения B2 |
lea dx,vvod_b |
|
int 21h |
|
call ASCII_bin_b |
; преобразование из кода ASCii в двоичный код |
mov b2,al |
|
mov prom,0 |
|
call cursor |
|
cmp osh_v,0 |
|
|
90 |