Среднее арифметическое с 6 чисел - Assembler

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

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

Добрый вечер уважаемые знатоки Столкнулся я с проблемой в одной учебной задаче и решить мне ее почему-то не удается, прога должна считать и выводить среднее с десятыми 6 чисел. Это она и делает, но работает к сожалению не правильно. К примеру среднее чисел (1+2+3+4+5+6)/6 = 3.3 Вопрос: что я делаю не так? /* Не обращайте внимания на польский язык, учусь на данный момент в Польше и должен писать на польском */
  int main(){
 
         __int16 zme1 = 0;
         __int16 zme2 = 0;
         __int16 zme3 = 0;
         __int16 zme4 = 0;
         __int16 zme5 = 0;
         __int16 zme6 = 0;
         __int32 zme7 = 0;
 
    cout << "Podaj liczby 1 : " << endl;
    cin >> zme1;
    cout << "Podaj liczbu 2 : " << endl;
    cin >> zme2;
    cout << "Podaj liczby 3 : " << endl;
    cin >> zme3;
    cout << "Podaj liczbu 4 : " << endl;
    cin >> zme4;
    cout << "Podaj liczby 5 : " << endl;
    cin >> zme5;
    cout << "Podaj liczbu 6 : " << endl;
    cin >> zme6;
    
    _asm {
        mov ax, zme1;
        push ax;
        mov ax, zme2;
        push ax;
        mov ax, zme3;
        push ax;
        mov ax, zme4;
        push ax;
        mov ax, zme5;
        push ax;
        mov ax, zme6;
        push ax;
        call proc;
 
        add ESP, 12;
        jmp finish;
 
    proc:
        mov BX, 0;
        mov ECX, 6;
        add ESP, 4;
    cykl:
        pop AX;
        add BX, AX;
        loop cykl;
        xor EDX, EDX;
        mov CX, 6;
        mov AX, BX;
        div CX;
        sub ESP, 16;
        ret;
    finish:
        mov zme1, AX;
        mov zme7, edx;
        
    }
 
    cout << "Wynik to : " << zme1 << '.' << zme7 << endl;
 
        system("pause");
}

Решение задачи: «Среднее арифметическое с 6 чисел»

textual
Листинг программы
model tiny
.code
org 100h
szMass  equ 8
start:  lea di,mass
 
    xor ax,ax
    mov cx,szMass
@@01:   add al,[di]
    adc ah,0
    inc di
    loop    @@01
;
    mov ax,321
    xor si,si
    mov bx,10
@@02:   mov cx,szMass
    xor dx,dx
    div cx
    push    dx
    call    outNum
    pop ax
    or  ax,ax
    jz  @@03
    or  si,si
    jnz @@1
    push    ax
    mov al,'.'
    int 29h
    mov si,1
    pop ax
@@1:    xor dx,dx
    mul bx
    jmp @@02
@@03:   ret
OutNum: xor cx,cx
@@04:   xor dx,dx
    div bx
    push    dx
    inc cx
    or  ax,ax
    jnz @@04
@@05:   pop ax
    add ax,'0'
    int 29h
    loop    @@05
    ret
;
Mass    label   byte
i_mass  =   1
    rept    szMass
    db  i_mass
i_mass  =   i_mass + 1
    endm

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

12   голосов , оценка 3.75 из 5
Похожие ответы