問題タブ [nasm]
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.
assembly - [BITS 16] および [ORG 0x0000] ディレクティブの順序
カーネルを書いて、それを楽しんでいる実験を始めています。基本的なブートローダーと次のディレクティブを作成しました:
ただし、カーネルのチュートリアルでは、次のように始まります。
これらのディレクティブが与えられる順序が違いを生むかどうか疑問に思っていましたか? NASM バージョン 2.06rc2、OpenSUSE 11.2 を使用しています
assembly - ブートストラップローダーとカーネルのエラー
私たちは、カーネルの書き方を学び、インとアウトを学ぶプロジェクトに取り組んでいます。ブートストラップローダーが作成されており、機能しているようです。ただし、カーネルの読み込みに問題があります。最初の部分から始めましょう:
bootloader.asm:
bootloader.asmは、エディターが動かなくなったり詰まったりすることなく、エディターには長すぎます。さらに、「Welcome to our OS」というメッセージが表示されるので、ブートローダーとカーネルはbochs内で機能します。とにかく、以下はこの時点でカーネルに対して持っているものです。
kernel.asm:
nasm 2.06rc2を使用して、次のようにコンパイルします。
nasm bootloader.asm -o bootloader.bin -f bin
nasm kernel.asm -o kernel.sys -f bin
bootloader.binを次のようにフロッピーに書き込みます。
dd if=bootloader.bin bs=512 count=1 of/dev/fd0
kernel.sysを次のようにフロッピーに書き込みます。
cp kernel.sys /dev/fd0
私が述べたように、これはbochsで機能します。しかし、フロッピーから起動すると、次のような出力が得られます。
カーネルシェルを読み込んでいます
...........
エラー:キーを押して再起動します
その他の詳細:OpenSUSE 11.2、GNOMEデスクトップ、AMD x64見逃した可能性のあるその他の情報については、お気軽にお問い合わせください。私はここに必要なものすべてを入れようとしました。必要に応じて、bootloader.asm全体をどこかに投稿する方法を見つけることができます。いくつかの理由から、GRUBの使用にはあまり興味がありません。これは変更される可能性がありますが、GRUBを実際に検討する前に、このブートが成功することを確認したいと思います。
編集:ブートストラップローダーは512バイトで、ディスクのブートセクター(最初のセクター)に書き込まれると想定されています。私の言葉を借りれば、ブートローダーは512バイトコンパイルされています。カーネルは次のセクターにあると想定されています。
macos - OSXでELFファイルをロード/実行する可能性
OSXでelfファイルをロードして実行する可能性について知りたいだけです。標準の実行可能形式がMACHOであることは知っていますが、NASMはMACHOオブジェクトのデバッグ情報を生成できません(NASMを使用する必要があります)。ロングショットだと思いますが、ELFファイルを使用できるとは思いません。NASMで構築することはできますが、LDとリンクすることすらできないようです。
assembly - 乗算なしで NASM アセンブリの数値を 2 乗する
乗算を行わずに (シフトなどを使用して)、レジスタに格納されている数値 (eax など) を 2 乗することは可能ですか? 32 ビットのアセンブリで 16 ビットの数値を 2 乗するので、オーバーフローは問題になりません。NASM x86 アセンブリを使用してプログラムを作成しています。よろしくお願いします。
assembly - ライブラリを使用せずにアセンブリ プログラムを作成するにはどうすればよいですか?
私は文字通り、アセンブリ言語を学び始めたばかりです。Windows Vista で NASM アセンブラを使用しています。
通常、新しい言語を学び始めるときは、他の人の Hello World コードをコピーして、1 行ずつ理解しようとします。しかし、他のライブラリを参照していない Hello World プログラムを見つけるのは驚くほど難しいと思います! おわかりのように、追加コードのライブラリ全体と密接にリンクしている場合、コードの各行を理解しようとしても意味がありません!
私がアセンブリを学びたい理由の 1 つは、自分が書いたプログラムをほぼ完全に制御できるようにするためです。ライブラリに依存したくありません。
そこで、私の質問は次のとおりです。Windows Vista コンソールに出力できる、完全にスタンドアロンの Hello World プログラムに対する NASM 互換のアセンブリ コードを誰か教えてくれませんか?
または、出力を印刷する場所 (つまり、Windows コンソール) をプログラムに指示するためにライブラリが必要になる場合があることを理解しています。それ以外に、ライブラリが必要な理由がわかりません。私は何かを見落としていますか?
linux - ブートローダーから起動するLinuxカーネル
自分のブートローダを使って Linux をロードしたい.. 予備調査の結果、Google は start_kerne() 関数を使用する必要があると教えてくれた.. アセンブリから start_kernel() を呼び出す方法を知りたい.. USB をフォーマット済みext3 にコピーし、そこにコンパイル済みのカーネルを貼り付けました。どうすれば Linux カーネルを起動できますか? どんな助けでも大歓迎です//事前にありがとう
モシン。
assembly - NASM と ADC に関する質問 - ASM 8086
高校で組み立てを勉強していて、家で組み立てプログラムを作ってみたいと思っています。
NASM をダウンロードしましたが、それを使用して .s ファイルを実行する方法がわかりません。簡単な実行方法をここに書いていただければ幸いです :-)
さらに、質問があります。たとえば、ADC を使用する場合: AL = 01 および BL = 02、CF = 1 の場合、次のようにします: ADC AL,BL AL は 3 または 4 になりますか? (CF添加の有無は?)
ありがとうございました!!
x86 - コンパイラ作成のための適切なアセンブラの選択と学習
私はコンパイラーを書いており、すべてのコンパイラーの本で紹介されているすべてのステップ (トークン化、構文解析、構文ツリー構造など) を実行しました。(「コンパイラを書くためのリソース」の質問へのリンクについてコメントしないでください!)。
NASM と alink をバックエンドとして使用することにしました。
ここでの問題は、NASM とアセンブリ全般を学習するための適切なリソースが見つからないことです。
x86 アセンブリに関するウィキブック (ドイツ語) は恐ろしいものです。彼らはそこに書いたコードについても説明していません。現在、1 に 2 を足して結果を出力するなどの簡単なこともできません。
- NASM x86 アセンブリはどこで学べますか?
assembly - 80x86 16ビットasm:lea cx、[cx * 8 + cx]はNASMでエラーを引き起こします(.comファイルのコンパイル)
NASMが(私の動作中のOSにもかかわらず)与えるエラーは「無効な実効アドレス」です。
今、私はLEAの使い方の例をたくさん見てきました。私はそれを正しく理解したと思いますが、それでも私のNASMはそれを嫌っています。試しlea cx, [cx+9]
てみましたが、うまくいきました。lea cx, [bx+cx]
しませんでした。
ここで、レジスタを32ビット(つまりlea ecx, [ecx*8+ecx]
)に拡張すると、すべてがうまくいくでしょうが、16ビットと8ビットのレジスタのみを使用するように制限されています。
ここに、私のアセンブラが、私が想定していた方法でleaを使用させない理由を説明できる知識のある人はいますか?