Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 28.01.2009, 01:16   #1
Natali2003
Новичок
 
Регистрация: 28.01.2009
Сообщений: 2
Репутация: 10
По умолчанию Assembler для ARM

Очень нужна помощь!
Нужно составить программку, которая посчитает сумму двух модулей чисел (числа 32-ух битные и целые). Числа даются в регистрах R0 и R1. Результат записывается в регистре R0.

Я не понимаю принципа проверки числа. Если оно положительное, то нужно просто посчитать сумму, а если оно отрицательное, то сначала его нужно переделать в положетельное, а затем посчитать сумму.
Кажется как-то с командой "CMP"?
Пожалуйста, подскажите решение. Заранее благодарю.
Natali2003 вне форума   Ответить с цитированием
Старый 28.01.2009, 08:33   #2
("")(Э_Є)("")
Форумчанин
 
Регистрация: 26.01.2009
Сообщений: 112
Репутация: 10
По умолчанию

Знаковые числа представляются дополнением.
Положи число в 32-битный регистр, тогда в его младшей половине будет то, что отвечает за целую часть. отними ЭТО от HEX "FFFF" - получишь модуль.

PS. Будет забавно если я прав, но попробовать можно

Последний раз редактировалось ("")(Э_Є)(""); 28.01.2009 в 08:59.
("")(Э_Є)("") вне форума   Ответить с цитированием
Старый 28.01.2009, 15:24   #3
Somebody
Профессионал
 
Регистрация: 08.10.2007
Адрес: Нижегородская обл.
Сообщений: 1,185
Репутация: 801
По умолчанию

Цитата:
Сообщение от ("")(Э_Є)("") Посмотреть сообщение
Положи число в 32-битный регистр, тогда в его младшей половине будет то, что отвечает за целую часть
???
Цитата:
Сообщение от ("")(Э_Є)("") Посмотреть сообщение
отними ЭТО от HEX "FFFF" - получишь модуль.
Модуль нуля, получается, равен FFFFh?.. О_о
Код:

teq       r0,#0
rsbmi     r0,r0,#0 
teq       r1,#0
rsbmi     r1,r1,#0 
add       r0,r0,r1

После teq при отрицательном результате установлен флаг N - в таком случае надо вычесть число из нуля.

Последний раз редактировалось Somebody; 28.01.2009 в 15:41.
Somebody вне форума   Ответить с цитированием
Старый 28.01.2009, 16:28   #4
("")(Э_Є)("")
Форумчанин
 
Регистрация: 26.01.2009
Сообщений: 112
Репутация: 10
По умолчанию

Somebody
Я отрицаю вашу реальность и создаю свою собственную (с)
Меня накрыло, видимо, тяжелый случай прозрения
("")(Э_Є)("") вне форума   Ответить с цитированием
Старый 28.01.2009, 18:02   #5
Natali2003
Новичок
 
Регистрация: 28.01.2009
Сообщений: 2
Репутация: 10
По умолчанию

Цитата:
Сообщение от Somebody Посмотреть сообщение
???

Модуль нуля, получается, равен FFFFh?.. О_о
Код:

teq       r0,#0
rsbmi     r0,r0,#0 
teq       r1,#0
rsbmi     r1,r1,#0 
add       r0,r0,r1

После teq при отрицательном результате установлен флаг N - в таком случае надо вычесть число из нуля.

Спасибо за ответ, я не сомневаюсь, что это работает, только вот "teq" и "rsbmi" мне совсем не знакомы.
Мы делали программки такого плана:

Код:

begin
  mov r2, #1

repeat
  cmp r1, #0
  beq end
  mul r2, r2, r0
  sub r1, r1, #1
  b repeat

end
  mov r0, r2
  bx lr

Нельзя ли подсказать что-то в таком роде? )

Последний раз редактировалось rpy3uH; 29.01.2009 в 15:35.
Natali2003 вне форума   Ответить с цитированием
Старый 29.01.2009, 15:25   #6
Somebody
Профессионал
 
Регистрация: 08.10.2007
Адрес: Нижегородская обл.
Сообщений: 1,185
Репутация: 801
По умолчанию

teq r0,#0 можно заменить на cmp r0,#0
teq выполняет логическое или, cmp - вычитание. Здесь всё равно, так как надо только узнать знак операнда.
sub вычитает из первого операнда второй, rsb вычитает из второго первый, т.е. из нуля вычитается значение регистра и записывается обратно в этот регистр. mi - код условия: инструкция выполняется если стоит флаг "отрицательный результат" (как eq в инструкции b - выполянется, если установлен флаг "ноль"). Если используется cmp, то вместо условия mi можно использовать lt (меньше), между "меньше нуля" и "отрицательный результат" никакой разницы.
Таким образом, можно заменить teq на cmp, а от остальное, по-моему, только усложнит программу. Про выход из подпрограммы не знаю, я для arm не писал.
Somebody вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
создать драйвер дос для клавы assembler assemb Помощь студентам 2 02.11.2008 20:35
Возможно ли написать на языке Assembler модуль расширения для BIOS biff Assembler 7 07.07.2008 13:41
Программы для Студента (Assembler) Andatra Помощь студентам 1 10.06.2008 15:00
Ассемблер для ARM Pavlik Assembler 0 11.04.2008 15:30
Является ли Assembler для вас "лесом дремучим"? Delpher Свободное общение 9 14.12.2007 12:32


22:48.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru