реклама на сайте
подробности

 
 
> Помогите с циклом для С8051F005
Scorpline
сообщение Oct 25 2007, 23:55
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 25-10-07
Пользователь №: 31 737



Я начинающий в ассемблере... Может кто поможет написать код цикла для сравнения двух однобайтных значений... то есть есть два числа(допустим #10h и #3Fh). Они сравниваются с другими значениями которые прокручиваются в цикле(и постоянно изменяются)... и если эти значение меньше 10h то выполняется вызов какойто подпрограммы и соответственно значение больше 3Fh то вызов другой подпрограммы.... (вообщем как в ассемблере зделать знаки <>) help.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
msn
сообщение Oct 26 2007, 10:38
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 126
Регистрация: 1-01-06
Из: Украина, Киев
Пользователь №: 12 759



Цитата(Scorpline @ Oct 26 2007, 02:55) *
Я начинающий в ассемблере... Может кто поможет написать код цикла для сравнения двух однобайтных значений... то есть есть два числа(допустим #10h и #3Fh). Они сравниваются с другими значениями которые прокручиваются в цикле(и постоянно изменяются)... и если эти значение меньше 10h то выполняется вызов какойто подпрограммы и соответственно значение больше 3Fh то вызов другой подпрограммы.... (вообщем как в ассемблере зделать знаки <>) help.gif

Код
MOV      A,Rx               ; Определили значение переменной цикла, A = VAR
CLR      C                  
SUBB     A,#0x10            ; A  = VAR – 0x10
JNC      LabelNext          ; Если VAR – 0x10 >= 0 :: VAR >= 0x10 то переходим на LabelNext
CALL     FunLoss            ; Если VAR – 0x10  < 0 :: VAR  < 0x10 то вызываем FunLoss            
JMP      LabelEnd

LabelNext:
MOV      A,Rx               ; Определили значение переменной цикла, A = VAR
SETB     C                  
SUBB     A,#0x3F            ; A  = VAR – 0x3f
JC       LabelMore          ; Если VAR – 0x3f <= 0 :: VAR <= 0x3f то переходим на LabelEnd
CALL     FunMore            ; Если VAR – 0x3f  > 0 :: VAR  > 0x3f то вызываем FunMore            

LabelEnd:
Go to the top of the page
 
+Quote Post
Палыч
сообщение Oct 26 2007, 13:55
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



По-моему, всётаки лучше так

Код
;--- Если в Rx лежит проверяемый байт (VAR)
;--- Проверка VAR < 0x10
    CJNE  Rn, #10h, Lab1
Lab1:
    JNC   LabNext          
    CALL  FunLoss; Если  VAR  < 0x10 то вызываем FunLoss
    JMP    LabelEnd
LabelNext:
;--- Проверка VAR > 0x3F
    CJNE  Rn, #3Fh, Lab2
    JMP    LabelEnd
Lab2:
    JC    LabelEnd
    CALL  FunMore; Если VAR  > 0x3f то вызываем FunMore
LabelEnd:


Применение CJNE мне нравится тем, что при проверке не разрушается содержимое аккумулятора и регистров

Сообщение отредактировал Палыч - Oct 26 2007, 14:00
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 09:26
Рейтинг@Mail.ru


Страница сгенерированна за 0.0139 секунд с 7
ELECTRONIX ©2004-2016