2017-01-11 23 views
3

私は8086用のアセンブリ言語を学んでいる、と私は、たとえば、行継続文字があるのか​​どうか知りたい:私は一度読むことをしましたMASM(8086)アセンブリ言語の行継続

mov ah,\ 
    09 
    mov dx,offset msg 
    int 21h 

" \ '記号は行継続で使用されますが、' \ '記号が機能していないため、MASMでエラーが発生します。

+0

通常、私はアセンブリではないことを認識しているプログラミング言語で行の継続が行われます(ただし、lc3としかやり取りしていません)。少なくともlc3はあなたができるものではありませんでした。私はまた、それをそれ以上読みやすくするつもりはないので、それに対して反対するつもりです。 – gabeio

+0

私の質問に答えるためにgabeioに感謝します。また、コードを読みやすくすることはできませんが、私は試験が来ています。私はそれについて知りたがっています。言いたいことは、コードを読みやすくすることができないということを彼に正確に伝えてくれると思います。 –

+2

'\'継続は 'MASM 6.0' +で動作し、' NASM'では間違いなく動作します。どのバージョンを使用しているのかは不明です...その情報をあなたの質問に含めるかもしれません。 –

答えて

5

行継続文字は、MASM 5.1で導入されました。これは単一のバックスラッシュ文字(\)で、行の最後の非空白文字として配置する必要があります。これは本質的に質問の中で示唆しているのと同じ構文です。単一の論理行を2つ以上の物理的な行に分割します。

MASM 6.1(おそらく6.0、そのバージョンのマニュアルのコピーが見つかりません)から、行継続バックスラッシュの後にコメントを付けることができました。これらが効果的にあなたは、このようなコードを書くことができるように、空白として扱われた:

mov ah, \   ; continue onto the next line 
    09 
mov dx, offset msg 
int 21h 

しかし、私は同意コメンター-これはあなたのコードの可読性を高めることは非常に考えにくいです。私はアセンブリ言語で多くのコードを書いてきました。決してがこれを必要としていました。アセンブリ言語のニーモニックは、80列の幅にしても、命令を実行する余裕がない理由を想像できません。

また、MASM 6.1では、イニシャライザ内の末尾のカンマは、その行が次の行に続くことを示しています。したがって、次の宣言は有効です:

EvenNumbers DB 02h, 04h, 06h, 08h, 
       0Ah, 0Ch, 0Eh, 0Fh 

OutputStr DB "Hello ", 
       "world!" 

これにより、第2のライン上にラップすることは意味をなさないかもしれない唯一の場所であり、それは面倒な構文を必要とせずにサポートされています。

このバージョンでは、1行の最大文字数が128から512になりました。6.1より古いバージョンのMASMを使用する理由はありません。セグメント化されたDOSプログラムをコンパイルする必要がある場合でも、MASM 6.1はそれを行い、MASM 5.1で書かれた古いプログラムと完全に互換性があります。

いずれにせよ、インストラクターがについてこの質問を投稿した場合、彼らは実際に質問の形でバレルの底を削っています。そして、あなたがこれについて心配していることを他のこと全てをよく知っていれば、試験を釘付けにするでしょう。

関連する問題