2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 вычитание на Assembler [Упр]
Сообщение30.09.2011, 12:48 
Нужно вычесть два 16-разрядных числа(таких, чтобы результат был отрицательным) и результат вывести на экран.
Код:
   mov   ax, 1221h
   sbb   ax, 4553h

Проблема в том, что при выводе получается неправильное число, CCCEh, как правильно вывести отрицательный результат? (Вывожу регистр ax, предполагаю, что нужно выводить еще что-то, но не знаю что)

 
 
 
 Re: вычитание на Assembler
Сообщение30.09.2011, 14:20 
Pinkey в сообщении #488003 писал(а):
при выводе получается неправильное число, CCCEh, как правильно вывести отрицательный результат?
1. Вы знаете что-нибудь о дополнительном коде?
2. Почему SBB, а не SUB?

 
 
 
 Re: вычитание на Assembler
Сообщение30.09.2011, 14:35 
да, sub на самом деле написан. А дополнительный код, это дополнение до двух и прибавление единицы? Если да, то я все равно не понимаю, что надо сделать.

 
 
 
 Re: вычитание на Assembler
Сообщение30.09.2011, 14:57 
Аватара пользователя
Замечания:
1. Компьютер не может делать неправильно, значит результат правильный.
2. В соответствии с результатом устанавливаются флаги. Нас интересуют флаги С, S, Z, O.
3. Команда SBB это вычитание с заёмом, т.е. с учётом флага С, а в вашем простом примере надо использовать команду SUB.
4. Вы из меньшего положительного вычли большее положительное, получили отрицательное число.
Десятичный пример: 1-4=7 и заём из следующего десятичного разряда, устанавливаются флаги С и S.
Теперь из результата надо получить код отрицательного числа, поэтому вопрос: в каком виде в x86 кодируются отрицательные числа?
Т.е. десятичное отрицательное число выглядит как -3, поэтому из десятичного числа 7 надо получить код 3 и вывести на экран знак минуса и этот код.
Вам из FFFFCCCEh надо получить код отрицательного числа и вывести его со знаком минус.

 
 
 
 Re: вычитание на Assembler
Сообщение30.09.2011, 15:06 
Chifu в сообщении #488034 писал(а):
Вам из FFFFCCCEh надо получить код отрицательного числа и вывести его со знаком минус.

Я не понимаю как это сделать, объясните пожалуйста подробнее (вывести надо в 16ричной форме)

 
 
 
 Re: вычитание на Assembler
Сообщение30.09.2011, 15:15 
Аватара пользователя
Pinkey в сообщении #488035 писал(а):
Я не понимаю как это сделать, объясните пожалуйста подробнее (вывести надо в 16ричной форме)
Полученное двоичное число надо преобразовать в 16-форму. Как двоичные числа преобразуются в 16-форму?

 
 
 
 Re: вычитание на Assembler
Сообщение30.09.2011, 15:35 
ну по 4 бита берется за одно 16-ричное число, единицы умножаются на соответствующие степени двойки. Но я все равно не понимаю, как мне вывести правильный ответ

 
 
 
 Re: вычитание на Assembler
Сообщение30.09.2011, 15:43 
Аватара пользователя
Pinkey в сообщении #488040 писал(а):
ну по 4 бита берется за одно 16-ричное число, единицы умножаются на соответствующие степени двойки. Но я все равно не понимаю, как мне вывести правильный ответ
Берёте массив символов от 0 до F и выводите по индексу полученному из тетрад соответствующие коду символы.

 
 
 
 Re: вычитание на Assembler
Сообщение30.09.2011, 17:07 
Pinkey в сообщении #488032 писал(а):
Если да, то я все равно не понимаю, что надо сделать.
1. Да.
2. Если результат отрицательный, то получить соответствующее положительное значение, вывести знак минус и полученное положительное значение.

 
 
 
 Re: вычитание на Assembler
Сообщение30.09.2011, 20:41 
спасибо, теперь все понятно стало:)

 
 
 
 Re: вычитание на Assembler
Сообщение01.10.2011, 10:02 
Аватара пользователя
То что я назвал кодом отрицательного числа правильнее называть положительным числом, т.к. в числах со знаком признаком отрицательного числа является флаг S, который копирует старший бит машинного слова результата. Вы несколько неправильно написали операцию взятия дополнительного кода для слов. Операция взятия дополнительного кода переводит положительное число в отрицательное, а отрицательное в положительное.

 
 
 [ Сообщений: 11 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group