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

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

Восстановить пароль Регистрация
 
lasn
1 / 1 / 0
Регистрация: 22.11.2012
Сообщений: 34
26.11.2012, 22:41     Непонятки в ассемблерной вставке #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 минуту
Ну так что, какие мысли у вас есть по этому коду?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2012, 22:41     Непонятки в ассемблерной вставке
Посмотрите здесь:

C++ как вызвать createfile ассемблерной вставкой?
Очищение памяти в ассемблерной вставке C++
Сложение длинных чисел в ассемблерной вставке C++
Не работает программа с ассемблерной вставкой C++
Как правильно вставлять диррективу .386 в ассемблерной вставке C++
Выполнить с использованием ассемблерной вставки C++
C++ Как написать программу на C++ с ассемблерной вставкой?
C++ Определить размер кеша инструкций первого уровня с помощью ассемблерной вставки

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 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).
переход, еслы выше (учитывая знак)
Yandex
Объявления
27.11.2012, 11:01     Непонятки в ассемблерной вставке
Ответ Создать тему
Опции темы

Текущее время: 04:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru