Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
3 / 3 / 0
Регистрация: 21.01.2013
Сообщений: 25
1

Ассемблерная вставка в С++

27.12.2013, 13:43. Показов 1240. Ответов 9
Метки нет (Все метки)

Когда в b у нас число больше 127 программа работает неправильно помогите исправить .. очень нужно
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<stdio.h>
void main()
{
    char a=6;
    char b=137;
 short int e;
    _asm
    {
        mov al, a;
        mul b;
        mov bx, ax;
        mov al, b;
        cbw;
        cwd;
        add bx, ax;
        mov e, bx;
    }
    printf("%d",e);
    getchar();
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.12.2013, 13:43
Ответы с готовыми решениями:

Ассемблерная вставка
Доброго времени суток, пытаюсь пытаюсь узнать поддерживает ли мой процессор тепловые сенсоры код не...

Ассемблерная Вставка
Добрый день. начал изучать ассемблер(начал со вставок, на этом основание пишу здесь). Должен был...

Ассемблерная вставка
#include &lt;iostream&gt; #include &lt;cstdlib&gt; using namespace std; int main() { int x, y; cout &lt;&lt;...

Ассемблерная вставка в c++
Как данный код написать между вставками __asm {} в c++??? Поскольку dw, db и тд не поддерживаются в...

9
653 / 574 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
27.12.2013, 14:00 2
Цитата Сообщение от Fason Посмотреть сообщение
char b=137;
char это от -128 до 127, когда вы вводите 137 в двоичном представлении 1000 1001 то для char воспринимается как -119 кажется

Добавлено через 1 минуту
воспользуйтесь unsigned char там значения от 0 до 255, если этого мало unsigned short int - 0 до 65535
0
3 / 3 / 0
Регистрация: 21.01.2013
Сообщений: 25
27.12.2013, 14:11  [ТС] 3
Цитата Сообщение от aLarman Посмотреть сообщение
char это от -128 до 127, когда вы вводите 137 в двоичном представлении 1000 1001 то для char воспринимается как -119 кажется

Добавлено через 1 минуту
воспользуйтесь unsigned char там значения от 0 до 255, если этого мало unsigned short int - 0 до 65535
преподаватель говорит не в этом ошибка..
0
653 / 574 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
27.12.2013, 14:13 4
Хорошогш, объясните что должна делать программа, и попробуем разобраться

Добавлено через 45 секунд
Цитата Сообщение от Fason Посмотреть сообщение
преподаватель говорит не в этом ошибка..
а программа стала работать правильно? или Вы сразу на слово поверили преподавателю
0
3 / 3 / 0
Регистрация: 21.01.2013
Сообщений: 25
27.12.2013, 14:18  [ТС] 5
Нужно написать 2 выражения. E=(a*b)+b (D = (C-A)/B)
вот все данные
char a = 4;
char b = 2;
short int c = 6;
short int e;
int d;

но мне нужно только 1е выражение.
0
653 / 574 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
27.12.2013, 14:24 6
C++
1
mov al, a;
al 1 байт, туда не поместится число 137
0
3 / 3 / 0
Регистрация: 21.01.2013
Сообщений: 25
27.12.2013, 14:27  [ТС] 7
Цитата Сообщение от aLarman Посмотреть сообщение
C++
1
mov al, a;
al 1 байт, туда не поместится число 137
я это понимаю.. он мне гооврит что у меня сама программа неправильно считает..
0
653 / 574 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
27.12.2013, 14:31 8
ну для числа 127 правильно
0
3 / 3 / 0
Регистрация: 21.01.2013
Сообщений: 25
27.12.2013, 14:32  [ТС] 9
Цитата Сообщение от aLarman Посмотреть сообщение
ну для числа 127 правильно
это да .. я понять вообще не могу в чем ошибка ...=(
0
653 / 574 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
27.12.2013, 15:38 10
я же объяснил, что если написать
C++
1
сhar b = 137;
и вывести
C++
1
cout<<(int)b<<endl;
то будет -119

Добавлено через 21 минуту
Цитата Сообщение от Fason Посмотреть сообщение
C++
1
2
3
mov al, b; 
cbw; 
cwd;
смотрите в al записалось 10001001 (это -119 если тип переменно знаковое)
после операций cbw; cwd; стало в регистре ax 1111 1111 1000 1001
и в eax 1111 1111 1111 1111 1111 1111 1000 1001
а это так же -119

"СBW – преобразовать байт в регистре AL в слово в регистре АХ путем распространения старшего бита AL на все биты регистра AH;"

6*137 = 822 и -119 будет 703, у меня как раз такой вывод, ответ неправильно работаете в преобразовании из al в ax

Добавлено через 36 минут
char это знаковый тип для умножения используйте
C++
1
imul b;
проверял правильно
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.12.2013, 15:38

Ассемблерная вставка на С++
Написал сегодня код. int x, y; //Исходные числа float res = 0; //Результат расчетов cin &gt;&gt; x...

Ассемблерная вставка c++
Добрый вечер! Как в c++ сделать ассемблерную вставку вида: if (b &gt;= 0) { Некий код } else ...

Ассемблерная вставка
Всем доброй ночи!!! Я хочу попросить помощи в решении вот такой функции: Найти целое значение...

Ассемблерная вставка на С++
Добрый день, уважаемые. Столкнулся с большой проблемой когда понадобилось для увеличения скорости...


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

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

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