問題タブ [machine-language]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
31 参照

assembly - このループの結果が 120 ではなく 20 と表示されるのはなぜですか?

このループの結果が 120 ではなく 20 と表示されるのはなぜですか?

0 投票する
1 に答える
38 参照

mips - lw add と sw の行は、下の図にどのように変換されますか?

私はこの教材の学習を始めたばかりです。チャートの 35、9、8 などの数字がどこから来たのかわかりません。組み立てラインに見えるのは 300 の数字だけです。

https://ibb.co/ZYrk42H

0 投票する
1 に答える
162 参照

assembly - オペコードからバイトへのプライマリチャート

この単純なhello world アセンブリ プログラムを使用して、ゼロから機械語に生成しようとしています (アセンブラを作成するという最終的な目的のためですが、今のところ、この特定のプログラムにのみ必要な 16 進値を理解したいだけです)。

したがって、機械語は、入出力操作の「_start」で言及されている部分にすぎないという一般的な考え方を知っています。また、DX と共に AX レジスタと共に使用して、大きな値を含む乗算および除算を行います。ただし、テキストで書き出す代わりに、各コマンドは数字 (またはバイナリなど) で表されます。

したがって、たとえば、「mov」は 1 つの数値であり、データ レジスタである「edx」は別のレジスタで表され、「myLength」は別のレジスタで表されます。また、コマンド「int 0x80」-「128」で割り込みます。これは、プライマリレジスタ、つまりAXに格納されているコマンドを呼び出すことを意味し、コマンド「int」を表す数値に0x80を加えたものに対応します( 128)、これは 2 進数では 128 になると思います。

また、セクション .text、セグメント .data などの余分なものはすべて、アセンブラーが上記で使用された変数を見つけて置き換えるためだけのものであると推測していますが、機械語自体は何も保持していないと推測しています変数または定数の種類ですが、間違っている場合は修正してください。

したがって、機械語では、理論的には、カウンター レジスタ (CX) に挿入するために変数を "coby" (メッセージ変数) に定義する必要はありません。むしろ、eCx を表す数字の直後に生の文字列を挿入するか、この場合は文字列ではなく char コード文字を挿入します (ただし、この例でカウンターレジスタが使用された理由もわかりませんが、減少するものを保存するために使用されるだけではないと思いますか?)

とにかく、私の仮定が正しければ、どの数値がどのオペコード (この場合はmovintなど) に正確に対応しているか、およびどのレジスタ (edx、eax など) に対応しているかを示すある種のチャートが必要です。これらのバイトコマンドがバイナリファイルに格納されている正確な順序を知る必要があります。NASM を (コマンドを使用してnasm -f elf yo.asm && ld -m elf_i386 -s -o yoman yo.o) 使用して、ANSI でコンテンツを表示しようとしました。これは、JavaScript コンソールから HTML ページに出力したときに得られたものです。 Unicode テキスト (HTML から常に見えるとは限りません):

366:00000000、000:367:00000000、000:368:00000000、000:369:00000000、000:370:000000000000、000:371:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000、000:374: 00000000、000: 375: 00000000、000: 376: 00000000、000: 377: 00000000、000: 378: 00000000、000: 379: 00000000、000:

そのため、ファイルは巨大です。380 バイト、これはちょっと驚くべきことです。上から明らかなように、NASM からの一連のヘッダーとその ELF のことと関係があると思います。そのため、実際のアセンブリ プログラムがどこから始まるのか、それが可能かどうかはわかりません。それだけに減らします。

したがって、すぐに突き出ているのは明らかに、コンソールに出力される文字列値です。これ160は、上記の出力の行 (別名 byte#) に表示されます。文字列の長さはたまたま 36 で、これはデータ レジスタ (アセンブリ プログラムでは "myLength" と呼ばれる) に格納された最初の値に対応するはずですが、"36" に対応するバイトが見つからないので、その長さが分割されたかどうかなど、正確にどのように保存されたかはわかりません。

目立つ他の顕著なバイトは、カーネル呼び出しに対応する番号 128、または上記の割り込み番号 (0x80) で、行 (/byte#) 156 と行 149 の出力に表示されます。他の場所にも表示されますが、その特定の場所では他の文字列の近くに表示されるため、割り込みコマンドの「int」に渡される値に対応する可能性があると推測しています。これらの場所の各バイトの前にもバイト "205" は、ANSI 文字としてこの Í のように見えます。これは、特に数字 0x80 の直前にあるため、コマンド "int" に対応していることを何らかの形で示唆している可能性がありますが、確かなことはわかりません。

それで、インテルのドキュメント非常に長いPDFファイルを調べてみましたが、次のことについて話している場所は見つかりませんでした。

1. どのバイトコードがどのオペコードとコマンドに正確に対応しているか

2. コンパイルされた出力にどのような順序/形式で正確に配置するか (NASM のようなサードパーティのアセンブラに頼ることなく)

サードパーティのリファレンス シートを見つけましたが、できれば元のドキュメントのどこから入手したのか知りたいのですが、レジスタのコードの一部が示されていますが、どの形式でそれらを生成されたバージョン。同様の質問に対するこれらの回答も見ました。

x86 オペコード エンコーディング: sib バイト

オペコードの 16 進値

EXE や ELF などのコンテナーを使用せずに、PURE マシン コードを手動で記述して実行する方法は?

しかし、私が本当に探しているのは、すべてのレジスタとオペコードへの完全で公式な参照です

0 投票する
1 に答える
9 参照

binary - Crystal Reports でバイナリ文字列から画像を描画する

数値文字列から EAN バーコード イメージを生成する Crystal Reports
用の何かを開発しようとしています。
数値文字列をバーとスペースを表す 1 と 0 としてエンコードする関数を SQL データベースで既に開発しましたが、次の点について完全に途方に暮れています。

  • これをDBに保存する方法(VarChar(100)以外)
  • これらの 1 と 0 を実際の画像に変換する方法 (高さが 1 ピクセルしかない場合でも)

とても感謝しております。