Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
lasn
1 / 1 / 0
Регистрация: 22.11.2012
Сообщений: 50
#1

Непонятки в ассемблерной вставке - C++

26.11.2012, 22:41. Просмотров 307. Ответов 1
Метки нет (Все метки)

В общем, все работает, только х2 не принимает значения с минусом, просто игнорирует минус
+ не работает команда перехода jg, работает только jl.
f=ax2+b
C++
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
26
27
28
29
30
31
32
33
#include "stdafx.h"
#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
    setlocale(0,"rus");
    int a,b,x,f,xq; 
    cout<<"Введите a: "; 
    cin>>a; 
    cout<<"Введите x: "; 
    cin>>x; 
    cout<<"Введите b: "; 
    cin>>b; 
    xq=x*x; // игнорит значения с минусом
    __asm
    {
        cmp xq,0 
        jg next1 // если х>0, переходит только с jl
        cmp b,0 
        je next1 
        mov eax,a 
        cdq
        imul xq
        mov ebx,b
        add eax,ebx
        mov f,eax
    next1:
    }
    cout<<"\nf= "<<f<<endl;
    system("pause");
    return 0;
}
Добавлено через 3 часа 21 минуту
Ну так что, какие мысли у вас есть по этому коду?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2012, 22:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Непонятки в ассемблерной вставке (C++):

Очищение памяти в ассемблерной вставке - C++
/* Выделить из строки подстроку указанной длины, начиная с заданной позиции. */ #include &lt;stdio.h&gt; #include &lt;iostream&gt;...

Сложение длинных чисел в ассемблерной вставке - C++
У меня есть класс: class Big_int { UINT64* num; //массив разрядов числа size_t s, cap; //число элементов, максимальное...

Как правильно вставлять диррективу .386 в ассемблерной вставке - C++
привет)подскажите пожалуйста как правильно вставлять диррективу .386 в ассемблерной вставке?вот я пытался таким образом но не выходит ...

Метки в макросах в ассемблерной вставке - C++
В C++ написан макрос с ассемблерной вставкой, который содержит в себе метку &quot;doit&quot; и команду перехода на неё: #define MYMACRO(x, y, z)...

Массив с ассемблерной вставкой - C++
Задан одномерный массив целых или действительных данных А в одном из заданных форматов (short int - INTEGER, long int - LONGINT, float -...

Декремент с ассемблерной вставкой - C++
Уважаемые, знатоки, подскажите в чём сакральный смысл такого декремента в программе С++: static inline int InterlockedDecrement...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Kastaneda
Форумчанин
Эксперт С++
4653 / 2862 / 228
Регистрация: 12.12.2009
Сообщений: 7,271
Записей в блоге: 2
Завершенные тесты: 1
27.11.2012, 11:01 #2
Цитата Сообщение от lasn Посмотреть сообщение
не принимает значения с минусом, просто игнорирует минус
В ассемблере нет минуса как такового, ты сам волен интерпретировать значение как хочешь - как знаковое или беззнаковое число.
И инструкции условных переходов отличаются для "знаковых" чисел и "беззнаковых".
Смотрим описание инструкций
Intel Manual
JB rel32 Jump near if below (CF=1).
JL rel16 Jump near if less (SF≠ OF).
там же ниже сказано
The terms “less” and “greater” are used for comparisons of signed integers and the terms “above” and “below” are used for unsigned integers.
Вобщем jb используется для сравнения без учета знака, а jl с учетом.

Добавлено через 2 минуты
что-то тупанул, про JB написал. Вот описание JG

JG rel32 Jump near if greater (ZF=0 and SF=OF).
переход, еслы выше (учитывая знак)
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2012, 11:01
Привет! Вот еще темы с ответами:

Ошибка с ассемблерной вставкой - C++
#include &lt;iostream&gt; int main() { char src = &quot;hello&quot;, dst; int a = strlen(src); for (int i = 0; i &lt; a; ++i) _asm...

Не работает программа с ассемблерной вставкой - C++
Добрый день! Пишу вот такую программу: #include&lt;iostream&gt; #include&lt;conio.h&gt; int main() { __asm { cli //Это я...

Ошибка компиляции ассемблерной вставки - C++
Добрый вечер. Захотелось мне сделать ассемблерную вставку в C++ код. Сделал. Но компилятору MinGW чето не нравится. Выдает следующие ошибки...

Выполнить с использованием ассемблерной вставки - C++
Нужно подсчитать кол-во цифр в троке из 10 символов. Реализовать в виде ассемблерной вставки. Подскажите пожалуйста как сделать!


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru