посчитать

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

Ответить
john_1
Сообщения: 19
Зарегистрирован: 16 ноя 2006, 07:18

необходимо найти сумму 1/2+1/2^2+...+1/2^n
я использовал алгоритм:
1)1/n ----->si
2)di=si
3) цикл
si/n
di=di+si

Код: Выделить всё

model tiny
masm
.386
.data
s       db 42 dup(?)                      ;определение временного  массива
a       db 42 dup(?)                      ;результат
long    dd     1                             ; делимое

.code
assume cs:@code,ds:@code,es:@code,ss:@code
org 100h


begin:

     mov cx,42
     mov si,offset s                      ; результат 
     mov di,offset a                      ; временный массив 
                                                   ;  dx=0001h, старшая часть
     mov dx,  word ptr long          ; делимого 
                                                   ; ax=0000h , младшая часть                         
     mov bx,2                           ; делимого 
    push ds
    pop es

divide:                                          ; заполнение начального значения суммы
  div bx                                         ;s=s/n
  mov [si],ax                                 ;s---->()()()()
  inc si
  inc si
  mov ax,[si]
loop divide

;==============================================================

;---------------
;--------------

  mov si,offset s        
  mov di,offset a                           
  push di
  cld
  mov cx,21              
  rep  movsw
  pop si 
mov cx,1

 tell:
  push cx 
 mov edx,0                           ;!!!!!!!!!!!!!!!!!!!!!! добавить ноль в начале!!!!!!!!!!!!!
   mov cx,42

double:
   push cx
   mov ax, [si]                   ; s1:=s1\n               
  div bx                     
  mov [si],ax
  inc si      
  inc si  
  pop cx
loop double
 
stc
  dec si
  dec si
  mov  di,offset a
  ;mov si,offset s
 add di,cx
 add di,cx
  ;dec di                 
  ;dec di

  mov cx,42
@label:
  push cx
 pushf
  mov ax,[si]
  adc [di],ax
 popf
  inc si
  inc si
  inc di
  inc di
  pop cx 
loop @label
  pop cx
loop tell
                

end begin
вот мой исходник,но он с ошибками
Ответить