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

ED1248

.pdf
Скачиваний:
17
Добавлен:
02.05.2015
Размер:
678.27 Кб
Скачать

mov al,b1 mov ah,0 cbw

mov bx,ax

mov ax,word ptr d1 mov dx,word ptr d1+2 idiv bx

mov rez_2,ax

xor ax,ax xor bx,bx xor dx,dx mov al,b2 cbw

mov bx,ax xor ax,ax mov al,b3 cbw

add ax,bx add ax,w3 mov rez_3,ax

xor ax,ax xor bx,bx xor dx,dx

mov ax,word ptr rez_1 mov dx,word ptr rez_1+2 mov bx,rez_2

add ax,bx adc dx,cx

mov bx,rez_3 sub ax,bx sbb dx,cx

mov word ptr rezult,ax mov word ptr rezult[2],dx mov ten,0

call bin_ascii xor ax,ax mov ah,09h lea dx,ascval int 21h

call cursor

;al:=b1

;ah:=0

;ax:=b1

;bx:=b1

;поместить первую d1 часть в ax ;поместить вторую d1 часть в dx ;d1/b1, целая часть в ax, остаток в dx

;rez_2:=d1/b1

;al:=b2

;ax:=b2

;bx:=b2

;ax:=0

;al:=b3

;ax:=b3

;ax:=b1+b3

;ax:=w3+b1+b3 ;rez_3:=w3+b1+b3

;ax:=rez_1 ;dx:=rez_1+2 ;bx:=rez_2

;ax:=ax+bx, с переносом ;dx:=dx+cx

;bx:=rez_3 ;ax:=ax-bx, с заемом ;dx:=dx-cx

111

mov ah,09h

;функция вывода на экран

lea dx,soobe_1

;загрузить адрес начала сообщения в dx

int 21h

 

;передача управления в DOS

call cursor

;вызов процедуры перевода курсора

mov ah,09h

;функция вывода на экран

lea dx,soobe_2

;загрузить адрес начала сообщения в dx

int 21h

 

;передача управления в DOS

call cursor

;вызов процедуры перевода курсора

vvod_e:

mov ah,0ah

 

lea dx,namepar int 21h

xor ax,ax

lea si,namefld mov al,[si] and al,00fh mov binval,ax call cursor

cmp binval,1 je jump cmp binval,2 je dos

mov ah,09h

lea dx,soob0_err int 21h

call cursor jmp vvod_e

jump: jmp beg

dos: RET ;возврат в DOS

begin endp ;********************************************************************* ; PROCEDURE ;*********************************************************************

cursor proc

;\

 

|начало процедуры

mov ah,02

; \

|установка курсора

mov bh,00

;

\

|номер экрана

mov dh,num_ln

; процедура |номер строки

inc num_ln

;

перевода

|увеличение номера строки на 1

mov dl,00

;

курсора

|номер столбца

int 10h

;

/

|передача управления в BIOS

 

 

 

112

ret

; /

|возврат в основную программу

cursor endp

;/

|конец прцедуры

;*************************************************************************** symbol_w proc ;процедура проверки на введение символьной переменной для слова

mov err,1

 

xor ax,ax

 

xor cx,cx

 

mov al,faktlen_w

 

mov cl,al

 

dec al

 

 

mov si,ax

 

turn_w:

mov al,namefld_w[si]

cbw

 

 

cmp ax,30h

 

jb error_w

;если ASCII < 30h, то переход на метку error_w

cmp ax,39h

 

ja error_w

;если ASCII > 39h, то переход на метку error_w

dec si

 

 

loop turn_w

 

jmp gw

;переход на метку gw

error_w: call cursor

 

mov ah,09h

;вывод сообщения об ошибке

lea dx,soob_error

 

int 21h

 

 

call cursor

 

mov err,0

;err=0

gw: ret

 

 

symbol_w endp

 

;***************************************************************************

symbol_d proc

;процедура проверки на введение символьной переменной

;

для двойного слова

mov err,1

 

xor ax,ax

 

xor cx,cx

 

mov al,faktlen_d

 

mov cx,ax

 

dec al

 

mov si,ax

 

turn_d:mov al,namefld_d[si]

 

cbw

 

cmp ax,30h

 

jb error_d

;если ASCII < 30h, то переход на метку error_d

cmp ax,39h

 

ja error_d

;если ASCII > 39h, то переход на метку error_d

dec si

 

loop turn_d

 

jmp gd

;переход на метку gd

error_d: call cursor

 

 

113

 

mov ah,09h

;вывод сообщения об ошибке

 

lea dx,soob_error

 

 

int 21h

 

 

call cursor

 

 

mov err,0

;err=0

gd:

ret

 

symbol_d endp ;***************************************************************************

symbol_b proc

;процедура проверки на введение символьной переменной для байта

mov err,1

 

xor ax,ax

 

xor cx,cx

 

mov al,faktlen_b

mov cx,ax

 

dec al

 

 

mov si,ax

 

turn_b:mov al,namefld_b[si]

 

 

cbw

 

 

cmp ax,30h

 

 

jb error_b

;если ASCII < 30h, то переход на метку error_b

 

cmp ax,39h

 

 

ja error_b

;если ASCII > 39h, то переход на метку error_b

 

dec si

 

 

loop turn_b

 

 

jmp gb

;переход на метку gb

error_b: call cursor

 

 

mov ah,09h

;вывод сообщения об ошибке

 

lea dx,soob_error

 

 

int 21h

 

 

call cursor

 

 

mov err,0

;err=0

gb:

ret

 

symbol_b endp

 

;***************************************************************************

ASCII_binb PROC

; процедура перевода из ASCII в bin для байта

mov

mult10,1

 

 

mov BINVAL_B,0

 

 

XOR

AX,AX

 

 

XOR

DX,DX

 

 

MOV

CX,10

 

; фактор умножения

LEA

SI,NAMEFLD_b-1

; адрес ASCVAL

MOV

BL,FAKTLEN_b

; длина ASCVAL

MOV

BH,0

 

 

A21:

 

 

 

MOV

AL,[SI+BX]

 

; выбрать ASCII-символ

AND

AX,000FH

 

; очистить зону тройки

MUL

MULT10

 

; умножить на фактор 10

ADD

BINVAL_b,AX

 

; прибавить к двоичному

 

 

 

114

MOV

AX,MULT10

; вычислить следующий

MUL

CX

; фактор умножения

MOV

MULT10,AX

 

DEC

BX

; последний. ASCII-символ?

JNZ

A21

; нет – продолжить

ret

 

 

ASCII_binb ENDP ;***************************************************************************

ASCII_binw PROC

; процедура перевода из ASCII в bin для слова

mov

mult10,1

 

MOV

BINVAL_W,0

 

XOR

AX,AX

 

XOR

DX,DX

 

MOV

CX,10

; фактор умножения

LEA

SI,NAMEFLD_w-1

; адрес ASCVAL

MOV

BL,FAKTLEN_w

; длина ASCVAL

MOV

BH,0

 

B20:

 

 

MOV

AL,[SI+BX]

; выбрать ASCII-символ

AND

AX,000FH

; очистить зону тройки

MUL

MULT10

; умножить на фактор 10

ADD

BINVAL_w,AX

; прибавить к двоичному

MOV

AX,MULT10

; вычислить следующий

MUL

CX

; фактор умножения

MOV

MULT10,AX

 

DEC

BX

; последний. ASCII-символ?

JNZ

B20

; если нет – продолжить

ret

 

 

ASCII_binw ENDP ;***************************************************************************

ascii_bind proc

;процедура перевода из ASCII в bin для двойного слова

mov mult10,1

 

mov word ptr BINVAL_d,0

mov word ptr BINVAL_d[2],0

xor ax,ax

 

xor

dx,dx

 

mov

CX,10

 

lea si,namefld_d-1

 

mov

bl,faktlen_d

 

mov

bh,0

 

abd20:

 

 

mov

al,[si+bx]

 

and

ax,000fh

 

mul

mult10

 

add word ptr binval_d,ax

adc word ptr binval_d+2,dx

mov

ax,mult10

 

mul

cx

 

 

 

115

mov mult10,ax dec bx

jnz abd20 ret

ascii_bind endp ;*********************************************************************

clrascval proc

;процедура очистки ASCVAL

mov cx,32

 

mov si,31

 

clr1: and ascval[si],30h

 

dec si

 

loop clr1

 

ret clrascval endp

;********************************************************************* bin_ascii proc

call clrascval lea si,ascval[31] xor cx,cx

xor bx,bx mov ten,0

mov ax,word ptr rezult mov dx,word ptr rezult+2

met1: cmp dx,0 jne met5 cmp ax,10 jbe met2

met5: sub ax,10 sbb dx,0 add bx,1 adc cx,0 jmp met1

met2: add al,ten mov ten,0 cmp al,10 je met2_1 jmp met2_2

met2_1: mov al,0 inc ten

met2_2: or al,30h mov [si],al

dec si cmp cx,0 je met3 jmp met4

116

met3: cmp bx,0 jne met4 ret

met4: mov ax,bx mov dx,cx xor bx,bx xor cx,cx jmp met1

bin_ascii endp ;***************************************************** clrscr proc

mov ax,0600h

;\

|al=00 (весь экран), ah=06 (прокрутка)

mov bh,07

; \

|чёрно-белый

mov cx,0000

; очистка экрана

|левая верхняя позиция

mov dx,314fh

; /

|правая нижняя позиция

int 10h

;/

|передача управления в BIOS

mov num_ln,0 clrscr endp

;*************************************************************************** bin_bin proc

call clrascval lea si,ascval[31] xor cx,cx

xor bx,bx

mov ax,word ptr rezult mov dx,word ptr rezult+2

metb1: cmp dx,0 jne metb5 cmp ax,2 jb metb2

metb5: sub ax,2 sbb dx,0 add bx,1 adc cx,0 jmp metb1

metb2: or al,30h mov [si],al dec si cmp cx,0 je metb3 jmp metb4

metb3: cmp bx,0 jne metb4 ret

117

metb4: mov ax,bx mov dx,cx xor bx,bx xor cx,cx jmp metb1

bin_bin endp ;*******************************************************

CODESG ENDS

;конец сегмента данных

END begin

;конец основной процедуры

==================================================================

=

;l_2_2kln.asm КАЛИНИН МИХАИЛ, БИ11, 2004г. (лабораторная работа №2, модуль 2)

extrn soobe_1:byte,soobe_2:byte,soob0_err:byte,soob_b1:byte,soob_b2:byte,soob_d1:byte,soo b_d2:byte,b1:byte,b2:byte,d1:dword,d2:dword

extrn binval_d:dword,binval:word,binval_b:word,binval_w:word extrn mult10:word,rezult:dword,ten:byte,ascval:byte,num_ln:byte extrn

soob0_3:byte,soobl_err:byte,soobl:byte,soobl_1:byte,soobl_2:byte,soobl_3:byte,soobl_4: byte,soobl_5:byte,soobl_n1:byte,soobl_n2:byte,soobl_n3:byte,soobl_n4:byte,soobl_n5:by te

extrn namepar_b:byte,maxlen_b:byte,faktlen_b:byte,namefld_b:byte,namepar_w:byte,maxle n_w:byte,faktlen_w:byte,namefld_w:byte,namepar_d:byte,maxlen_d:byte,faktlen_d:byt e,namefld_d:byte,namepar:byte,maxlen:byte,faktlen:byte,namefld:byte

public main

CODESEG SEGMENT PARA 'CODE'

;начало сегмента кода

assume cs:codeseg

 

 

MAIN PROC FAR

 

;начало основной процедуры

bg:

call clrscr

 

 

 

call cursor

;вызов процедуры перевода курсора

 

mov ah,09h

;функция вывода на экран

 

lea dx,soobl

;загрузить адрес начала сообщения в dx

 

int 21h

;передача управления в DOS

 

call cursor

;вызов процедуры перевода курсора

 

mov ah,09h

;функция вывода на экран

 

lea dx,soobl_n1

;загрузить адрес начала сообщения в dx

 

int 21h

;передача управления в DOS

 

call cursor

;вызов процедуры перевода курсора

 

mov ah,09h

;функция вывода на экран

 

 

 

118

lea dx,soobl_n2

;загрузить адрес начала сообщения в dx

int 21h

 

;передача управления в DOS

call cursor

;вызов процедуры перевода курсора

mov ah,09h

;функция вывода на экран

lea dx,soobl_n3

;загрузить адрес начала сообщения в dx

int 21h

 

;передача управления в DOS

call cursor

;вызов процедуры перевода курсора

mov ah,09h

;функция вывода на экран

lea dx,soobl_n4

;загрузить адрес начала сообщения в dx

int 21h

 

;передача управления в DOS

call cursor

;вызов процедуры перевода курсора

mov ah,09h

;функция вывода на экран

lea dx,soobl_n5

;загрузить адрес начала сообщения в dx

int 21h

 

;передача управления в DOS

call cursor

;вызов процедуры перевода курсора

vvod_l:

mov ah,0ah

 

lea dx,namepar int 21h

xor ax,ax

lea si,namefld mov al,[si] and al,00fh mov binval,ax

cmp binval,1 je f1

cmp binval,2 je jmp_f2 cmp binval,3 je jmp_f3 cmp binval,4 je jmp_f4 cmp binval,5 je jmp_f5 mov ah,09h

lea dx,soobl_err int 21h

call cursor jmp vvod_l

119

jmp_f2:

jmp f2

jmp_f3:

jmp f3

jmp_f4:

jmp f4

jmp_f5:

jmp f5

;================================================================ f1: ;b1 or b2

call clrscr call cursor

mov ah,09h lea dx,soobl_1 int 21h

call cursor

;b1

mov ah,09h lea dx,soob_b1 int 21h

mov ah,0ah

lea dx,namepar_b int 21h

call cursor

call ascii_binb

mov ax,binval_b mov b1,al

;b2

mov ah,09h lea dx,soob_b2 int 21h

mov ah,0ah

lea dx,namepar_b int 21h

call cursor

call ascii_binb

120

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