asm

アセンブラ命令のjle の使い方

asm

jle を確かめてみる jleというのはJump if less or equal (より小さいか等しい場合はジャンプ)ということで、二つの値を cmp で比較したものに対するジャンプ命令です。ジャンプするというのは分かるのですが、どういう条件だとジャンプするのか分からなか…

アセンブリ作業中でエラーになる?!

Asm

久しぶりにアセンブラをいじってみたが、半年前とは振る舞いが異なってしまっていて、すぐにエラーが出てきてしまうのにはちょっと驚いた。nasmでのアセンブラはきちんとできて、リンクまでは正常にできるらしいのだが、コンパイル作業がなかなか上手く行か…

アセンブルコードに書くべきもの

asm

いろいろな人のアセンブルコードを読んでみると、ソースコードに書くべき情報がわかってくる。ライセンスはもちろんのこと、コードをコンパイルするための最低限の手順だ。アセンブラにはたくさんの種類があって、それぞれ特徴があって、互いに互換性があま…

アセンブラをやる基本方針

asm

アセンブリについて少ない知識ながらもどういう風にやればよいかという情報体系が整いつつあるようなので、はじめに思っていたことなどからこれからアセンブラを続けるにあたって基本方針を自分の中に確認しておこうと思う。 APIやシステムコールまでには立…

使うのが最難関に近い呼び出し規約の__fastcallであった

asm

C言語にはアセンブリコードに落とす際に、サブルーチンどうしでどうやって引数を受け渡してもらうかというのがあって、これを呼び出し規約と呼ぶ。一番使っていて簡単なのは__cdeclである。引数は一番目がesp+4で二番目がesp+8と連続していてとても扱いやす…

スタック操作でスタックポインタの位置を見る

asm

関数を呼び出すときや呼び出し元に戻るときなどにスタックポインタというものを利用しているらしいのですが、どうもスタックポインタが具体的にメモリ上にどこら辺にあるのか出力させてみなければはっきりとわかりません。そういうことでプログラムを書いて…

論理計算をしてみる

asm

C言語でもできることだが、AndとかOrとかXorの計算をアセンブリコードで実装してみる。すべてアセンブリコードでやると入出力なんか考慮しなくてはならないので、関数部分だけアセンブリコードで書く。 logic.asm global _and global _or global _xor sectio…

いくらさがしてもあまりアセンブラの資料が見つからない

asm

かなりウェブを探し回ったんだけど、C言語なみとはいかないものかなあ、とちょっとあきらめ気味です。確かにアセンブルソースを手書きで書く人は桁違いに少ないだろうし、そもそもコンパイルがどういうアセンブルソースを出力してくるかおぼろげながらわかる…

nasmファイル編集が楽になるように

asm

NASM用強調表示定義ファイル アセンブリのファイルを秀丸で編集するにはnasm用の強調表示ファイルが用意されているので、これを使うといいかもしれない。ただ、ファイルだけあってインストール方法がわからないのでどうしようもないので、ここにインストール…

実際にコードを書いてみる

asm

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>…

アセンブラまとめ

asm

何かとアセンブラについてどういうものかわかり始めた。アセンブラ言語を学ぶ目的は、C言語からアセンブリを呼び出して関数を最適化するためである。メルセンヌツイスターという乱数を高速化するのもやってみたい。 x86アセンブリ言語入門 実際にオブジェク…

はじめてアセンブラに挑戦してみる

asm

あまりアセンブラというものに縁がなかったのだが、やっぱりプログラミングをやっている人間なのでアセンブラをやらずにプログラマになるのはぜんぜんおもしろくもなんともないと思うので、アセンブラに挑戦してみることにする。アセンブラをいじくるやり方…