Вычисление дробей с высокой точностью - Assembler

Узнай цену своей работы

Формулировка задачи:

не могу понять что не так...показывает синт. ошибку pascal строка 42!!! посмотри пожалуйста может кто найдет ответ что же не так тут:
.model tiny
.386
.code
assume cs:@code, ds:@code, es:@code, ss:@code
org 100h
START:
mov cl, 42
mov si, offset s
mov ah, 1 
xor al, al
mov bl, 207 
push ds
pop es
divide:
div bl 
mov [si], al
inc si
xor al, al
loop divide
dec si 
std 
mov bl, 100 
mov cl, 50 
m1:
push si
push cx 
mov cx, 42 
mov di, si 
clc
xor bh, bh
to10:
mov al, es:[di]
pushf 
mul bl
popf
adc al, bh 
stosb
mov bh, ah
loop to10
adc ah, 0 
movzx edx, ah 
call print10_pl pascal ,edx, offset pr_numb, 
word ptr 1, \
word ptr 1, word ptr 1, word ptr 8
pop cx
pop si
dec cx
jcxz m2
jmp short m1
m2:
mov ah,0
int 16h
mov ah, 4ch 
int 21h
;__________________________________________________________________
s db 42 dup(?)
pr_numb db 10 dup(?)
;__________________________________________________________________
print10_pl proc near 
beg word(0)
zero word(0)
f_handle word(0)
pp0 word(0)
num_off word(0)
numb dword(0)
args_size dword(0)
push eax
push bp
mov bp, sp
push eax
push ebx
push cx
push edx
push si
mov cx, 10 
mov si, num_off
push cx
@p:
mov byte ptr [si], '0'
inc si
loop @p
pop cx
mov eax, numb 
mov si, num_off 
add si, 9
mov ebx, 10 
@@pr:
mov edx, 0
div ebx
add dl, '0' 
mov byte ptr [si], dl
or eax, eax 
jz short @@pr2
dec si
loop @@pr
@@pr2: 
cmp pp0, 0
je @@e6
mov ah, 40h
mov cx, 10
mov dx, offset num_off
mov bx, 1 
cmp pp0,2
je @@e1
jmp short @@e2
@@e1:
mov bx, f_handle
@@e2:
cmp zero,0
jne short @@e3
add cx, dx 
sub cx, si
mov dx, si
jmp short @@e4
@@e3:
sub cx, beg
add dx, beg
@@e4:
int 21h
@@e6:
pop si
pop edx
pop cx
pop ebx
pop eax
mov sp, bp 
pop bp
 
ret 
 
print10_pl endp
end START

Решение задачи: «Вычисление дробей с высокой точностью»

textual
Листинг программы
; masm dos com #
.model tiny
.286
.code
.386
org 100h
START:  mov cl, 42
    mov si, offset s
    mov ah, 1 
    xor al, al
    mov bl, 207 
    push ds
    pop es
divide: div bl 
    mov [si], al
    inc si
    xor al, al
    loop divide
    dec si 
    std 
    mov bl, 100 
    mov cl, 50 
m1: push si
    push cx 
    mov cx, 42 
    mov di, si 
    clc
    xor bh, bh
to10:   mov al, es:[di]
    pushf 
    mul bl
    popf
    adc al, bh 
    stosb
    mov bh, ah
    loop to10
    adc ah, 0 
    movzx edx, ah 
    push 8
    push 1
    push 1
    push 1
    push offset pr_numb
    push edx
    call print10_pl  
    pop cx
    pop si
    dec cx
    jcxz m2
    jmp short m1
m2: mov ah,0
    int 16h
    mov ah, 4ch 
    int 21h
    ;<br> <br>
    s db 42 dup(?)
    pr_numb db 10 dup(?)
    ;<br> <br>
print10_pl proc near pascal beg:word,zero:word,f_handle:word,pp0:word,\
    num_off:word,numb:dword,args_size:dword
    push eax
    push eax
    push ebx
    push cx
    push edx
    push si
    mov cx, 10 
    mov si, num_off
    push cx
@p: mov byte ptr [si], '0'
    inc si
    loop @p
    pop cx
    mov eax, numb 
    mov si, num_off 
    add si, 9
    mov ebx, 10 
@@pr:   mov edx, 0
    div ebx
    add dl, '0' 
    mov byte ptr [si], dl
    or eax, eax 
    jz short @@pr2
    dec si
    loop @@pr
@@pr2:  cmp pp0, 0
    je @@e6
    mov ah, 40h
    mov cx, 10
    lea dx,num_off
    mov bx, 1 
    cmp pp0,2
    je @@e1
    jmp short @@e2
@@e1:   mov bx, f_handle
@@e2:   cmp zero,0
    jne short @@e3
    add cx, dx 
    sub cx, si
    mov dx, si
    jmp short @@e4
@@e3:   sub cx, beg
    add dx, beg
;@@e3:   
    sub cx, beg
    add dx, beg
@@e4:   int 21h
@@e6:   pop si
    pop edx
    pop cx
    pop ebx
    pop eax
    ret 
    print10_pl endp
end START

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.444 из 5