@Alertoso

Почему при определённом значении введённого числа показывается не тот результат?

И снова ассемблер, при чётном числе 8 выдаёт результат 767, но почему, не понимаю...вот та часть кода(в al введённое значение)
push    ax

        call    Calculation

Calculation:
        test  al, 1
        jnz   Odd    ;нечетное, переход на метку Odd
        jz    Even   ;четное, переход на метку Even

Odd:
        push    bp
        mov     bp,sp
        mov     al,[bp+4]
        mul     al
        pop     bp
        jmp     Show_AX
Even:
        push    bp
        mov     bp,sp
        mov     al,[bp+4]
        mov      bl, al
        mul     al
        mul     bl
        sub     al, 1
        pop     bp
  • Вопрос задан
  • 36 просмотров
Пригласить эксперта
Ответы на вопрос 1
15432
@15432
Системный программист ^_^
Да нет, всё верно, у вас 767 и должен получаться, судя по вашему коду.
8 * 8 * 8 = 512
512 + byte(0 - 1) = 512 + 255 = 767

давайте я вам переведу ваш код в Си для наглядности

int Calculation(short value) {
    if (value % 2 == 1) {
        char value_l = (char)value; // use only lower 8 bit
        return value_l * value_l;
    } else {
        char value_l = (char)value; // use only lower 8 bit
        short first_mul = value_l * value_l;
        char mul_l = (char)first_mul; // use only lower 8 bit of result
        short second_mul = mul_l * value_l;
        second_mul = (second_mul & 0xFF00) + (char)second_mul - 1; // subtract 1 only from lower 8 bits
        return second_mul;
    }
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы