Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Соколиный глаз
C#
280 / 220 / 123
Регистрация: 25.07.2014
Сообщений: 4,171
Записей в блоге: 6
Завершенные тесты: 4
1

Вычисление значения математического выражения

24.10.2018, 15:24. Просмотров 900. Ответов 6
Метки нет (Все метки)

Можете написать код для вычисления следующего выражения:

http://www.cyberforum.ru/cgi-bin/latex.cgi?y = y1 - y2

, если:
1)
http://www.cyberforum.ru/cgi-bin/latex.cgi?y1 = \begin{cases}|x| & \text{ if } x<0  \\ x - a & \text{ if } x>=0  \end{cases}
2)
http://www.cyberforum.ru/cgi-bin/latex.cgi?y2 = \begin{cases}a + x & \text{ if } x mod 3 = 1  \\ 7 & \text{ else}  \end{cases}

на ассемблере с Intel'овским синтаксисом через использование ассемблерных вставок C++? Числа вводятся пользователем. (Буду благодарен, если Вы поможете. )
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2018, 15:24
Ответы с готовыми решениями:

Вычисление математического выражения b= s*r*(g-l)
Помогите правильно написать код для этой формулы b= s*r * (g-l) ;b= s*r * (g-l) .MODEL SMALL...

Вычисление значения выражения
Добрый день! Подскажите как записать этот пример в ассемблер? X=\frac{({A}^{2}+D)}{C-B}

Вычисление значения выражения: (3*c-2*d)/(a)
Помогите пожалуйста, вычислить (3*c-2*d)/(a).

Вычисление значения выражения y=(2*c-d+23)/(a/4-1)
Ребята, помогите, пожалуйста, найти ошибку в программе, которая вычисляет значение выражения...

Вычисление значения выражения (А/2 – В) – 2*(С + 1) (masm)
Вот пример выражения (А – В) *2 + С – 1, где А, В, С - целые знаковые числа. А мне нужно (А/2 –...

6
ФедосеевПавел
Модератор
4753 / 2647 / 1058
Регистрация: 01.02.2015
Сообщений: 8,646
Записей в блоге: 1
24.10.2018, 18:55 2
Соколиный глаз, вы умеете программировать, поэтому покажу лишь начало, вычисление y1
Assembler
1
2
3
4
5
6
7
8
    mov eax, [x]
    mov ebx, eax
    xor ecx, ecx
    neg ebx
    cmovns eax, ebx
    cmovs ecx, [a]
    sub eax, ecx
        mov [y1], eax
Инструкции cmov с памятью работают лишь при ключе компиляции i686. Если компилятор их не воспримет, тогда по старинке с переходами
Assembler
1
2
3
4
5
6
7
8
9
mov eax, [x]
or eax, eax
jns m1
  neg eax
  jmp m2:
m1:
sub eax, [a]
m2:
mov [y1], eax
1
Соколиный глаз
C#
280 / 220 / 123
Регистрация: 25.07.2014
Сообщений: 4,171
Записей в блоге: 6
Завершенные тесты: 4
24.10.2018, 19:24  [ТС] 3
ФедосеевПавел, на Ассемблере не умею...

Добавлено через 3 минуты
Почему квадратные скобки в первой строке?
0
Mikl___
Автор FAQ
14544 / 6689 / 702
Регистрация: 11.11.2010
Сообщений: 12,027
24.10.2018, 19:27 4
Цитата Сообщение от Соколиный глаз Посмотреть сообщение
на Ассемблере не умею...
Цитата Сообщение от Соколиный глаз Посмотреть сообщение
через использование ассемблерных вставок C++
Одно из двух или ты не знаешь, что тебе нужно, или воспользуйся тем, что дали
0
ФедосеевПавел
Модератор
4753 / 2647 / 1058
Регистрация: 01.02.2015
Сообщений: 8,646
Записей в блоге: 1
24.10.2018, 19:53 5
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
26
27
mov eax, [x]
or eax, eax
jns m1
  neg eax
  jmp m2:
m1:
sub eax, [a]
m2:
mov [y1], eax
 
mov eax, [x]
cdq
mov ebx, 3
idiv ebx
cmp edx, 1
jne m3
mov eax, [a]
add eax, [x]
jmp m4
m3:
mov eax, 7
m4:
mov [y2], eax
 
mov ebx, [y1]
sub ebx, eax
mov [y], ebx
1
Соколиный глаз
C#
280 / 220 / 123
Регистрация: 25.07.2014
Сообщений: 4,171
Записей в блоге: 6
Завершенные тесты: 4
25.10.2018, 02:04  [ТС] 6
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
// Task2.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
 
#include <iostream>
 
int GetY(int x, int a)
{
    int y;
    __asm
    {
        mov eax, [x]
            or eax, eax
            jns m1
            neg eax
            jmp m2 :
    m1 :
        sub eax, [a]
    m2 :
       mov[y1], eax
 
       mov eax, [x]
       cdq
       mov ebx, 3
       idiv ebx
       cmp edx, 1
       jne m3
       mov eax, [a]
       add eax, [x]
       jmp m4
   m3 :
       mov eax, 7
       m4 :
          mov[y2], eax
 
          mov ebx, [y1]
          sub ebx, eax
          mov[y], ebx
    }
    return y;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    int x, a;
    std::cin >> x >> a;
    std::cout << GetY(x, a);
    return 0;
}
Не компилируется.
0
ФедосеевПавел
Модератор
4753 / 2647 / 1058
Регистрация: 01.02.2015
Сообщений: 8,646
Записей в блоге: 1
25.10.2018, 07:08 7
Лучший ответ Сообщение было отмечено Соколиный глаз как решение

Решение

jmp m2 :
лишнее двоеточие

m2:
лишний пробел между названием метки и двоеточием
1
25.10.2018, 07:08
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2018, 07:08

Вычисление значения арифметического выражения
Арифметические команды для работы с целыми числами. Составьте программу, вычисляющую значение...

Вычисление значения арифметического выражения (tasm)
Всем здравствуйте,помогите пожалуйста составить программу, вычисляющую значение арифметического...

Вычисление значения выражения по вводимым числам
Срочно нужно написать программу для расчета Х, ввод чисел а,b,c с клавиатуры. Выводить Х, включая...


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

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

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