Среднее арифметическое с 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д