Сейчас на форуме: Dart Raiden, bedop66938, morgot (+6 невидимых)

 eXeL@B —› Электроника —› Компилятор MPASM (ветвления)
Посл.ответ Сообщение

Ранг: 13.8 (новичок), 1thx
Активность: 0.010
Статус: Участник

Создано: 14 октября 2011 11:35
· Личное сообщение · #1

Здравствуйте форумчане.
Учусь программировать на ассемблере под микроконтроллер PIC16F877.
В контроллере есть регистр STATUS, который содержит флаги состояния АЛУ. В частности флаг Z (флаг нулевого результата). В принципе как и на "взрослом процессоре".
Имею фрагмент кода:
Code:
  1.  loc_1:
  2.  movlw 0x31        ; Поместить 31h в аккамулятор (equ mov eax, 31h)
  3.  decf w
  4.  btfss STATUS, Z  ; Проверить бит Z в регистре STATUS. Если Z = 1, то следующая инструкция не выполняется.
  5.  goto loc_1          ; Безусловный переход на метку loc_1 ( equ jmp loc_1 )
  6.  nop
  7.  nop


В некотором мануале вычитал, что этот контроллер поддерживает недокументированную команду BNZ. (Переход на метку, если флаг Z = 1).
Пишу в исходнике bnz loc_1, а в дизассемблере получаю btfss STATUS, Z / goto loc_1

Внимание вопрос: Реально ли "научить" компилятор принимать команды ветвления такие как JNZ / JZ ? Просто от разных наборов команд получается каша в голове.
Знаю что если принципиально подойти к этому вопросу, то можно всё. Вот меня интересует, кто-нибудь делал подобный "тюнинг" ? И если делал, то как ?

Можно как вариант использовать макросы. Типа

Code:
  1. jnz macro
  2. btfss status, z
  3. endm

Тогда компилятор будя воспринимать что мне надо. Но как быть с условием ? ( jnz loc_1 )
Думаю у меня получилось правильно сформулировать вопрос.




Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 14 октября 2011 12:21 · Поправил: OKOB
· Личное сообщение · #2

Хотите BNZ перезжайте с 16й серии на 18ю и будет вам счастье.

компилятор за вас сделал необходимую замену на проверку бита и переход или вы предпочли бы сообщение о ошибке "Команда не поддерживается для целевого контроллера"?

Что касается макро то все давно уже изобретено и можете накуралесить любые мнемоники (имена макро) какие вам дороги (известны).
например:
http://comments.gmane.org/gmane.comp.hardware.microcontrollers.pic/176064

-----
127.0.0.1, sweet 127.0.0.1





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 14 октября 2011 12:23
· Личное сообщение · #3

макросы они на то и макросы, что должны поддерживать параметры, читай доки по любому это возможно.

-----
Yann Tiersen best and do not fuck




Ранг: 13.8 (новичок), 1thx
Активность: 0.010
Статус: Участник

Создано: 15 октября 2011 00:27
· Личное сообщение · #4

Спасибо за просветление.
Обьявляем макрос ...
Code:
  1. jnz macro label
  2. btfss STATUS, Z
  3. goto label
  4. endm

... и юзаем "привычную" команду перехода
Code:
  1. movlw 0x31
  2. loc_1:
  3. decf w
  4. jnz loc_1



 eXeL@B —› Электроника —› Компилятор MPASM (ветвления)
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати