前回までのビットフィールド転送命令群と比べて今回のレジスタ抽出命令EXTRの動作は分かり易いです。エイリアスもシンプル、たった1個。ROR(右ローテイト)命令だけです。ただ、左にシフトして取り出すような操作のEXTRに対して、詰まっているデータから見ると右ローテイトに見えると。左右が時々混乱するのは私だけ? “ぐだぐだ低レベルプログラミング(77)ARM64(AArch64)、EXTR、RORでもある” の続きを読む
やっつけな日常(32) Rustに入ればRustに従え、文字列操作、おっかなびっくり その1
テキトーに書いても走る(走ったように見える)言語もあれば、走る前に阻止される言語もあります。どうもRustは後者であるようです。Rustでの文字列のとり扱いを始めましたが、Cの文字列に慣れた頭でいると、いろいろ転換せねばなりませぬ。文字列を配列とみて添え字でアクセスするような方法は禁止じゃと。 “やっつけな日常(32) Rustに入ればRustに従え、文字列操作、おっかなびっくり その1” の続きを読む
ソフトな忘却力(23) time_t型、64bit OS上なら64bitになっていたのね
別件でdateコマンドを使って思い出したのが UNIX時間であります。Linuxでも使用の「伝統」です。そういえば昔は32ビットであったので2038年問題ってのが有った筈。手元のLinux機、ラズパイ4はようやく64ビットOSに切り替えましたが、ラズパイ3は32ビットOSのままです。time_t型の件、調べてみました。
“ソフトな忘却力(23) time_t型、64bit OS上なら64bitになっていたのね” の続きを読む
ぐだぐだ低レベルプログラミング(76)ARM64(AArch64)、UBFM命令、伸縮自在
前回は符号付きのビットフィールドMOV命令、SBFMのエクササイズでした。今回は符号無のビットフィールドMOV命令、UBFMです。これまた多くのエイリアスの名のもとにいろいろな命令に化ける命令です。似た命令であるSBFMと「対称」と思って見に行くと期待を裏切られます。SBFMであったものが無いです。でも無くても大丈夫。 “ぐだぐだ低レベルプログラミング(76)ARM64(AArch64)、UBFM命令、伸縮自在” の続きを読む
部品屋根性(77) AHT21B、CRC8でのデータ検査を追加。ラズパイPython
前回、I2C接続の温湿度センサ AHT21B をラズパイのI2Cバスに接続し、Python3のスクリプトで温度、湿度を読み取ってみました。まあ動いているみたいではあるのですが、データの伝送に誤りがあるや否やを確かめるためのCRCを検査しておりませなんだ。今回は、CRCの検査を追加しただけ。
ぐだぐだ低レベルプログラミング(75)ARM64(AArch64)、SBFM命令、変幻自在
今回は前回に引き続き第72回で調べたビットフィールドMOV命令をエクササイズしたいと思います。今回の命令はSBFM命令(サイン付きBFM)です。SBFM命令の動作説明図を上に再掲載します。しかし図を見てもなんだかよく分からない命令デス。しかしこれが変幻自在、エイリアスの隠れ蓑の下で多数の「重要命令」の実体となります。
“ぐだぐだ低レベルプログラミング(75)ARM64(AArch64)、SBFM命令、変幻自在” の続きを読む
部品屋根性(75) MCP3421、ADCのラズパイI2C接続、Pythonで制御の続き
前回、ΔΣ型の18bit ADコンバータ、MCP3421をRaspberry Pi 3 model B+にI2C接続。しかしPythonで動作テストをする際に「デーモン呼び出し」ていました。今回はPythonのI2Cモジュールを更新し「デーモン呼び出さずに」MCP3421を制御できるようにしてみた「続報」です。
ぐだぐだ低レベルプログラミング(74) ARM64(AArch64)、BFM命令、別名不在
今回は、前々回調べたビットフィールドMOV命令の実習です。最初から躓きました。BFM命令の別名(エイリアス)のBFC命令、アセンブラに拒否られました。実体命令であるBFMは存在しているんですがね。そのくせディスアセンブラは頼みもしないのにBFM命令をBFC命令にディスアセンブルしてくれます。いろいろあるのね、きっと。
やっつけな日常(28) Raspberry Pi OS、32bit版から64bit版へ移行
別シリーズでArmの64bitのアセンブリ言語命令を練習中。これにAndroidスマホ使ってました。でも最近スマホの電池の減りが速くて練習しずらいです(You tubeのせい。)そこで32ビットOSで引っ張っているRaspberry Pi 4を64ビットOSに移行しようと決断。簡単ではあるけれどいろいろあるんだ。
部品屋根性(74) MCP3421、18bit ΔΣADCをRaspberry Piに接続
今回はI2Cバスに接続可能なADコンバータです。実験はMicrochip社のMCP3421(最大18bit解像度)です。兄弟チップのMCP3425(最大16bit解像度)もあり、ピンコンパチかつソフトコンパチです。I2Cバスに接続できるのでRaspberry PiのようにADCを持たない機種にも簡単に追加できます。
ぐだぐだ低レベルプログラミング(73) ARM64(AArch64)、MOV命令の実習
やっつけな日常(25) Goに入ればGoに従え、そんなこと出来るの?ヒープ・エスケープ
前回はRust言語のヒープ管理が「クセが強い」みたいな事を書いてしまいました。「クセが強い」ことでは、Go言語のヒープ管理も負けてない、と思います(個人の感想です。)「ヒープ・エスケープ」という技?を最初みたときには、これは何?と結構驚きました。伝統的なC言語ではやっちゃいけない(やったらひどいことになる)ことがOK。 “やっつけな日常(25) Goに入ればGoに従え、そんなこと出来るの?ヒープ・エスケープ” の続きを読む
ぐだぐだ低レベルプログラミング(72) ARM64(AArch64)、ビットフィールドMOV
前回、MOV命令の込み入った事情を図にしただけで「実習はまた今度」などと書きました。しかし今回も「また今度」の回であります。MOV命令の親戚?ビットフィールドMOV命令群がこれまた込み入っているためであります。ビットフィールド転送命令と聞くと地味な?感じがしますが、これがどうして非常に多数の命令に化けるのであります。
やっつけな日常(23) ラズパイ4に Rust言語処理系をインストール。野望?は広がる
いろいろ試してみたい言語処理系が多数あります。つい数か月前からもGo言語の勉強始めたところです。しかし「年に新言語ひとつ」のペースではとても死ぬまでにカバーしきれない、というわけでペースアップと。今回新たにRust言語始めます。「何でもできる」言語みたいですが、食いつきポイントは「低レベル、組み込み」ができるらしい点。