logo search
Полный текст учебника

Программа вычисления квадратного корня

TITLE SQR.ASM ; Извлечение корня квадратного

stacksg segment para stack 'Stack'

; назначить область памяти для стека

dw 32 dup(32)

stacksg ends

datasg segment para 'Data'

; определить данные

vv db 'введите аргумент n (до 64 тыс.) $'

viv db 10,13,'значение корня = $'

sr db 3 dup(0)

db 13,10,'$'

buf db 5,0,0,0,0,0,0,0

n dw ?

e dw 1

a dw ?

b dw ?

val dw ?

two dw 2

datasg ends

codesg segment para 'Code'

; программный сегмент

assume cs:codesg,ds:datasg,ss:stacksg

begin proc far

push ds

sub ax,ax

push ax

mov ax,datasg

mov ds,ax

mov ah, 9

mov dx,offset vv

int 21h

mov ah, 0ah

mov dx,offset buf

int 21h

call str2bin

mov dx,0

mov ax,n

inc ax

div two

sub dx,dx

mov a,ax

iter: mov ax,n

div a

add ax,a

mov dx,0

div two

sub dx,dx

mov b,ax

sub ax,a

cmp ax,e

jbe met

mov ax,b

mov a,ax

jmp iter

met: mov ah,9

mov dx,offset viv

int 21h

call bin2str

mov ah,9

mov dx,si

int 21h

ret

bin2str proc near

mov cx,10

mov si,offset sr+2

mov ax,b

m1: sub dx,dx

div cx

or dl,30h

mov [si],dl

dec si

cmp ax,0

jne m1

ret

bin2str endp

str2bin proc near

mov di,1

mov cx,0ah

mov si,offset buf+1

sub bh,bh

mov bl,[buf+1]

m2: mov al,[si+bx]

and ax,0fh

mul di

add n,ax

mov ax,di

mul cx

mov di,ax

dec bx

jnz m2

ret

str2bin endp

begin endp

codesg ends

end begin