OSECPU-ASKA入門 #0004

(0) はじめに


(1) 関数の作り方、呼び出し方


(2) 1桁の数字を表示できる関数の例

#include "osecpu_ask.h"

#define L_putDec      LOCAL(0)
LOCALLABELS(1);

#define putDec(i)  R30=i; CALL(L_putDec)

    // main
    for (;0;) {
        int32s i:R00;
        for (i = 0; i != 10; i++) {
            putDec(i);
        }
    }
    jnukApi_exit(0);

beginFunc(L_putDec);
    for (;0;) {
        int32s i:R30;
        junkApi_putchar(i + '0');
    }
endFunc();

(3) 4桁の数字を表示できる関数の例

#include "osecpu_ask.h"

#define L_putDec    LOCAL(0)
LOCALLABELS(1);

#define putDec(i)   R30=i; CALL(L_putDec)

    // main
    for (;0;) {
        int32s i:R00;
        for (i = 0; i != 10000; i++) {
            putDec(i);
            junkApi_putConstString(' ');
        }
    }
    jnukApi_exit(0);

beginFunc(L_putDec);
    for (;0;) {
        int32s i:R00;
        i = R30; // できるだけR00を使いたいのでいったん引き取る.
                 // R00は高速に演算できるレジスタです.
        junkApi_putchar(i / 1000 + '0'); i %= 1000;
        junkApi_putchar(i /  100 + '0'); i %=  100;
        junkApi_putchar(i /   10 + '0'); i %=   10;
        junkApi_putchar(i        + '0');
    }
endFunc();

(4) %dみたいな数字を表示できる関数の例

#include "osecpu_ask.h"

#define L_putDec    LOCAL(0)
LOCALLABELS(1);

#define putDec(i)   R30=i; CALL(L_putDec)

    // main
    for (;0;) {
        int32s i:R00;
        for (i = 0; i != 1000; i++) {
            putDec(i);
            junkApi_putConstString(' ');
        }
    }
    jnukApi_exit(0);

beginFunc(L_putDec);
    for (;0;) {
        int32s i:R00, flag:R01, j:R02, ii:R03;
        i = R30;
        flag = 0;
        if (i < 0) {
            junkApi_putConstString('-');
            i *= -1;
        }
        for (j = 1000000000; j >= 10; j /= 10) {
            ii = i / j;
            i %= j;
            if (!(flag == 0 & ii == 0)) {
                flag = 1;
                junkApi_putchar(ii + '0');
            }
        }
        junkApi_putchar(i + '0');
    }
endFunc();

こめんと欄


コメントお名前NameLink

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS