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