计算装配中的平均值

时间:2016-02-14 23:34:22

标签: visual-c++ assembly x86 masm inline-assembly

我有一个程序来接受用户输入(用户想要输入的数量)并计算程序集中的平均值。即使使用xor和mov eax清除寄存器,0;我无法得到正确的数字。感谢您提前提供任何帮助!

样本I / O:

70 
88 
90 
77 
-1

我得到的答案总是非常高的数字

#include <iostream>
using namespace std;
int score = 0, avg = 0, total=0, counter = 0;

void pnt()
{
cout << "Enter your score (-1) to stop: ";
}
void gtsc()
{
cin >> score;
}
void pnt_test()
{
cout << total << endl;
}

int main()
{

cout << "Let's compute your average score:" << endl;

__asm
{

    xor eax, eax
    xor edx, edx
    fn:
    call pnt
        call gtsc
        cmp score, -1
            je stop
            jne add_1
    add_1: 
        add eax, score
        inc counter
        jmp fn
    stop: 
        cdq
        mov total, eax
        idiv counter
        mov avg, eax
        call pnt_test
}

cout << "Your average is " << avg << endl;
system("pause");
return 0;
}

1 个答案:

答案 0 :(得分:3)

您尝试将总数保持在eax,但这会被pntgtsc函数所破坏。您可能希望添加到total,并在分割之前加载它。例如:

fn:
call pnt
    call gtsc
    cmp score, -1
        je stop
        jne add_1
add_1: 
    mov eax, score
    add total, eax
    inc counter
    jmp fn
stop: 
    mov eax, total
    cdq
    idiv counter
    mov avg, eax
    call pnt_test

PS:学会使用调试器。