|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
28.01.2009, 00:16 | #1 |
Новичок
Джуниор
Регистрация: 28.01.2009
Сообщений: 2
|
Assembler для ARM
Очень нужна помощь!
Нужно составить программку, которая посчитает сумму двух модулей чисел (числа 32-ух битные и целые). Числа даются в регистрах R0 и R1. Результат записывается в регистре R0. Я не понимаю принципа проверки числа. Если оно положительное, то нужно просто посчитать сумму, а если оно отрицательное, то сначала его нужно переделать в положетельное, а затем посчитать сумму. Кажется как-то с командой "CMP"? Пожалуйста, подскажите решение. Заранее благодарю. |
28.01.2009, 07:33 | #2 |
Форумчанин
Регистрация: 26.01.2009
Сообщений: 112
|
Знаковые числа представляются дополнением.
Положи число в 32-битный регистр, тогда в его младшей половине будет то, что отвечает за целую часть. отними ЭТО от HEX "FFFF" - получишь модуль. PS. Будет забавно если я прав, но попробовать можно Последний раз редактировалось ("")(Э_Є)(""); 28.01.2009 в 07:59. |
28.01.2009, 14:24 | #3 | |
Участник клуба
Регистрация: 08.10.2007
Сообщений: 1,185
|
Цитата:
Модуль нуля, получается, равен FFFFh?.. О_о Код:
Последний раз редактировалось Somebody; 28.01.2009 в 14:41. |
|
28.01.2009, 15:28 | #4 |
Форумчанин
Регистрация: 26.01.2009
Сообщений: 112
|
Somebody
Я отрицаю вашу реальность и создаю свою собственную (с) Меня накрыло, видимо, тяжелый случай прозрения |
28.01.2009, 17:02 | #5 | |
Новичок
Джуниор
Регистрация: 28.01.2009
Сообщений: 2
|
Цитата:
Спасибо за ответ, я не сомневаюсь, что это работает, только вот "teq" и "rsbmi" мне совсем не знакомы. Мы делали программки такого плана: Код:
Последний раз редактировалось rpy3uH; 29.01.2009 в 14:35. |
|
29.01.2009, 14:25 | #6 |
Участник клуба
Регистрация: 08.10.2007
Сообщений: 1,185
|
teq r0,#0 можно заменить на cmp r0,#0
teq выполняет логическое или, cmp - вычитание. Здесь всё равно, так как надо только узнать знак операнда. sub вычитает из первого операнда второй, rsb вычитает из второго первый, т.е. из нуля вычитается значение регистра и записывается обратно в этот регистр. mi - код условия: инструкция выполняется если стоит флаг "отрицательный результат" (как eq в инструкции b - выполянется, если установлен флаг "ноль"). Если используется cmp, то вместо условия mi можно использовать lt (меньше), между "меньше нуля" и "отрицательный результат" никакой разницы. Таким образом, можно заменить teq на cmp, а от остальное, по-моему, только усложнит программу. Про выход из подпрограммы не знаю, я для arm не писал. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Программы для Студента (Assembler) | Andatra | Помощь студентам | 2 | 06.08.2019 08:07 |
создать драйвер дос для клавы assembler | assemb | Помощь студентам | 2 | 02.11.2008 19:35 |
Возможно ли написать на языке Assembler модуль расширения для BIOS | biff | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 7 | 07.07.2008 13:41 |
Ассемблер для ARM | Pavlik | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 0 | 11.04.2008 15:30 |
Является ли Assembler для вас "лесом дремучим"? | Delpher | Свободное общение | 9 | 14.12.2007 11:32 |