WindowsおよびLinux用のMASM、TASM、FASM、NASM

パートI

パートII

パートIII



この記事では、WindowsおよびLinux用のさまざまなトランスレーターのインストールとプログラムの翻訳に関連するアセンブラーの研究を開始した人に生じる可能性のある問題を検討し、このトピックの研究に専念するリソースおよび書籍へのリンクを提供します。



MASM



Windows用のドライバーを作成するために使用されます。



サイトへのリンクに従って、パッケージ(masm32v11r.zip)をダウンロードします。 プログラムをインストールすると、パッケージC:\ masm32のフォルダーがディスク上に作成されます。 何もしないプログラムprog11.asmを作成します。



.586P .model flat, stdcall _data segment _data ends _text segment start: ret _text ends end start
      
      





masm32 Webサイトのアセンブラーを使用してprog11.asmファイルをアセンブル(翻訳)します。



画像

/ coffスイッチは、32ビットプログラムをブロードキャストするためにここで使用されます。

リンクは、 link / subsystem:windows prog11.objコマンドlink / subsystem:console prog11.obj )で行われます



ウィキペディアに記載されているとおり
MASMは、個別の16ビット版と32ビット版が存在しない数少ないMicrosoft開発ツールの1つです。




また、 アセンブラーバージョン6は、「Intelプロセッサー向けのアセンブリー言語」という本の著者であるKip Irwin kipirvine.com/asmの Webサイトで入手できます。



ちなみに、「Assembler for Windows」という本の著者であるVladislav Pirogovの個人サイトへのリンクがあります。



MicrosoftのMASM



次に、 リンクを使用してMicrosoft WebサイトからMASM(バージョン8.0)をダウンロードします。 ダウンロードしたファイルは「MASMsetup.exe」と呼ばれます。 このファイルを実行すると、「Microsoft Visual C ++ Express Edition 2005が必要です」というメッセージが表示されます。



このファイルをアーカイバー(7zipなど)で開きます。 内部にsetup.exeファイルがあり、それを抽出し、アーカイバを開きます。 内部には、vc_masm.msi、vc_masm1.cabという2つのファイルがあります。 ファイルvc_masm1.cabを抽出し、アーカイバーを開きます。 内部には、FL_ml_exe _____ X86.3643236F_FC70_11D3_A536_0090278A1BB8というファイルがあります。 名前をfl_ml.exeファイルに変更してから、fl_ml.exeアセンブラを使用してprog11.asmファイルをアセンブルします。



画像



Visual StudioのMASM



MASMは、Visual Studioのフォルダー(VS 10があります)にもあります:C:\ Program Files \ Microsoft Visual Studio 10.0 \ VC \ bin \ ml.exe



画像



32ビットまたは64ビットシステムで実行し、32ビットと64ビットの両方のWindowsで動作するプログラムを作成するには、MASM32(ml.exe、fl_ml.exe)が適しています。 32ビットおよび64ビットシステムで動作し、64ビットWindowsで動作するプログラムを作成するが、32ビットでは動作しないためには、ml64.exeアセンブラが必要です。 C:\ Program Files \ Microsoft Visual Studio 10.0 \ VC \ bin \ amd64フォルダーにあります-C:\ Program Files \ Microsoft Visual Studio 10.0 \ VC \ bin \ x86_amd64



タスム



x86アーキテクチャ用のアセンブリ言語プログラムを開発するために設計されたBorlandソフトウェアパッケージ。 ボーランドは現在、アセンブラの配布を停止しています。



たとえば、 ここからダウンロードできます。 インストーラーはありません。プログラムを抽出するだけです。 Peter Abelの本(図3.2)のIBM PCおよびプログラミング用アセンブラー言語のソースコードを次に示します。



 stacksg segment para stack 'stack' db 12 dup ('stackseg') stacksg ends codesg segment para 'code' begin proc far assume ss:stacksg,cs:codesg,ds:nothing push ds sub ax,ax push ax mov ax, 0123h add ax, 0025h mov bx,ax add bx,ax mov cx,bx sub cx,ax sub ax,ax nop ret begin endp codesg ends end begin
      
      





abel32.asmファイルをアセンブル(翻訳)します。



画像



プログラムの正確性は、オブジェクトファイルをリンク(tlink.exe)し、結果ファイルをデバッガで実行することで確認できます。



上記のように、MASMは16ビットプログラムでの作業に使用できます。 MASMアセンブラーを使用してabel32.asmプログラムをアセンブル(翻訳)します。



画像



/ coffスイッチはここでは使用されません。

リンクはlink16.exeによって行われます



けいれん



クリス・カスペルスキーの「アセンブラー翻訳者の比較」の記事には、「FASMは非常に独創的でありながら悲しいかな、おもちゃのアセンブラーである」と書かれています。 「こんにちは、世界」、ウイルス、デモ、その他のハッカーの創造性のある作品などの小さなタスクに適しています。



公式サイトからFASMをダウンロードしてください。 インストーラーはありません。プログラムを抽出するだけです。 fasmエディターを開きます-C:\ fasm \ fasmw.exe。 フォルダC:\ fasm \ Examples \ HELLOには、ファイルHELLO.asmがあります。



 include 'win32ax.inc' .code start: invoke MessageBox,HWND_DESKTOP,"Hi! I'm the example program!",invoke GetCommandLine,MB_OK invoke ExitProcess,0 .end start
      
      





fasmw.exeからHELLO.asmファイルを開きます。 行インクルード 'win32ax.inc'を行インクルード 'c:\ fasm \ INCLUDE \ WIN32AX.INC'に変更します。 [実行]メニューから[実行]を選択します。



画像



FASMリソースへのリンクは次のとおりです。



Cyber​​forumのFASM

Dosでのasmworld .comプログラムのFASM

一連の記事「Assembler for Windows for Dummies」

narodのウェブサイト



Linux上のFASM



Linux(私はUbuntuがあります)でFASMを使用するには、適切な配布キット(fasm-1.71.60.tgz)をダウンロードして解凍します。フォルダーにバイナリファイルfasmがあり、このファイルを/ usr / local / binにコピーします。他のコマンドと同様にコンソールから実行できるように、fasm / examples / elfexe / hello.asmフォルダーからhello.asmプログラムをアセンブルします。



画像



プログラムの正確性は、デバッガで確認できます。



ナスム



Nasmは、Linuxおよび他の多くのUNIXシステムのアセンブラGasの標準との競合に成功しています。



Linux上のNasmは、パッケージマネージャーを使用するか、コマンドラインからインストールできます。Debianディストリビューション(Ubuntu)ではapt-get install nasmコマンドFedoraCentOSRedHat ディストリビューションではyum install nasmコマンドを使用できます。



「Hello」メッセージを5回表示するプログラムを作成します。 例は、Andrei Viktorovich Stolyarovの本「OS UNIX用のアセンブリ言語NASMでのプログラミング」から引用しています。 教科書とライブラリ「stud_io.inc」は、著者の個人ウェブサイトにあります。



 %include "stud_io.inc" global _start section .text _start: mov eax, 0 again: PRINT "Hello" PUTCHAR 10 inc eax cmp eax, 5 jl again FINISH
      
      





hello.asmファイルをアセンブルおよびリンクして実行します。



 $ nasm -f elf hello.asm $ ld hello.o -o hello $ ./hello
      
      





64ビットの場合、コマンドnasm -f elf64 hello.asmを使用する必要があります



Windows用NASM



NASM for Windowsは、 対応するサイトから適切な配布パッケージをダウンロードすることでインストールできます。



組立:

nasm -f bin _.asm -o _.com







Nasmリソースへのリンク:



ウェブサイトA.V. ストヤロヴァ

電子教科書が置かれているサイト (アーカイブ内)

同じ



として



LinuxおよびBSDを含む、ほぼすべてのUNIXの標準アセンブラ。 このアセンブラの無料版は、GAS(GNUアセンブラ)と呼ばれます。 GCCコンパイラを使用してプログラムをブロードキャストできます。



教科書からは、「ゼロからのプログラミング」という英語の本だけが見つかりました。 ロシア語では、S。Zubkovによる「DOS、Windows、およびUNIX向けのアセンブラー」という本から1つの章しか見つかりませんでした。



サイトから何もしないプログラムの例を挙げてください。 gas.sプログラムを作成しましょう



 .section .text .globl _start _start: movl $1, %eax movl $2, %ebx int $0x80
      
      





アセンブリ(翻訳)を実行し、プログラムをリンクして起動します。



 $ as -o gas.o gas.s $ ld -o gas gas.o $ ./gas
      
      





このプログラムで_startをmainに変更すると、gccコンパイラーによってアセンブリ(翻訳)およびリンクを実行できます。



 .section .text .globl main main: movl $1, %eax movl $2, %ebx int $0x80
      
      





アセンブリ(翻訳)を実行し、プログラムをリンクして起動します。



 $ gcc gas.s -o gas $ ./gas
      
      





結論 :Windowsでプログラミングを勉強しているなら、Masmを選ぶことができます。 Tasmはサポートされなくなりましたが、古い古典的な本から学ぶのに適しています。

Linuxの場合、GCCはGCCを使用する人に適しています。また、Gas構文を好まない人にはNasmが適しています。



PS通常、次の2つの部分はループ内の行の処理に当てられます。

PPSリトルマンコンピューター-アセンブラー命令の限られたセットを持つトレーニングコンピューターモデルについては、 この記事で説明します



All Articles