タグ

機械語に関するmohnoのブックマーク (13)

  • WebAssembly の過去・現在・未来 - Qiita

    はじめに WebAssembly (略して Wasm) では WASI や WIT、 Component Model など様々な仕様があります。 それぞれが登場した背景、モチベーションなどを理解することでなんとなく概要を掴んでいくことができるのではないかと考えたため、過去・現在・未来と時間軸で整理してみました。 まず Wasm とその特徴に関して簡単に紹介した後、Wasm の過去として生まれた背景やモチベーションを紹介します。 そして現在の Wasm がなぜ注目を集めているのか、そして現在策定中の仕様と目指している未来について紹介します。 WebAssembly とはなにか WebAssembly はスタックベースの仮想マシン用バイナリ命令フォーマットの仕様です。Wasm と略されます。 Wasm ファイル(Wasm モジュール)は一般に .wasm という拡張子で表されるバイナリファイル

    WebAssembly の過去・現在・未来 - Qiita
    mohno
    mohno 2023/12/21
    JavaScriptから使える機能が増えれば速度面のアドバンテージは小さくなるし、「Wasmは現在、ブラウザ外での実行環境として注目を集めています」←だったらSilverlightでよかったじゃん、的な。
  • C言語でWasmインタプリタを実装した話

    概要 公式のcore testが全て(UTF8, WAT, SIMD関連のものは除く)通るWasmインタプリタをC言語でフルスクラッチで実装した。自作Wasmランタイムで省略されがちなValidation Stageも実装した。この記事はWebAssembly Advent Calendar 2023の三日目の記事である。 目的 このWasmランタイムを実装するにあたり、「できるだけ仕様に従って実装する」ことを心掛けた。Wasmの仕様書は以下のissueが立つほど読みにくいものとなっているが、ランタイムをどのように実装すべきかが詳しく書いてあり、一応仕様書を頑張って読めばランタイムが作れるようになっている。 この自作Wasmランタイムの目的は、できるだけ仕様に従った実装を与えることで、仕様の理解を助けることである。早さや効率性よりも分かりやすさを優先しているため、実用には向かない。仕様書を

    C言語でWasmインタプリタを実装した話
    mohno
    mohno 2023/12/03
    WASMのバイトコードを実行するんじゃなくて文法を解釈するのか。なんかスゲェ。「WASMランタイムを実装する中で、仕様書にバグや不明瞭な点を見つけて報告した」「WASMの命令は抽象度がかなり高い」←そりゃ理解も進む。
  • https://hccc.contest.seccon.jp/

    mohno
    mohno 2023/09/28
    「人間Cコンパイラコンテスト(HCCC)とは文字通り競技者自身がCコンパイラとなり C言語からアセンブリを生成し,その時間と正確さを競う競技」←意味が分からないとは言わないが、コンテストってほど参加者がいるのか。
  • x86-64機械語入門

    この記事はx86-64の機械語を書けるようになるためのガイドとなることを目指します。読者はアセンブリー言語について既にある程度知っていることを想定します。 情報源 x86-64の機械語のオフィシャルなガイドはIntelのSoftware Developer ManualまたはAMDAMD64 Architecture Programmer's Manualです。 Intel SDM: Intel® 64 and IA-32 Architectures Software Developer Manuals AMD64 Architecture Programmer's Manual, Volumes 1-5 このほか、Cから呼び出される関数を定義したり、Cの関数を呼び出すためには、呼び出し規約の知識も必要です。使用される呼び出し規約はOSに依存し、Unix系では主にSystem V ABI

    x86-64機械語入門
    mohno
    mohno 2023/09/18
    アセンブリ言語、楽しそうだなあ。(もう仕事にできるレベルで書ける気はしないが)
  • strlen() の深淵 - Qiita

    あらまし strlen() という関数がある。御存知の通り、文字列の長さを算出する標準 C ライブラリの関数だ。 やってることは単純で、例えば以下のように実装できる。 size_t strlen_simple(const char* str) { const char* p = str; while (*p) ++p; return size_t(p - str); } '\0' が見つかるまでポインタを進め、初期位置との差分を返すだけだ。これで機能的には std::strlen() と同等である。 では、速度的にはどうだろう?適当にベンチマークを書いて MSVC 2022 でコンパイル&実行するとこうなった。

    strlen() の深淵 - Qiita
    mohno
    mohno 2023/08/07
    今どきのコンパイラは大変だなあ。/インライン展開は速いままだとコード量が増えるんだろうな。
  • 60歳のC++おじさんを派遣で雇ったがなんでも作れて最強すぎる→各地のベテラン技術者さんの話が興味深い

    おにぎり @suiseigan それぐらいのお年でc++ということは、windowsの生apiをガンガンたたくプログラムできたえたんだろうなぁ、、、 twitter.com/shatiku_master…

    60歳のC++おじさんを派遣で雇ったがなんでも作れて最強すぎる→各地のベテラン技術者さんの話が興味深い
    mohno
    mohno 2023/05/21
    今の人は最初が便利すぎる。/C++は11まで。/ポインターはアセンブリ言語の知識が欲しいよね。/昔は掛け算すらシフトと加算で作っていたわけで。/今のCPUにとって効率的なコードを書ける気はしない。/↓FORTRANは一応現役。
  • 6502 アセンブラ プログラミング入門 / 新山 祐介

    概要: この記事では 8ビット CPU 6502 を 使ったアセンブラプログラミングを紹介する。 「アセンブラプログラミング」とは、プログラミング言語を使わず、 CPU のネイティブ命令列を直接書くプログラミング方法である。 6502 はいまから約50年前に開発され、 ファミコンや Apple II など多くのハードウェアで利用された。 しかし、その原理は今日のコンピュータとほとんど変わっていない。 ここでは 6502 のプログラミングを通して、コンピュータの質を学ぶ。 6502 プログラミング入門 コンピュータの原理 レジスタとは 16進数とは 6502エミュレータを使った演習 メモリに値を格納する メモリの値を増加させながらループする アセンブラを使ったプログラミング 最初のプログラム (改良版) アセンブラを使ったジャンプ命令 差分アドレッシング 条件分岐 条件分岐 その2 16ビ

    mohno
    mohno 2023/04/03
    ファミリーベーシックで逆アセンブラ作ったなー。保存する手段がなくて電池が切れてオシマイだったけど。
  • どうして昔の人は8進数でしゃべるのか 「TK80」「Z80」の16進世代が調べたオクタルの歴史

    Kernel/VM探検隊は、カーネルやVM、およびその他なんでもIT技術の話題ジャンルについて誰でも何でも発表してワイワイ盛り上がろうという会です。takeoka氏は、8進数について調査、発表をしました。 よく使う命令は暗記をしていた16進世代 takeoka氏(以下、takeoka):takeokaです。低レイヤー、長い人生、そして……まぁ、格調が低い話をします。 私は16進世代です。若い人にはわからないかもしれませんが、昔はTK-80しかなく、assembleしてくれる機械なんて持っていなかったので、みんなアセンブラ・ニーモニックでバーっとプログラムを書いて、それが終わったらおもむろに16進コードへの変換を手でやっていました。だからよく使う命令は、基的に暗記していました。 あれですね。HLレジスタへのimmediateのloadは「21」とか、Aレジスタへのimmediate loa

    どうして昔の人は8進数でしゃべるのか 「TK80」「Z80」の16進世代が調べたオクタルの歴史
    mohno
    mohno 2022/01/17
    Z80とか80x86の頃はよかったなー(シミジミ)。「僕はARMは嫌です」←ARMは命令長が固定で即値命令がやっかいなんだっけね。
  • ドラゴンクエスト3 ファミリーベーシック任意コード新チャートについて - ピロ彦の何か置き場

    アーカイブはこちらから www.twitch.tv youtu.be ファミコンは電源を入れたままカセットを抜くと、 通常はROMが読み込めなくなってプログラムが動作しなくなる。 しかし、『メモリ上の』プログラムを無限ループで実行している間は ファミコンのカセットを抜いてもCPUは動作し続けているので 別のカセットに差し替えてもコードが実行され続けることになる。 ファミリーベーシックにはファミコンのバイナリーコード(ネイティブコード)を 実行できる『CALL命令』があるため、ファミべ上で任意コード実行することは容易である。 $0300-$03FFには1行分のプログラムバッファが格納されるので CALL773'~というコードを入れてReturnキーかF8を押すと、メモリアドレス$0305(773) つまり「'」以降の文字がバイナリコードとして実行される。 しかし、メモリ上に無限ループを作って

    ドラゴンクエスト3 ファミリーベーシック任意コード新チャートについて - ピロ彦の何か置き場
    mohno
    mohno 2021/12/30
    学生の頃は(もっと平易な)ゲームの解析をしてたこともあるけど、ここまでくると「なんでもあり」ルールの極致感。
  • ハードウェアの知識が無い人向けのアセンブリ言語の話(draft)

    記事は書きかけなので内容(タイトルすらも)は随時書き換わっていきます。ドラフトのうちは内容の正確性や文書全体としての整合性についても荒っぽい部分が多々あります。ご容赦ください。 はじめに 記事はソフトウェア開発者がハードウェアに近い低レイヤといわれる領域に入門するとき、とくにアセンブリ言語に出会ったときにつまずきがちなことを紹介します。主な対象読者はJavaScriptPythonなどのスクリプト言語などによるアプリ開発からソフトウェア開発に入った、それより下のレイヤになじみのない人です。 筆者は常々アセンブリ言語は技術的にものすごく難しいわけではないものの、学習につまずく人が非常に多いという印象を持っています。その主な原因の一つは、みなさんが普段慣れ親しんでいる人間に使いやすいように作られた高級プログラミング言語(以下高級言語)と、機械に解釈させやすいように作られているアセンブリ言

    ハードウェアの知識が無い人向けのアセンブリ言語の話(draft)
    mohno
    mohno 2021/01/13
    「筆者は常々アセンブリ言語は技術的にものすごく難しいわけではないものの、学習につまずく人が非常に多い」←x64(というか近年のCPU)は難しいというか、手を出す気にならない。もう最適化はコンパイラに任せたい。
  • ArmにあるというJavaScript専用命令とは何か、あるいは浮動小数点数を整数に変換する方法について - Qiita

    // gcc-10 -march=armv8.3-a arm-jcvt.c という風にコンパイル #include <stdio.h> #include <math.h> #include <inttypes.h> #include <arm_acle.h> // Prototype: // int32_t __jcvt(double); #if defined(__GNUC__) __attribute__((noinline)) #endif int32_t cast_double_to_i32(double x) { return (int32_t)x; } int main(void) { printf("(int32_t)(-2.8) = %" PRId32 "\n", cast_double_to_i32(-2.8)); printf("(int32_t)1.99 = %" P

    ArmにあるというJavaScript専用命令とは何か、あるいは浮動小数点数を整数に変換する方法について - Qiita
    mohno
    mohno 2020/11/30
    「ArmにあるというJavaScript専用命令」←ナニソレ?と思ったら「Armv8.3に FJCVTZS という命令を導入しました。命令名の J はJavaScriptのJです」←マジか。
  • スクリプト言語を舐めてはいけない|shi3z|note

    おれはハッカーだ。 なので、ハッカーではない人種と呑むのが苦手である。 たとえば「ITエンジニア」と自称するような人たちだ。 当然だが、ITエンジニアと自称する人はハッカーではない。 ITエンジニアと言う言葉はスコープが広すぎていちいち細かい説明を聞かなければならない。 これが厄介なところである。 あるとき、友達の家で飲み会をすると言われ、誰が来るの?と聞いたら知らないIT関連会社のエンジニアたちだという。 エンジニアと呑むと喧嘩しちゃうので断ったのだが、いろいろあっていくことになってしまった。 するとやっぱりこんなはなしをしていた。 「やっぱ私もRubyみたいなスクリプト言語なんか卒業してコンパイル言語やんなきゃ。処理速度がね…」 「コンパイル言語って?」 「TypeScriptとかJavaとかC#とか」 「それ、中間コード言語じゃねえか。なんの意味があるんだ。YARV知らないのか」 ま

    スクリプト言語を舐めてはいけない|shi3z|note
    mohno
    mohno 2020/09/20
    コンパイル言語に「TypeScript」を挙げちゃうのは、ハッカーどうこうというレベルじゃない。あと、Visual Basic(というかBasic)の時代から「役立つ場面」はあった。moritanも全部をアセンブリ言語で書いてたわけじゃない。
  • 昔のPC雑誌の付録のゲームのインストール方法パネえww : 2のまとめR

    2010年06月10日 ➥ 昔のPC雑誌の付録のゲームのインストール方法パネえww 202 comments ツイート 236:アベハゼ []:2010/06/09(水) 23:42:39.31 ID:gbSsZtIU ゆとりの俺には信じられないんだけど 昔のコンピューター雑誌のゲームの付録って 数ページにわたってマシン語のコードが紙面に印刷されてただけってほんと? 240:ウグイ(兵庫県) []:2010/06/09(水) 23:44:51.47 ID:jggGj5zx >>236 間違い 数十ページだわ おかげで右手打ち 247:ノコギリエイ(静岡県) []:2010/06/09(水) 23:48:16.91 ID:pcfmxUvq >>240 ゲームやりたかったらマシン語数十ページ分も間違いなくうつのかよw マジキチ過ぎる 打ったゲームはどこに保存するの? 258:ウグイ(兵庫県)

    昔のPC雑誌の付録のゲームのインストール方法パネえww : 2のまとめR
    mohno
    mohno 2010/06/12
    懐かしいな。ただ遊ぶための16進数と思うか、逆アセンブルして解析しようと思うかで、その後の人生が変わるんだよ:-D
  • 1