2016-07-16 9 views
0

私はmars32をシミュレートするためにmars 4.5を使用しています。 私がしたかったのは、文字列(.asciiz)を別のものと連続して保存するのではなく、メモリの別の場所に保存することでした。まだお互いに近いですが、ギャップがあります。例えばセグメント内の文字列間に余白を残す

.data 
string_1: .asciiz "\nHello, world" 
string_2: .asciiz "\n...assembly....\n" 

私の場合string_1ではデータセグメントのアドレス0x10010000に自動的に保存されます。

私は、string1の直後ではなく、string_2が0x10010080のようなアドレスにあることを希望します。

データセグメントのアドレスは編集できますか?

+0

訂正していただきありがとうございます。ピーターと私の英語を申し訳ありません。 –

答えて

0

これは構文としてGNUのように見えます。したがって、MARSは単にガスを使用すると仮定します。

the .org directiveを使用すると、現在の出力位置が所定の絶対値に増加します。 (唯一のセクション内で例えば、あなたがそれに制限を理解していることを確認するためにマニュアルを読んで、あなたが後方に行くことはできません。)

.data 
    string_1: .asciiz "\nHello, world" 
    .org 0x10010080   # fill with zeros until this address 
    string_2: .asciiz "\n...assembly....\n" 

はまた、あなたは、文字列定数を記述するつもりはない場合ことに注意してください通常は.rodataに入れてください。


2の累乗の境界に合わせるだけでよくなります。それのためにuse .p2align

固定バイト数でパッドする場合は、.zero sizeを使用します。例えば.zero 1234は、1234バイトの0にアセンブルされます。