ぐだぐだ低レベルプログラミング(78)ARM64(AArch64)、シフト、ローテイトの片割

ShiftEC
Joseph Halfmoon

前回まで練習してきた即値でビット数を指定するシフト、ローテイト命令はビットフィールド転送とレジスタ抽出命令のエイリアスでした。しかしシフト、ローテイトには「片割れ」があります。レジスタでビット数を指定できる命令です。そちらも「エイリアス」あり、といいつつ、こちらはモロそのものじゃん。

“ぐだぐだ低レベルプログラミング(78)ARM64(AArch64)、シフト、ローテイトの片割” の続きを読む

ぐだぐだ低レベルプログラミング(77)ARM64(AArch64)、EXTR、RORでもある

EXTR
Joseph Halfmoon

前回までのビットフィールド転送命令群と比べて今回のレジスタ抽出命令EXTRの動作は分かり易いです。エイリアスもシンプル、たった1個。ROR(右ローテイト)命令だけです。ただ、左にシフトして取り出すような操作のEXTRに対して、詰まっているデータから見ると右ローテイトに見えると。左右が時々混乱するのは私だけ? “ぐだぐだ低レベルプログラミング(77)ARM64(AArch64)、EXTR、RORでもある” の続きを読む

やっつけな日常(32) Rustに入ればRustに従え、文字列操作、おっかなびっくり その1

train_string
Joseph Halfmoon

テキトーに書いても走る(走ったように見える)言語もあれば、走る前に阻止される言語もあります。どうもRustは後者であるようです。Rustでの文字列のとり扱いを始めましたが、Cの文字列に慣れた頭でいると、いろいろ転換せねばなりませぬ。文字列を配列とみて添え字でアクセスするような方法は禁止じゃと。 “やっつけな日常(32) Rustに入ればRustに従え、文字列操作、おっかなびっくり その1” の続きを読む

ソフトな忘却力(23) time_t型、64bit OS上なら64bitになっていたのね

trainTime
Joseph Halfmoon

別件でdateコマンドを使って思い出したのが UNIX時間であります。Linuxでも使用の「伝統」です。そういえば昔は32ビットであったので2038年問題ってのが有った筈。手元のLinux機、ラズパイ4はようやく64ビットOSに切り替えましたが、ラズパイ3は32ビットOSのままです。time_t型の件、調べてみました。
“ソフトな忘却力(23) time_t型、64bit OS上なら64bitになっていたのね” の続きを読む

ぐだぐだ低レベルプログラミング(76)ARM64(AArch64)、UBFM命令、伸縮自在

UBFM
Joseph Halfmoon

前回は符号付きのビットフィールドMOV命令、SBFMのエクササイズでした。今回は符号無のビットフィールドMOV命令、UBFMです。これまた多くのエイリアスの名のもとにいろいろな命令に化ける命令です。似た命令であるSBFMと「対称」と思って見に行くと期待を裏切られます。SBFMであったものが無いです。でも無くても大丈夫。 “ぐだぐだ低レベルプログラミング(76)ARM64(AArch64)、UBFM命令、伸縮自在” の続きを読む

部品屋根性(77) AHT21B、CRC8でのデータ検査を追加。ラズパイPython

calcCRC8
Joseph Halfmoon

前回、I2C接続の温湿度センサ AHT21B をラズパイのI2Cバスに接続し、Python3のスクリプトで温度、湿度を読み取ってみました。まあ動いているみたいではあるのですが、データの伝送に誤りがあるや否やを確かめるためのCRCを検査しておりませなんだ。今回は、CRCの検査を追加しただけ。

“部品屋根性(77) AHT21B、CRC8でのデータ検査を追加。ラズパイPython” の続きを読む

ぐだぐだ低レベルプログラミング(75)ARM64(AArch64)、SBFM命令、変幻自在

SBFM
Joseph Halfmoon

今回は前回に引き続き第72回で調べたビットフィールドMOV命令をエクササイズしたいと思います。今回の命令はSBFM命令(サイン付きBFM)です。SBFM命令の動作説明図を上に再掲載します。しかし図を見てもなんだかよく分からない命令デス。しかしこれが変幻自在、エイリアスの隠れ蓑の下で多数の「重要命令」の実体となります。
“ぐだぐだ低レベルプログラミング(75)ARM64(AArch64)、SBFM命令、変幻自在” の続きを読む

部品屋根性(75) MCP3421、ADCのラズパイI2C接続、Pythonで制御の続き

smbus2EC
Joseph Halfmoon

前回、ΔΣ型の18bit ADコンバータ、MCP3421をRaspberry Pi 3 model B+にI2C接続。しかしPythonで動作テストをする際に「デーモン呼び出し」ていました。今回はPythonのI2Cモジュールを更新し「デーモン呼び出さずに」MCP3421を制御できるようにしてみた「続報」です。

“部品屋根性(75) MCP3421、ADCのラズパイI2C接続、Pythonで制御の続き” の続きを読む

ぐだぐだ低レベルプログラミング(74) ARM64(AArch64)、BFM命令、別名不在

BFM_alias
Joseph Halfmoon

今回は、前々回調べたビットフィールドMOV命令の実習です。最初から躓きました。BFM命令の別名(エイリアス)のBFC命令、アセンブラに拒否られました。実体命令であるBFMは存在しているんですがね。そのくせディスアセンブラは頼みもしないのにBFM命令をBFC命令にディスアセンブルしてくれます。いろいろあるのね、きっと。

“ぐだぐだ低レベルプログラミング(74) ARM64(AArch64)、BFM命令、別名不在” の続きを読む

やっつけな日常(28) Raspberry Pi OS、32bit版から64bit版へ移行

Rpi4S64EC
Joseph Halfmoon

別シリーズでArmの64bitのアセンブリ言語命令を練習中。これにAndroidスマホ使ってました。でも最近スマホの電池の減りが速くて練習しずらいです(You tubeのせい。)そこで32ビットOSで引っ張っているRaspberry Pi 4を64ビットOSに移行しようと決断。簡単ではあるけれどいろいろあるんだ。

“やっつけな日常(28) Raspberry Pi OS、32bit版から64bit版へ移行” の続きを読む

部品屋根性(74) MCP3421、18bit ΔΣADCをRaspberry Piに接続

MCP3421_MCP3425
Joseph Halfmoon

今回はI2Cバスに接続可能なADコンバータです。実験はMicrochip社のMCP3421(最大18bit解像度)です。兄弟チップのMCP3425(最大16bit解像度)もあり、ピンコンパチかつソフトコンパチです。I2Cバスに接続できるのでRaspberry PiのようにADCを持たない機種にも簡単に追加できます。

“部品屋根性(74) MCP3421、18bit ΔΣADCをRaspberry Piに接続” の続きを読む

ぐだぐだ低レベルプログラミング(73) ARM64(AArch64)、MOV命令の実習

movEC
Joseph Halfmoon

前回前々回と実機練習をサボって調べ物をしていたので、今回は練習あるのみです。でも溜まっている数が多いです。今回は、前々回のMOV命令に絞って練習してみます。一通り撫でるだけでも命令数多いです。単なるMOV、転送命令なんだけれども。そう単純でもないんだこれが。

“ぐだぐだ低レベルプログラミング(73) ARM64(AArch64)、MOV命令の実習” の続きを読む

やっつけな日常(25) Goに入ればGoに従え、そんなこと出来るの?ヒープ・エスケープ

memESC_Go
Joseph Halfmoon

前回はRust言語のヒープ管理が「クセが強い」みたいな事を書いてしまいました。「クセが強い」ことでは、Go言語のヒープ管理も負けてない、と思います(個人の感想です。)「ヒープ・エスケープ」という技?を最初みたときには、これは何?と結構驚きました。伝統的なC言語ではやっちゃいけない(やったらひどいことになる)ことがOK。 “やっつけな日常(25) Goに入ればGoに従え、そんなこと出来るの?ヒープ・エスケープ” の続きを読む

ぐだぐだ低レベルプログラミング(72) ARM64(AArch64)、ビットフィールドMOV

SBFM
Joseph Halfmoon

前回、MOV命令の込み入った事情を図にしただけで「実習はまた今度」などと書きました。しかし今回も「また今度」の回であります。MOV命令の親戚?ビットフィールドMOV命令群がこれまた込み入っているためであります。ビットフィールド転送命令と聞くと地味な?感じがしますが、これがどうして非常に多数の命令に化けるのであります。

“ぐだぐだ低レベルプログラミング(72) ARM64(AArch64)、ビットフィールドMOV” の続きを読む