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

2591

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

lea 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

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