0 / 0 / 0
Регистрация: 19.03.2018
Сообщений: 2
1

Вычисление целочисленного арифметического выражения (Ассемблерная вставка)

20.03.2018, 02:36. Показов 525. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
имеется код, который необходимо подкорректировать, с чем не справляюсь. что бы не менял из значений переменных, ответ в десятичной системе счисления равен -2, верный ответ в десятичной - -105 (-69h). мб налажал с выводом значения, но очевидных ошибок там не заметил. почему значения переменных v2 и v_as2 не равны?
пример: v = (2x + (z + 4) * y)/(3x - 1) - 2
x = -6Bh;
y = 5F3h;
z = 12h;
x - байт, y, z, v - слова.
вставка на ассемблере:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    short int as(short int x, char y, char z)
{
    short int v_as = 0;
    __asm
    {
        //знаменатель
        mov al, 3;
        cbw;
        imul x;
        sub ax, 1;
        mov cx, ax;
        //числитель
        mov al, z;
        add ax, 4;
        imul y;
 
        add ax, x;
        add ax, x;
        cbw;
        cwd;
        idiv cx;
        sub ax, 2;
    }
    return v_as; //возвращаемое значение
}
часть программы на Си с выводом полученных значений:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main()
{
    short int as(short int x, char y, char z);
    setlocale(LC_ALL, "rus");
    setlocale(LC_NUMERIC, "eng");
    short int v_as2, v_c2;
    short int v2 = -0x69; 
        v_as2 = as(-0x6B, 0x5F3, 0x12);
    v_c2 = (-0x6B * 2 + (0x5F3) * (0x12 + 4)) / (-0x6B * 3 - 1) - 2;
    printf("v_c = %X (16 система) или %d (10 система)\n", v_c2, v_c2);
    printf("v_as = %X (16 система) или %d (10 система)\n", v_as2, v_as2);
    printf("Должно получиться v = %X (16 система) или %d (10 система)\n", v2, v2);
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.03.2018, 02:36
Ответы с готовыми решениями:

Вычисление целочисленного арифметического выражения (Ассемблерная вставка в C++)
Добрый вечер, задание - вычислить выражения (тип данных signed byte) (44/a*b+1)/(b-a*9/2) a=100...

Вычисление целочисленного арифметического выражения (Ассемблерная вставка)
Мой проект должен решать уравнение ;(3*c+8-d)/(a-c/4) для беззнаковых чисел на си и...

Вычисление целочисленного арифметического выражения (Ассемблерная вставка)
Где ошибка?((( v=(((z-4)*y+x)/(7*x-6))-1, где y,v-слова x,z-байты short int vas(short int...

Вычисление целочисленного арифметического выражения (Ассемблерная вставка в C++)
помогите пожалуйста написать вставку для вычисления значения следующего выражения c2-2((a·b) Mod...

3
Модератор
Эксперт по электронике
8475 / 4334 / 1642
Регистрация: 01.02.2015
Сообщений: 13,455
Записей в блоге: 8
20.03.2018, 06:55 2
Для начала, приведите в соответствие с заданием типы переменных x, y, x.
0
0 / 0 / 0
Регистрация: 19.03.2018
Сообщений: 2
20.03.2018, 10:10  [ТС] 3
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Для начала, приведите в соответствие с заданием типы переменных x, y, x.
Не совсем понимаю. У меня есть второй набор данных, который, однако, считается верно, при отсутствии изменений в коде. Вот этот набор:
x = 1h, y = -2h, z = -6h, v = 1h;
x - байт, y, z, v - слова.
И значение каждой выводимой переменной в десятичной системе счисления = 1 (а следовательно и в шестнадцатеричной).

Добавлено через 13 минут
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main()
{
    short int as(short int x, char y, char z);
    setlocale(LC_ALL, "rus");
    setlocale(LC_NUMERIC, "eng");
    short int v_as1, v_c1; 
    short int v1 = 0x1;
    printf("Результаты работы программы:\n");
    printf("Первый тестовый набор:\n");
    v_as1 = as(0x1, -0x2, -0x6);
    v_c1 = (0x1 * 2 + (-0x2) * (-0x6 + 4)) / (0x1 * 3 - 1) - 2;
    printf("v_c = %X (16 система) или %d (10 система)\n", v_c1, v_c1); // вывод значения результата работы программы на языке си
    printf("v_as = %X (16 система) или %d (10 система)\n", v_as1, v_as1); // вывод значения результата работы программы на языке ассемблера
    printf("Должно получиться v = %X (16 система) или %d (10 система)\n", v1, v1); 
    return 0;
}
0
Модератор
Эксперт по электронике
8475 / 4334 / 1642
Регистрация: 01.02.2015
Сообщений: 13,455
Записей в блоге: 8
20.03.2018, 12:41 4
Сравните
C
1
    short int as(short int x, char y, char z);
и
Цитата Сообщение от pakdf1 Посмотреть сообщение
x - байт, y, z, v - слова.
После исправления проявятся несоответствия в процедуре при обращении к параметрам - устраните их и всё заработает.
0
20.03.2018, 12:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.03.2018, 12:41
Помогаю со студенческими работами здесь

Вычисление целочисленного арифметического выражения (Ассемблерная вставка)
Приветствую. Форумчане, покажите на ошибку в коде. Ответ не совпадает с реальным. Сама функция...

Вычисление целочисленного арифметического выражения (Ассемблерная вставка)
Пожалуйста. Помогите. Напишите, пожалуйста, ассемблеровскую вставку (вообще не понимаю как она...

Вычисление целочисленного арифметического выражения (Ассемблерная вставка)
Приветствую! Есть небольшая проблемка, во вставке должно считаться значение выражения (A * X^3 + B...

Вычисление арифметического выражения (ассемблерная вставка)
v=-3-\frac{ (x+5)(y-4)-3}{ z+3 } где z-байт, x,y,v-слова Решила сначала начать с числителя, потому...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru