Вычислить выражение (ассемблерная вставка) - Assembler

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

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

Не могу понять как исправить ошибки. Программа работает неправильно при больших вычислениях.
//A (byte), B (integer), C (integer)
//Вычислить: D = A^3+B; E = C^2*(B-C)/B
 
#include "stdafx.h"
#include 
#include 
 
int main()
{
    int d, e;
    short int b = 1, c = 50;
    unsigned char a = 100;

    //printf("%d, %d", a, b);
 
    __asm {
        mov al, a;
        mul a;        //ax=a^2
        xor bx, bx;
        mov bl, a;
        mul bx; 
        mov word ptr d[0], ax;
        mov word ptr d[2], dx;
        mov ebx, d;
        xor eax, eax;
        mov ax, b;
        cwde;
        add   ebx, eax;
        mov d, ebx;
        
        mov  ax, c;
        mul ax; // ax=c^2
        mov word ptr e[0], ax;
        mov word ptr e[2], dx;
        xor eax, eax;
        mov ax, b;
        sub ax, c; //b-c
 
        mov ebx, e;
        mul ebx;
        mov bx, b;
        movsx ebx, bx;

        div ebx;
        mov e,eax;
 
    }
 
    printf("\n%d, %d", d,e);
 
    getchar();
    return 0;
}

Решение задачи: «Вычислить выражение (ассемблерная вставка)»

textual
Листинг программы
    __asm {
        mov al, a;
        imul al;        //ax=a^2
        mov bx, ax
        mov al, a
        cbw
        imul bx; 
        mov word ptr d[0], ax;
        mov word ptr d[2], dx;
        mov ebx, d;
        mov ax, b;
        cwde;
        add   ebx, eax;
        mov d, ebx;
        
        mov  ax, c;
        imul ax; // dx:ax=c^2
        mov word ptr e[0], ax;
        mov word ptr e[2], dx;
        mov ax, b;
        sub ax, c; //b-c
        cwde
 
        mov ebx, e;
        imul ebx;
        mov bx, b;
        movsx ebx, bx;
 
        idiv ebx;
        mov e,eax;
 
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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