福野泰介の一日一創

電波と電波法の知識が必須な無線マウスではなく、手軽に改造できる有線マウスを使ってデバイスづくりに挑戦!

マウスの左クリックをIchigoJamからOUT1/OUT0でプログラム制御し、IchigoJamのプログラムをPCに転送実験、成功です!


DAISOで300円、有線USBマウス。


ネジ一本で分解できます。シンプルな基板!ボタン用のマイクロスイッチが3つ、ホイールの回転を検知する部品、USBマウスの機能と移動量を検知する部品が一体化したものなど。


基板、裏面です。回路を目でも簡単に追えます。どこがGNDか調べるところからはじめるのがオススメです。PCを壊してしまわないよう、接続しない状態でまずは調べましょう。


ボタン3つをジャンパーとコネクタで横取りします。これを好きなスイッチに接続することで、オリジナル入力デバイスのできあがりです!大きなボタン、足で押すフットスイッチ、力がいらないマイクロスイッチなど、いろんなスイッチをつなげて遊べます。


左クリックをIchigoJamのOUT1につなげば、OUT1で離した状態、OUT0で左ボタンを押した状態になります。 IchigoJamのプログラムからマウスのボタン操作、自由自在!

IchigoJamのプログラムが記録されているメモリ、16進数で #C00 から、容量分、マウスクリックでPCに転送してみましょう。
mousereceiver」は、まずはマウスの押された時間を計測し、その長さをシリアル信号8bit分の長さとして使って、その後のON/OFFを解釈し、画面にIchigoJamのプログラム形式で出力します。 モールス信号の如く、手でも実験できるので、何度かカチカチ、押してみましょう。


プログラムを使えば、正確に転送することができます。送信時間の単位を W で設定。長くしたり、短くしたり実験してみましょう。

100 W=4:OUT0:WAITW*8:OUT1:WAITW*8:FORI=0TO1024-FREE():C=PEEK(#C00+I):?HEX$(I,3),BIN$(C,8),C:FORJ=0TO7:OUT!(C>>J&1):WAITW:NEXT:NEXT:OUT0:WAITW:OUT1

いろんなデバイスの改造、楽しいですが、無線機器の改造は電波と電波法の知識が必要になるので、注意しましょう。
(参考、DAISOの300円無線マウスを改造して、ワイヤレスかんたん入力マシンが創れる!? → 不推奨です

DAISOで発見、なんと300円のUSB無線マウス!改造してオリジナル入力デバイスが(追記、技術的には)作れちゃいます(追記、が、気軽に作成すると電波法違反になる恐れがあるため、当初タイトル「無線、かんたんに創ろう!」は誤りでした、すみません)。

※追記、下記の改造は電波法違反になる恐れがあるので推奨できないことがわかりました。 微弱無線局に該当するレベルまで電界強度を下げるなどの対応が必要です。 サーボを使って物理的に押すなど、分解を伴わない工作による製作や、無線の代わりに有線マウスの改造をオススメします。
DAISOの300円有線マウスを改造して、かんたん入力マシンを、かんたんに創ろう! + IchigoJamプログラム転送

ボタンをカスタマイズして、自分だけの入力デバイスに!(追記、有線マウスの使用を推奨します)


なんと、300円!(税込み330円)


300円で無線USB、一体どんなチップを使っているのでしょう?
Umbrella ダイソーのワイヤレスマウス」チップはTelink社製、ちゃんとしてそう
【100均分解】ダイソーの「324円無線マウス」|ThousanDIY (Masao Yamazaki)|note」部品やチップパタンの露出まで、詳細な分解レポート!
普通にmacOSでもマウスとして使えました!


かんたん分解、ネジがないので、ドライバーすら不要。単4電池2本で動きます。


左ボタン、右ボタン部分にあるマイクロスイッチ、裏面をジャンパー線でくっつけてみると、PC画面でクリックします。(追記、電界強度が微弱無線局の範囲を越えていると電波法違反の恐れアリ)


左クリックの場所に、2箇所はんだづけ。必要に応じて、右クリック、センタークリックもどうぞ。GNDは共通でOK!


マウスの左ボタンを押すという動作 = チップ内部でプルアップされた該当信号がGNDになること = ジャパンパーの2本が接すること


手元のボタンを自由につないでPC用の入力インターフェイスとして使えます!(追記、電界強度が微弱無線局の範囲を越えていると電波法違反の恐れアリ)

操作が難しい場所での入力インターフェイスや、障害者用の専用入力デバイスの自作にも良さそうです。 IchigoJamなどにつないで、プログラムで動かしてみるのもおもしろそう! (追記、電界強度が微弱無線局の範囲を越えていると電波法違反の恐れアリ)

安くて、簡単で、ワクワクする部品が詰まっているなので、分解入門にも最適!
(追記、入力インターフェイスづくりは、有線マウスの改造をオススメします)

追記、技適と電波利用について

DASIOで300円、Bluetoothリモートシャッター。スマホとペアリングして、遠隔でシャッターが操作できます。


裏面に記述されているこのマークと番号(R201-170383)が技適(技術基準適合証明)です。 「201-170383」で、検索すると「第2条第19号に規定する特定無線設備」つまり「2.4GHz帯高度化小電力データ通信システム」として登録されていることがわかります。


電波をアルミホイルなどでシールドし、微弱無線局の規定を満たすことができれば、使用することは可能かと思います。 質問、疑問点は、お近くの総合通信局(福井の場合は、北陸総合通信局)へお問い合わせください、とのことです。(総務省 電波利用ホームページ|電波監視|技適マーク、無線機の購入・使用に関すること

links
- 総務省 電波利用ホームページ|電波監視|技適マーク、無線機の購入・使用に関すること(技適マーク付き無線機の改造について)
- 技適? 微弱無線? 今さら聞けない電波法規の基礎知識 | Think IT(シンクイット)
- 総務省 電波利用ホームページ | 技術基準適合証明等を受けた機器の検索
- DAISOの300円有線マウスを改造して、かんたん入力マシンを、かんたんに創ろう! + IchigoJamプログラム転送

常設したIoT温度計とねこ観察の結果、家の温度を20度以上に保つことの重要さが分かった。
常設する温度計として、昔買った iPad mini を活用!

IchigoOndo for ES5
IchigoSodaなど、sakura.ioを使って、温度データを送り、sakrua.io の DataStore API からデータを取得し、グラフ表示化webアプリ。 せっかくなので時計を付けて、時計化したところ更に便利に!


iOS9.3.5のまま止まった古いiPad miniなので、以前作ったものはJavaScriptのES7というバージョンの機能を使っているためそのまま動かず。

ES8(ES2017)から対応の非同期処理をシンプルに記述する async/await を昔ながらのコールバックに戻し、ES6から対応の変数の宣言 let/const を古い表記 var にすべて置換で動きました!

TypeScriptで記述し、ターゲットをES5にして、polyfillでうまいことやってもらうのも手かもしれない。(参考、Typescriptのtargetについて調べてみた - 豆腐とコンソメ

古いとは言え、ネットにつながり,高精細なフルカラーをグリグリ動かせる旧タブレット、時計や、情報端末として活かしてみるのもいいですよ!
(参考、一日一創2012 時計、時間カテゴリー


timeter
2020年、5%過ぎました!

めがね産業高度化に向けた4者提携、前夜の作戦会議時の3D写真!

平行法で立体に見えます。VR用の3Dテクスチャーとしても使えます。
(参考、福井高専、KDDI、jig.jp、エル・コミュニティ、地域産業高度化に向け提携 | 2019年 | KDDI株式会社


撮影機材、Insta360 EVO、レンズ2つでステレオ撮影!(折り曲げて360度カメラにもなる)


裏面は何もなし!撮影時の気分は、昔なつかし写ルンです!


スマホのアルバムへエクスポートしたままの写真はこちら。


中心部をクロップ(切り出し)するといい感じの3D写真になるので、Pythonで切り出しプログラム「crop3d.py」づくり。

import os import sys import PIL.Image if len(sys.argv) < 2: print("crop3d [input jpg file] [output jpg file] (ratiow) (ratioh) (offx) (offy)") sys.exit() f = sys.argv[1] fo = sys.argv[2] if len(sys.argv) > 2 else f ratiow = float(sys.argv[3]) if len(sys.argv) > 3 else .6 ratioh = float(sys.argv[4]) if len(sys.argv) > 4 else ratiow offx = float(sys.argv[5]) if len(sys.argv) > 5 else 0 offy = float(sys.argv[6]) if len(sys.argv) > 6 else 0 src = PIL.Image.open(f) iw, ih = src.size iw2 = int(iw / 2 * ratiow) ih2 = int(ih * ratioh) dst = PIL.Image.new(src.mode, (iw2 * 2, ih2)) x = iw // 4 + int(iw2 * offx) y = ih // 2 + int(ih2 * offy) iml = src.crop((x - iw2 // 2 , y - ih2 // 2, x + iw2 // 2 + 1, y + ih2 // 2)) imr = src.crop((x - iw2 // 2 + iw // 2, y - ih2 // 2, x + iw2 // 2 + iw // 2 + 1, y + ih2 // 2)) dst.paste(iml, (0, 0)) dst.paste(imr, (iw2, 0)) dst.save(fo, 'JPEG', quality=95, optimize=True)

画像加工はPillowを使用(参考、Pillowに関する情報 | note.nkmk.me


パラメータで切り出す大きさ、縦横のオフセットを元画像サイズ比で指定。
レンズ間がそんなに広くないので、遠景のステレオ感は薄め。


月イチ開催、会社のランチ会のデザート付属のドライアイス。この距離感、いい感じ!

広角化、多眼化するスマホのカメラ、ぜひVR180対応、できればインカメラも180度広角化して、360度対応してほしい。

オープンデータ活用アプリ、地図アプリ入門でも紹介しているGPSを使った現在位置利用。シンプルに現在位置の近くの文化財5つ星オープンデータを検索して、表示するアプリ「near」を手直し公開。
near - 近くの文化財
キャンセルすると鯖江駅の近くが表示されます。新宿区内でお試しください!文化財オープンデータに画像URLデータを追加いただけば、写真も表示されるように作ってあります。


新宿区役所にてオープンデータ研修。議場にもなる会場にて。切り株を使ったマイク台がユニーク。


オープンデータの活かし方 創ろう、世界最先端国家(PDF)
スライドもオープンデータです。オープンデータにするのは簡単、クリエイティブコモンズ表示(CC BY)と明示するだけ。次の一歩の5つ星オープンデータ化は、odpを使えばExcelから自動的に変換、世界中の開発者がSPARQLというAPIを使ってアクセスできるようになります。

個人情報は、本人の許可なくオープンデータにはできません。広く伝えたいことは積極的にオープンデータ化検討しましょう。 オープンデータが悪用されるリスクが気になる方、データを提供する側に責任は無いので、心配する必要ありません。 間違って伝わらないよう、いつ時点のデータなのかを明記しましょう。


情報システム課長による講演「データの時代」
21世紀の最重要インフラはオープンデータ。多国籍でIT企業多い新宿区、新しい取り組みに期待です!

プログラミングの経験が一切なくても5分で地図を使ったオリジナルアプリが無料で作れて、公開できます!

今年も開催、地理情報を楽しく活用するイベント「Geospatial Hackers Program
アプリづくりに興味がある方、G空間ハッカー、はじめのいっぽは簡単ですよっ!
総務省|令和元年度「Geospatial Hackers Program」の開催≪地理空間情報を活用可能な人材の裾野拡大に向けたハッカソン等の開催≫


こちらサンプルアプリ「京都いらすとマップ
準オープンデータとして紹介に使わせてもらっている「いらすとや」さんのイラストから京都で検索したG空間っぽいいらすとをアイコンとして緯度経度と合わせて設置しました。
全国、全世界のランドマークがかわいくマップにでて、詳細が辿れたりするのもおもしろそうですね!

どのように作ったか?
画像を icon フォルダにアップロード(Upload files)して、該当緯度経度や名前と共に addIcon 命令を並べるだけ!

map.setZoom(11) map.panTo([ 34.985234, 135.758595 ]) // 京都駅 map.addIcon(34.987522, 135.759335, "京都タワー", "icon/landmark_tower_kyoto.png", 64) map.addIcon(34.980837, 135.767639, "鴨川", "icon/thumbnail_bg_kamogawa.jpg", 64) map.addIcon(35.023115, 135.803829, "五山の送り火", "icon/landmark_gozan_okuribi.png", 64) map.addIcon(35.010324, 135.768301, "本能寺", "icon/landmark_honnouji.png", 64) map.addIcon(34.967021, 135.774746, "伏見稲荷の鳥居", "icon/landmark_fushimi_inari.png", 64) map.addIcon(34.988047, 135.771754, "三十三間堂", "icon/kankou_sanjusangendou.png", 64) map.addIcon(34.994875, 135.784959, "清水寺", "icon/kankou_kiyomizudera.png", 64) map.addIcon(35.039527, 135.728476, "金閣寺", "icon/kankou_kinkakuji.png", 64) map.addIcon(35.026885, 135.798276, "銀閣寺", "icon/kankou_ginkakuji.png", 64) map.addIcon(34.889282, 135.80766, "平等院鳳凰堂", "icon/kankou_byodoin.png", 64)

いろんな地図アプリづくりに慣れてきたら、5つ星オープンデータを操る、SPARQL(スパークル)にもぜひ挑戦してみてください。 まだまだデータが不足していますが、みなさんのアプリひとつひとつがデータ拡充への原動力です!

東海(2/1-2)、北陸(2/8-9)、関東(2/15-16)、沖縄(2/22-23)、各地イベントにもぜひ足を運んでみてください! 位置情報を使ってどんなアプリがあるとおもしろい!?みんなで考えて作ってみましょう!


ハンズオン資料はこちら「はじめてのマップアプリとSPARQL(スパークル)(PDF)
プログラミングの予備知識一切なしでOK、メールアドレスひとつあればどなたでも地図アプリ、作れます!
GitHubのアカウント取得から、サンプルアプリのコピー(GitHubではforkと呼ぶ)、ブラウザ上での編集、公開まで手取り足取り(ハンズオン)で解説しています。(詰まったら箇所、サポートしますので @taisukef までDMやメンションでお知らせください)


動画で学ぶ派の方向けに、都内スタジオにて解説動画、収録してきました!


カメラ目線でスライドが見える、プロンプターが便利でした!
近日、公開される予定です。
おたのしみに!

学生生活、何をして過ごせばいいのだろう?
オススメは何でもいいので、何か創って見せてみること。反応がなくても悪くても気にしなくてOK。 熱い先生、変なことをやってる友達や先輩たち(含む、私)がオススメです!

木更津高専にお呼ばれして、講演&起業アイデア講評会。
千葉県、災害によって露呈した、独居高齢者とのコミュニケーション断絶問題。
スマホでは解決できない問題に、電子ペーパーで切り込むアイデア

Code for Kosen として活動スタートしているのはなんと2年生!
市役所や高齢者とのヒアリングを重ね、プロトタイピングを進めていると聞いて感動!
高専OBとして、オープンデータ伝道師として協力しない手はない。

館山市安全・安心メールバックナンバーをスクレイピングして表示するアプリ例
舞台となる館山市、お知らせ情報はオープンデータ化されていないので、ひとまずイメージとして実現するためのAPIを作りかけてみました。 「館山市安全・安心メールバックナンバー」のHTMLから本文を抜き出し、JSONデータにする node.js用、JavaScriptのプログラムです。

const main = async function() { const data = await getNotices() const json = JSON.stringify(data) console.log(json) fs.writeFileSync('notices.json', json) }

(port of makenotices.js / src on GitHub)
お知らせを全件取得し、JSON化して、表示して、ファイルに保存。HTMLのパースには、cheerio を使用。Node.js を入れた後、次のコマンドでインストールできる。(なければ、web取得のrequestも)

npm install cheerio npm install request

ひとまず、fukuno.js を使って、そのまんま表示しているだけのフロントのプログラム。好みのフレームワークを使ったり、使わなかったりして、使い勝手良いアプリに仕上げてみよう!

<body> <script src=https://fukuno.jig.jp/fukuno.js></script> <script> window.onload = async function() { const notices = await (await fetch('notices.json')).json() console.log(notices) dump(notices) // fukuno.js } </script> </body>

webアプリはじめのいっぽ」で、いろいろ作り込んでみよう。
サーバーサイドでプログラムを動かし、公開したくなったら「はじめてのウェブサイト with Heroku」をどうぞ!


欲しいアプリ、自分で作って、かわいい自分だけの名前を付けましょう!


熱い、木更津港先生!創造は最大の学習なり!


起業アイデアコンテストにも飛び入り発表した、電子部品タワーバトル!
電子部品好きが増える=高専生が増える=全国の高専=世界中の工学系の学校が喜ぶ!


どんなアプリか、デモしてくれたときの様子をコンパクトに編集してみました。
自分の動きが画面内のかわいい電子パーツに反映され、連動するスマホのボタンを押して落下、2人交代でタワーを作っていき、落としてしまったら負け。 楽しく電子パーツと仲良くなれそう!


木更津高専発、一般社団法人prane.jpn(プラネジャパン)
学内で必要なサービスを開発して、提供するしくみ、おもしろい!


with jigインターンOB!(興味ある高専生、事前登録をどうぞ!)


Be Creative.


熱い高専に熱い先生あり、木更津高専、谷井さん&米村さん!
統計とオープンデータとVR、おもしろいですよ!(世界人口VR首都圏電車VR

かわいく思えるようになったx86マシン語、深みにハマって行き着いた「アセンブラ短歌
57577の5行、31byteで動くマシン語で、2byte以上の命令が行をまたいではいけないというストイックなルールが良い!

一句詠んでみました。

68 57 61 6B 61 31 C0 68 6D 62 6C 79 68 41 73 73 65 89 E1 6A 0C 51 6A 01 50 B0 04 CD 80 EB E1

タイトル「WakaAssembly...」 (x86/macOS Mojabe 32bit)

コンピューターの凄さを一番すぐに感じられるのは、繰り返し。 人間では不可能な速さで正確無比に繰り返される様を見せつけ、それが自分の指示によるものだと体感したものを虜にしてしまう。 (参考、IchigoJam BASIC のプログラム、RUN on IchigoJam web by WebAssembly

10 PRINT "WakaAssembly"; 20 GOTO 10

アセンブラ和歌アセンブラ和歌と繰り返しから誕生した、WakaAssembly、WebAssemblyっぽくて輸出しやすいかも。

CatalinaにOSアップデートで動作しなくなってしまう、macOS最後の32bitアプリの記念に。

x86マシン語(アセンブリ言語)で書かれたソースはこちら

00000000 <_main>: 0: 68 57 61 6b 61 push 0x796c626d 5: 31 c0 xor eax, eax ; eax = 0 7: 68 6d 62 6c 79 push 0x65737341 c: 68 41 73 73 65 push 0x616b6157 11: 89 e1 mov ecx, esp 13: 6a 0c push 12 ; length 15: 51 push ecx ; buffer 16: 6a 01 push 1 ; stdout 18: 50 push eax ; dummy 19: b0 04 mov al, 4 ; sys_write 1b: cd 80 int 0x80 ; syscall 1d: eb e1 jmp _main

pushで一度に4文字分、直接詰めるのがさすがCISC!jmp _mainで先頭へジャンプし、繰り返すたびにスタックを積み続けるので Segmentation faul を出してちゃんと止まり、現代OSのありがたみを感じる。(bits 32 として、32bitモードでのアセンブルが必要)

行儀よく、スタック位置を合わせ ret で 0 を返して終わるバージョン main-1shot.s、31byteのバイナリを和歌表示するために作ったミニプログラム wakaout.c もあります。
詳しくは「x86asm/wakaasm src on GitHub」で!

links
- アセンブラ短歌 - 坂井弘亮 / slideshare
- 「オープンソース」を使ってみよう (第33回 アセンブラ短歌)
- 31バイトでつくるアセンブラプログラミング ~アセンブラ短歌の世界~ Kindle版
- 「57577」の機械語を詠む「アセンブラ短歌本」まとめ - Togetter
- 根っこは同じ! Z80経験者によるx86マシン語はじめ、512byte bootBASIC をmacOS用に移植

マシン語秘伝の書を片手にx86マシン語入門が楽しい。Z80と8086のレジスタ対応表、根っこが同じと分かれば怖くない。 どちらの設計にも深く関わる、嶋正利さん

512byteのブートセクターに収まりブートする、x86マシン語で書かれた「bootBASIC」を発見! 世界最小のチェスプログラムの作者でもある、nanochessさんによる著作「Programming Boot Sector Games (PDF ver.)」を片手に、x86の入門として、16bitのリアルモード向けのbootBASICをmacOSの32bitアプリへと移植。


パスカルの三角形が動いた!


bootBASICは、使える命令も最小限、マルチステートメントもなしのシンプルなBASIC。固定メモリを使っていた元のコードを .data セクションに移して、si/diを32bit化したesi/ediに変更、BIOSの代わりに syscall を使う形にしてできあがり。 アセンブリ言語を使った開発は、アセンブラ nasm によって瞬時にバイナリ化され、即動作。スピード感が気持ちいい。


「Pascal's Triangle」 RUN on IchigoJam web
bootBASICの構文は、IchigoJam BASICにも使えるので、サンプルのプログラムそのままで動いた、パスカルの三角形!


bootBASIC_32bit src on GitHub
現在、Mac用のみ。


Programming Boot Sector Games (PDF ver.)」
1KBの半分、512byteにコンパクトに収めるためのマシン語の基本や、テクニックなど丁寧に解説された本がステキでした!

32bit化でEが付き、64bit化してRが付きと拡張されはしてますが、8bitの名機Z80(1976年)や、16bitアーキテクチャーの王様8086(1978年)の面影、しっかり残ってます。

Z80マシン語でブイブイいわせた人、最近の重量級開発環境が苦手な人、言語の流行り廃りに疲れた人、アセンブラによる超軽量開発で、マシン語でしか到達できない世界を切り開くとかどうでしょう?

links
- 41年経った今でも使える、いにしえのx86マシン語AAAをMacで動かす
- x86 - Wikipedia
- x64 アセンブリーの概要 | iSUS

Intel 8086から現代のCore iシリーズまで、脈々と続くx86アーキテクチャ。実は、誕生1978年と私と同い年。RISC-Vのシンプルさと合わせて引き合いに出される古の命令「AAA」を動かしてみました。


参考図書「8086マシン語秘伝の書 単行本 – 1990/10 by 日高徹氏、青山学氏
MSXでマシン語を使ってみたくて買った「Z80マシン語秘伝の書」の8086版! 16bit CPUである8086向けに、変更、セグメントなどx86ならではの項目が追加されている。Z80同様、古典と思いきや、普通に現代のMacでも普通に使えてしまうことに驚きます。

AAA命令もちゃんと載ってました!
2進法/16進法が基本のコンピューターと、10進法が基本の人をつなぐ命令の一つ。0から15までの数を2byte2桁表現にしてくれる便利命令でした。(src on GitHub)

_main: mov eax, 0 main_loop: push eax clc ; reset carry flag AAA call putnumhex pop eax inc eax cmp eax, 16 jne main_loop mov al, 0 ret

こちら実行結果

0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 0100 0101 0102 0103 0104 0105

こちら0から15までをAXレジスタにセットして、AAA命令を通した結果です。確かに2byteになってくれると表示しやすくて便利です。

このような基本的な部分は一度作ってモジュール化してしまえば、再度作る必要はないので、専用の命令はリソースの無駄になります。 実際、x86アーキテクチャでも64bit環境ではAAA命令は削除されているので、上記プログラムは32bitモード(-f macho32)でコンパイルしています。(syscallの呼び出し方も違うので注意!)


こちら、8086マシン語秘伝の書から、144倍するという定数による掛け算を分解してする高速化するテクニック(main.s src on GitHub

SHL AX, 1 SHL AX, 1 SHL AX, 1 SHL AX, 1 MOV BX, AX SHL AX, 1 SHL AX, 1 SHL AX, 1 ADD AX, BX

144倍=128倍+16倍であることを利用して、シフトと足し算命令を使って実現しています。8086には掛け算命令MULがあるにも関わらずなぜこのテクニックが必要だったか?

秘伝の書記載の仕様によると、16bitの掛け算(MUL)にかかるクロック数はなんと118〜133。1bitシフト(SHL)も9クロックかかるとはいえ圧倒的に速いわけです。 現代CPUは掛け算も足し算も1クロックで終了するので、このテクニック自体は不要です。

そういえば、なぜわざわざ1bitずつシフトしているのでしょう?

SHL AX, 4 MOV BX, AX SHL AX, 3 ADD AX, BX

と書けばもっと短く、高速です。実は、この元になったZ80マシン語秘伝の書でも同じ内容があって、Z80には1bitシフトしかないので、ベタ移植したままになってしまったと想像。(追記、・・・違いました。8086にはイミディエイトのシフトは1限定。上記は80186から加えられた命令でした。 thanks! > @fujitanozomu

MOV CL, 4 SHL AX, CL MOV BX, AX MOV CL, 3 SHL AX, CL ADD AX, BX

8086命令を使って、このように書くこともできますが、2クロックで終わる1bitシフトと比較し、CLを使ったシフトは 8+4N クロックと遅く、速度を取るなら秘伝書記載の通りが正解でした。

コンピューターの特性を知り、いかに活かすか、今でも大事な基本ですね!
普段使っているCPUに近づくマシン語の世界、こちらのサンプルや入門をどうぞ!(x86asm src on GitHub

links
- 日本人が創ったCPUの歴史、MacのCPU Intel 64 マシン語はじめのいっぽ
- ハンドアセンブルで高速計算! RISC-V、RV32ICエミュレーターのC言語実装
- はじめてのマシン語 - IchigoJamではじめるArmマシン語その1

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY 福野泰介 - Taisuke Fukuno / @taisukef / アイコン画像 / プロフィール画像 / RSS