49 / 2 / 0
Регистрация: 13.02.2020
Сообщений: 448
1
C/C++

Реализовать вычитание двух 64-разрядных чисел, не используя команду SUB

01.04.2021, 22:30. Показов 1702. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
ФедосеевПавел, а подскажите, пожалуйста, почему вот эта программа выдаёт неверный результат?? (нужно реализовать вычитание двух 64-разрядных чисел, не используя команду SUB)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
 
int main()
{
    long long a = 889567, b = 563978;
 
    _asm
    {
        MOV EAX, dword ptr[b]
        MOV EDX, dword ptr[b + 4]
        NEG EAX
        NEG EDX
        ADD dword ptr[a], EAX
        ADC dword ptr[a + 4], EDX
    }
    cout << " a-b= " << a;
    cout << "\n";
    return 0;
}
Миниатюры
Реализовать вычитание двух 64-разрядных чисел, не используя команду SUB  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.04.2021, 22:30
Ответы с готовыми решениями:

Реализовать вычитание двух 64-разрядных чисел.
Всем привет:) Ребят подскажите, пожалуйста, в чём проблема?? Есть следующая задача: &quot;Реализовать...

Вычитание двух 32-разрядных двоичных чисел
Добрый день! Понимаю, что задача простейшая, но все же вызывает затруднения. Мне надо написать...

Рекурсия: вычитание двух n-разрядных чисел
мне нужно вычесть два n-разрядные числа рекурсией, помогите пожалуйста мені потрібно відняти два...

PIC16F84A Вычитание двух 2-х разрядных двоичных чисел
Помогите с кодом для PiC16f84a со следующими функциями: Вычитание двух 2-х разрядных двоичных...

5
фрилансер
4915 / 4559 / 961
Регистрация: 11.10.2019
Сообщений: 11,934
01.04.2021, 23:30 2
Цитата Сообщение от OlyaAnnet Посмотреть сообщение
NEG EAX
        NEG EDX
по-моему, так неправильно. Нужно сделать инверсию +1 для всего большого "числа" EAXEDX , а не по отдельности к его половинкам

что-то вроде
Код
not EAX
not EDX
add EAX,1
adc EDX,0
1
49 / 2 / 0
Регистрация: 13.02.2020
Сообщений: 448
02.04.2021, 06:47  [ТС] 3
Алексей1153, а можете, пожалуйста объяснить, почему так?? По сути нам же надо сделать число отрицательным, для этого нужно сначала сделать инверсию, а потом прибавить к числу 1. А почему вы к EAX прибавляете 1, а к EDX нет ?
0
фрилансер
4915 / 4559 / 961
Регистрация: 11.10.2019
Сообщений: 11,934
02.04.2021, 08:04 4
OlyaAnnet, EAX и EDX - 32-битные регистры. Из них мысленно составили 64-битное значение:

старшая часть | младшая часть
EDX | EAX

инвертировать этот "составной регистр" можно по частям

а вот чтобы прибавить 1, придётся учесть перенос:
к младшей части прибавляем 1, затем к старшей части прибавляем 0 и флаг переноса C
1
49 / 2 / 0
Регистрация: 13.02.2020
Сообщений: 448
02.04.2021, 09:25  [ТС] 5
Алексей1153, спасибо

Добавлено через 1 час 17 минут
Алексей1153, подскажите, пожалуйста, а вот, с каким расширением нужно сохранить код в Блокноте, чтобы потом можно запустить его в Visual Studio??
0
фрилансер
4915 / 4559 / 961
Регистрация: 11.10.2019
Сообщений: 11,934
02.04.2021, 09:34 6
OlyaAnnet, зачем блокнот, можно в студии сразу и делать. Если речь про C++, то файл *.cpp , где расположена функция int main()

ну и, если нужно, остальные файлы cpp и h

также нужно будет создать проект
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.04.2021, 09:34
Помогаю со студенческими работами здесь

Реализовать процедуры сложения и умножения двух сто разрядных чисел
Выручайте, совершенно ничего не понимаю в программировании,а в университете поставили данную...

Сложение/вычитание 4-разрядных bcd-чисел
Всем доброго времени суток! Совсем запуталась с решением данной задачи, поэтому без вашей помощи не...

Вычитание n-разрядных целых чисел различной длины.
Добрый вечер, помогите сделать блок схему на паскале для задачи: Напишите алгоритм вычитания...

Сложение, вычитание и умножение 32-разрядных чисел в intel 8051
Реализовать подпрограммы сложения, вычитания и умножения 32- разрядных чисел в формате с плавающей...

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

Умножение двух без знаковых чисел, не используя команду mul
Приветствую, вдогонку прошлой темы &quot;Найти остаток от деления двух без знаковых чисел, не используя...


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

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

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