Материал: 775

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

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

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