絞り込み条件を変更する
検索条件を絞り込む

すべてのカテゴリ

5 件中 1 - 5 件表示
カバー画像

Lazarusで学べるx86アセンブラ

 作ったプログラムのデバッグをするとき、アセンブラが読めると便利です。 少しだけ高速化したい時 ObjectPascalで表現出来ない数式がある時 インラインアセンブラは強力な武器になります。そんな目的に実はDelphiやFreePascalは便利です。デバッガーもサポートしてくれます。単体のアセンブラで試すのは色々と事前準備から必要ですからね。アセンブラの表記や機械語そのものの知識は検索すれば得られるので検索に必要な用語を学ぶ程度のお話となります。逆アセンブラを見る1 見たいソースのブレークポイントを設定します。  ⇒行番号表示の左側をマウスクリックするか F52 実行した後そこでブレークして表示されないなら       表示→デバッグ表示→アセンブラ 試しに pascalには shr はあるのに asrが無いので 除算で代用したのでInt32((Int64(x) * Int64(y)) div $1000000)のアセンブラ結果   movslq -0x8(%rbp),%rax ;//32bit>64bit符号拡張    movslq -0x10(%rbp),%rdx ;    imul %rdx,%rax ;//64bitx64bit->rAX+(rDX shl 64)    mov %rax,%rdx ;    sar $0x3f,%rdx ;//MSBで63bitを埋める    and $0xffffff,%rdx ;//結果、負数の時だけ $ffffff    add
0
カバー画像

計算で効果音を作る2(Lazarusで直接試したい人)

準備 お付き合いいただく前に準備してほしいこと。まずはLazalusのインストール ですIDEは日本語に設定します   [Tools]-[Options]「IDE Options」窓でEmviroment-General 右上のLanguage をJapanese[Ja]でOKボタンでLazalus再起動 必要な追加すべきパッケージはACSです インストールされてるパッケージに[laz_acs 3.03] [laz_acs_lib 3.03]がある状態が必要です IDE[パッケージ(c)]に[Online Package Manager]が無ければ  IDE[パッケージ(c)]-[パッケージをインストールもしくはアンインストール]よりOnline Package Managerインストール IDE[パッケージ(c)]-[Online Package Manager] 便利 jcfidelazarus をパッケージに追加しておけば"Ctr+D"で全行の整形をDelForExのようにしてくれます。IDEオプションにJCF整形設定があり細かな設定も可能です ダウンロードしたacsパッケージは C:\lazarusではなくC:\Users\自分の場所\AppData\Local\lazarus\onlinepackagemanager\packages にあります。ここに説明も demosフォルダにサンプルもあり ".lpi" をクリックすればLazarusが開きますからお試し下さい。DirectX系のソースも入ってるようですが、DirectSound.pas等が入ってないようでコンパ
0
カバー画像

Lazarusで一時的にパッケージを編集する(掃除して構築)

目的: Lazarusに豊富に公開されてるオンラインパッケージをインストールして使ってるとバグが見つかることがありますよね。 自分の環境で一時的に修正する方法です。デバッグしてると目的のソースが出てきます。これを修正してしまっていいのかと思ってる場合、OnlinePackageManager からInstallしたものなら再インストールすれば元に戻せますから心配しないでやっちゃって下さい。2重にインストールされないように事前にアンインストールする等の注意は必要ですが、それでも後からアンインストールすれば良いだけです。ソースを修正しても自分のプロジェクトに入れないない限りはRUNしてもコンパイルされません。自分のプロジェクトに入れても2重になってる等のメッセージで上手くゆきません。 そこで使うのが「掃除して構築」です 実行メニューの4番目にあります選ぶとダイアログが出て細かな調整ができるようですが、そのまま下にある[掃除して構築]ボタンを押せばOKです。時間は普段よりかかりますがこれでとりあえず自分の環境では動作させられます。私の失敗事例:修正したいソースだけ自分のプロジェクトに入れても、そもそもコンパイルオプションが違う事が多いのでコンパイルエラーの山に出会わしました。具体的には構造体ポインタのメンバーについてptr^.hoge を ptr.hoge と省略出来るかメソッドポインタへ メソッド名の代入で@が必要かどうかDWORD(Self)か  DWORD(@Self)か
0
カバー画像

PascalScritに SAR演算子 を追加する

私はwindowsの開発ツールでDelphiが好きでした。C系も書けますが、私は性格がいい加減なのでC系統だと他人に読めないどころか後から自分でも分からないコードを作ってしまいます。Pascalだと型に厳格で書き方に多様性が少ない分、内容に拘れるとも言えます。動けば良いという感覚で書いても後からある程度は読めますから。ただPascalの唯一の欠点は SAR演算子が無いことです。 C言語のシフト演算なら符号付きの場合SARをしてくれるのにと、何度も思いました。何故 SAR が欲しいのか-1 SHR 1 の結果は予想出来るでしょうか?  正の最大数になります。まあそれを利用してintサイズを知るという事も出来るのですがC言語なら -1>>1 は -1 ですし -2>> 1も-!ですSAR演算が昔は 整数除算の DIV で代用出来ました。x SHR 1を x DIV 2と書けたのです コンパイラが DIV 2を SAR 1 と変換してくれたのです。ところが何時のころからか DIVで代用出来なくなりました。今の時代は -1 DIV 2 は 0になるのです。 何が問題なのかというと、-3,-2,-1,0,1,2,3 を   DIV 2すると -1,-1, 0, 0, 0, 1, 1   SAR 1すると -2,-1, -1, 0, 0, 1, 1  アセンブラとかCで書いたデジタルフィルタとは DIV 2で代用すると期待してるより振幅が小さくなってしまうのです。シミュレータとして無視出来ない問題です。さて、Lazarusに組み込まれているPascalScript 
0
カバー画像

SynEditでマウスカーソル下の文字列を取得する

Lazarus等で使えるSynEditの話です単語であればGetWordAtRowColを使えばよいのですが  ちょっと特殊な事をしたい場合の対策法ですというか GetWordAtRowCol や GetWordBoundsAtRowColは現行のLazarus 内(ver 1.0と表示される)では多バイト文字で取得位置がズレるようですから。たぶん GetWordBoundsAtRowColに XY.X:=PhysicalToLogicalCol(LINE.XY.Y-1,XY.X): をいれたらよさそうに思うけど、ちょっと怖い。protectedメンバーを無理やり使うGetWordAtRowColの動作を見ると FTheLinesViewを見ていますが、これはPrivateです。どうしようもありません。 しかしFTheLinesViewはTextViewというプロパティで参照出ます。 当然使いたいのですが、これがprotectedなのです。そこで public にしただけのクラスを type   TMySynEdit = class(TSynEdit) public    property TextView;  end;と実装(implementation)に作って無理やり呼び出します。実際のコード例 type   TMySynEdit = class(TSynEdit)   public     property TextView;   end;  {マウス座標の文字が "hoge"ならhogeを返す} function GetBraketWordInSynEdit(cons
0
5 件中 1 - 5