Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Сочетание частичной проверки и проверки диапазона

Поиск

 

TEQ   Rc,#127           ; Частичная проверка,CMPNE Rc,#" "-1          ; проверка диапазонаMOVLS Rc,#"."             ; ЕСЛИ Rc<=" " ИЛИ Rc=ASCII(127) ТО Rc:="."

 

Деление и остаток от деления

 

Как правило, подпрограммы деления для конкретных задач предоставляется в виде исходной кодов библиотек стандарта ANSI C, поставляемых вместе с набором выбранных средств разработки (ARM Cross Development Toolkit). В целях ознакомления ниже приведены лишь некоторые из подпрограмм деления.

 

                                                       ; Делимое находится в Ra, делитель - в Rb.MOV Rcnt,#1                           ; Бит, управляющий делением.Div1  CMP Rb,#0x80000000   ; Перемещать Rb до тех пор, пока он больше RaCMPCC Rb,RaMOVCC           Rb,Rb,ASL#1MOVCC           Rcnt,Rcnt,ASL#1BCC  Div1MOV Rc,#0Div2  CMP Ra,Rb                    ; Проверить на возможность простого вычитания.SUBCS Ra,Ra,Rb                        ; Вычесть если все ОК,ADDCS Rc,Rc,Rcnt                     ; разместить соответствующий бит в результатMOVS Rcnt,Rcnt,LSR#1           ; бит, управляющий сдвигомMOVNE           Rb,Rb,LSR#1                 ; делить на 2, пока не закончено.BNE  Div2                                                       ; Результат деления размещен в Rc

; Остаток от деления - в Ra.

Контроль за переполнением в ARM7TDMI

 

1. Переполнение при умножении чисел без знака с 32-битным результатом

 

UMULL Rd,Rt,Rm,Rn  ; От 3 до 6 (включительно) машинных тактов TEQ   Rt,#0                ; +1 такт при переполнении регистра

BNE overflow

 

2. Переполнение при умножении чисел со знаком с 32-битным результатом

 

SMULL Rd,Rt,Rm,Rn  ; От 3 до 6 (включительно) машинных тактов TEQ   Rt,Rd ASR#31; +1 такт при переполнении регистра

BNE overflow

 

3. Переполнение при умножении с накоплением чисел без знака с 32-битным результатом

 

UMLAL Rd,Rt,Rm,Rn  ; От 3 до 7 (включительно) машинных тактов TEQ   Rt,#0                ; +1 такт при переполнении регистра

BNE overflow

 

4. Переполнение при умножении с накоплением чисел со знаком с 32-битным результатом

 

SMLAL Rd,Rt,Rm,Rn  ; От 4 до 7 (включительно) машинных тактов TEQ   Rt,Rd, ASR#31; +1 такт при переполнении регистра

BNE overflow

 


5. Переполнение при умножении с накоплением чисел без знака с 64-битным результатом

 

UMULL Rl,Rh,Rm,Rn   ; От 3 до 6 (включительно) машинных тактовADDS Rl,Rl,Ra1         ; накопление для младшего словаADC  Rh,Rh,Ra2       ; накопление для старшего слова

BCS overflow               ; +1 такт при переполнении обоих регистров

 

6. Переполнение при умножении с накоплением чисел со знаком с 64-битным результатом

 

SMULL Rl,Rh,Rm,Rn   ; От 3 до 6 (включительно) машинных тактовADDS Rl,Rl,Ra1         ; накопление для младшего словаADC  Rh,Rh,Ra2       ; накопление для старшего слова

BVS overflow               ; +1 такт при переполнении обоих регистров

 

Примечание: контроль за переполнением не имеет смысла при умножении чисел со знаком и без знака с 64-битным результатом, т.к. операнды - 32-битные слова, и поэтому переполнение в этом случае никогда не возникает.

 

Генератор псевдослучайных чисел

 

Часто при разработке программ требуются генераторы псевдо-случайных чисел. Самые эффективные алгоритмы основаны на командах исключающее ИЛИ вместе с командами циклического побитового сдвига. К сожалению, для генерации 32-битного результата требуется более одной обратной связи, чтобы добиться максимального диапазона (т.е. 2^32-1 циклов перед повторение псевдослучайной последовательности), поэтому приведенный ниже пример использует в своей работе 33-битный регистр с "рабочими" битами 33 и 20. Формула для работы алгоритма: <новый бит>=<бит 33> EOR <бит 20>, сдвиг влево 33-битного числа и размещение <нового бита> в младшем разряде; эта операция требует обработки всех <новых битов> (т.е. 32 бита). Вся цепочка по получении одного псевдослучайного числа выполняется за 5S машинных тактов:

; Опорное случайное число в Ra (32 бита), + 1 бит в младшем бите Rb, используется Rc.TST    Rb,Rb,LSR#1  ; Старший бит поместить во флаг переносаMOVS Rc,Ra,RRX     ; 33-битный циклический сдвиг вправоADC  Rb,Rb,Rb        ; перенос разместить в младшем бите RbEOR  Rc,Rc,Ra,LSL#12

EOR Ra,Rc,Rc,LSR#20; Новое псевдослучайное число размещается Ra.

 



Поделиться:


Последнее изменение этой страницы: 2021-12-07; просмотров: 69; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.149.235.66 (0.008 с.)