ASM30&LINK30

REPEAT命令

PIC24FのREPEAT命令でバグ作ってしまった。リテラル指定した繰り返し回数が1つ多かったのだ。 この命令は、リテラル(即値)でもレジスタでも、指定ループ回数+1だけループする。 そのため直後のmov命令を3回繰り返すとき repeat #3 mov w1, [w0++]と書く…

PIC24FのCPSGT命令とCPSLT命令 こんな命令セット誰が考えた?!(その2)

その1では、CPSGT命令とCPSLT命令について「スキップ条件ではなく実行条件で書かせろ」的な話をした。次命令のスキップ条件と実行条件は論理的に反転しているので、マクロで疑似命令を作成すれば解決できそうにも思える。しかしC言語等の高級言語と異なり、…

PIC24FのCPSGT命令とCPSLT命令 こんな命令セット誰が考えた?!(その1)

PIC24FのCompare&Skip系(CPS〜)命令の中で、CPSGT命令は「Wb-Wn, Skip if Wb > Wn」(レジスタWbからWnを引くことにより、もしWb>Wnが成り立つなら次の命令をスキップ)。一方、CPSLT命令は「Wb-Wn, Skip if Wb レジスタWbからWnを引くことにより、もしWb しか…

C30コンパイラのアセンブル出力

PIC24F,H,dsPIC用CコンパイラC30でコンパイルすると通常オブジェクトファイル(.o)が出力される。このコンパイラの実体はgccなので、中間結果のアセンブラ出力も可能である。 ところがMPLABのインタフェースにはアセンブル出力指示が出来ないので、どうやれば…

データ・コンテキスト内の実行シンボル(その2)

昨日の続き。 「MPLAB ASM30/LINK30 and Utilities User’s Guide」の「5.8 USING EXECUTABLE SYMBOLS IN A DATA CONTEXT」に該当する話が書いてある。一度目を通したはずだが、理解せずに忘れてしまったようだ。 要は、プログラム・アドレスは24bitで、デー…

データ・コンテキスト内の実行シンボル(その1)

私の言う「データ・コンテキスト内の実行シンボル」とは .section .str_area, code TEXT1: .string "Hello world!\n" .text .global _main _main: mov #TEXT1, w1 TBLRDL.b [w1], w0における「TEXT1」のこと。ちなみに上の記述はエラーになる。 ???.s: Assem…

スタックの設定

私の経験だと、none-OS組み込みプログラミングでスタックを確保、設定するところでは、C言語風に書くと #define STACK_SIZE (8*1024) // [byte] static unsigned short stack_area[STACK_SIZE / sizeof(unsigned short)]; stackpointer = stack_area + STACK…

ASM30&LINK30のユーザーズ・ガイド

ASM30&LINK30のユーザーズ・ガイドは以下のリンク先にある。 「MPLAB Assembler, Linker and Utilities for PIC24 MCUs and dsPIC DSCs User's Guide」 Microchip社のユーザー ガイド一覧 からどうぞ。