asm
jle を確かめてみる jleというのはJump if less or equal (より小さいか等しい場合はジャンプ)ということで、二つの値を cmp で比較したものに対するジャンプ命令です。ジャンプするというのは分かるのですが、どういう条件だとジャンプするのか分からなか…
久しぶりにアセンブラをいじってみたが、半年前とは振る舞いが異なってしまっていて、すぐにエラーが出てきてしまうのにはちょっと驚いた。nasmでのアセンブラはきちんとできて、リンクまでは正常にできるらしいのだが、コンパイル作業がなかなか上手く行か…
いろいろな人のアセンブルコードを読んでみると、ソースコードに書くべき情報がわかってくる。ライセンスはもちろんのこと、コードをコンパイルするための最低限の手順だ。アセンブラにはたくさんの種類があって、それぞれ特徴があって、互いに互換性があま…
アセンブリについて少ない知識ながらもどういう風にやればよいかという情報体系が整いつつあるようなので、はじめに思っていたことなどからこれからアセンブラを続けるにあたって基本方針を自分の中に確認しておこうと思う。 APIやシステムコールまでには立…
C言語にはアセンブリコードに落とす際に、サブルーチンどうしでどうやって引数を受け渡してもらうかというのがあって、これを呼び出し規約と呼ぶ。一番使っていて簡単なのは__cdeclである。引数は一番目がesp+4で二番目がesp+8と連続していてとても扱いやす…
関数を呼び出すときや呼び出し元に戻るときなどにスタックポインタというものを利用しているらしいのですが、どうもスタックポインタが具体的にメモリ上にどこら辺にあるのか出力させてみなければはっきりとわかりません。そういうことでプログラムを書いて…
C言語でもできることだが、AndとかOrとかXorの計算をアセンブリコードで実装してみる。すべてアセンブリコードでやると入出力なんか考慮しなくてはならないので、関数部分だけアセンブリコードで書く。 logic.asm global _and global _or global _xor sectio…
かなりウェブを探し回ったんだけど、C言語なみとはいかないものかなあ、とちょっとあきらめ気味です。確かにアセンブルソースを手書きで書く人は桁違いに少ないだろうし、そもそもコンパイルがどういうアセンブルソースを出力してくるかおぼろげながらわかる…
NASM用強調表示定義ファイル アセンブリのファイルを秀丸で編集するにはnasm用の強調表示ファイルが用意されているので、これを使うといいかもしれない。ただ、ファイルだけあってインストール方法がわからないのでどうしようもないので、ここにインストール…
use_asm.c /* use_asm() 引数なし版 */ #include <stdio.h> int use_asm(void); int main(void) { printf("use_asm() = %d\n", use_asm()); }asm.s ;; nasm file global _use_asm section .text ;; eaxレジスタの値が返り値になる _use_asm: mov eax, 123h ret という</stdio.h>…
何かとアセンブラについてどういうものかわかり始めた。アセンブラ言語を学ぶ目的は、C言語からアセンブリを呼び出して関数を最適化するためである。メルセンヌツイスターという乱数を高速化するのもやってみたい。 x86アセンブリ言語入門 実際にオブジェク…
あまりアセンブラというものに縁がなかったのだが、やっぱりプログラミングをやっている人間なのでアセンブラをやらずにプログラマになるのはぜんぜんおもしろくもなんともないと思うので、アセンブラに挑戦してみることにする。アセンブラをいじくるやり方…