Материал: 775

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

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

 

AND

BX,AX

;

XOR

AH,AH

 

MOV

WORD PTR REZULT,BX

 

MOV

WORD PTR REZULT+2,0000H

 

RET

 

FORM49 ENDP

 

 

 

86

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

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

87

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

datasg ends ;-------------------------------------------------------------------------------

codesg segment para 'Code'

assume cs:codesg,ds:datasg,ss:stacksg mainproc proc far

push ds xor ax,ax

88

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

 

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

 

 

89

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

 

jz ii3

 

jmp povtor_b2

 

ii3:

 

mov field_b,0

;очистить поле

mov field_b+1,0

 

mov field_b+2,0 mov field_b+3,0

povtor_b3:

90

Источник: https://studfile.net/preview/16406832/