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