@defild

Я не понимаю в чем ошибка в коде, как исправить?

Пишу я программу которая считает уравнение за этой формулой (-2 * c - d + 53 - e) / (a / 4 - 1 + f) но когда проверяю на си у меня ответ совсем другой. Вот мой код
#include <iostream>
#include <stdio.h>
#include <cstdlib>
int main()
{
	signed char a, c, d,f,e, res_c, res_asm;
	printf("(-2*c-d+53-e)/(a/4-1+f)\n");
	printf("Enter the values of the range [-128...127]\n");
	printf("a = "); scanf_s("%d", &a);
	printf("c = "); scanf_s("%d", &c);
	printf("d = "); scanf_s("%d", &d);
	printf("f = "); scanf_s("%d", &f);
	printf("e = "); scanf_s("%d", &e);
	res_c = (-2 * c - d + 53 - e) / (a / 4 - 1 + f);
	printf("Result C = %d\n", res_c);
	
		__asm {
			mov al, c;
			mov cl, 2;
			imul cl;
			mov cl, 1;
			idiv cl;
			mov bl, al;
			mov al, d;
			sub al, 53;
			add al, e;
			add bl, al;
			mov al, a;
			cbw;
			mov cl, 4;
			idiv cl;
			mov dl, al;
			add al, 1;
			sub al, f;
			xchg al, bl;
			cbw;
			idiv bl;
			mov res_asm, al;

	}
	printf("Result ASM = %d\n", res_asm);
	system("Pause");
	return 0;
}

61b11f9710657332234106.png
  • Вопрос задан
  • 114 просмотров
Пригласить эксперта
Ответы на вопрос 1
@galaxy
ну давайте разберем начало хотя бы:
mov al, c;
mov cl, 2;
imul cl;
mov cl, 1;
idiv cl;
// делим 2*c на 1? зачем?
mov bl, al;
mov al, d;
sub al, 53;
add al, e;
// d-53+e? почему сложение и вычитание везде перепутано?
add bl, al;
// bl = 2*c+d-53+e
mov al, a;
cbw;
mov cl, 4;
idiv cl;
mov dl, al;
add al, 1;
sub al, f;
// al = a/4+1-f ??
xchg al, bl;
cbw;
idiv bl;
// al = (2*c+d-53+e) / (a/4+1-f)
mov res_asm, al;


со знаками точно напутано.

Далее, scanf_s("%d", &a); - так нельзя. Запишется 4 байта в однобайтовую переменную. MS VS как я понял не умеет считывать число в переменную типа char нормально, так что придется как-то так повозиться:
int ai, ci, di, fi, ei;
...
	printf("a = "); scanf_s("%d", &ai);
	printf("c = "); scanf_s("%d", &ci);
	printf("d = "); scanf_s("%d", &di);
	printf("f = "); scanf_s("%d", &fi);
	printf("e = "); scanf_s("%d", &ei);
	a = ai;
	c = ci;
	d = di;
	f = fi;
	e = ei;
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы