2016-03-21 14 views
0

出力するために整数を文字列に変換しようとしています。 しかし、整数が128ビットである間に、2つのレジスタでx86_64とNASMアセンブリを使用しています。 だから私はそれを出力する方法を知らない。 ありがとう!アセンブリ内の128ビット整数の文字列への変換

+0

私はCの関数を使用することはできませんし、アセンブリでこのlong intを分割する方法がわかりません – CXWorks

+0

この質問は既に議論されています、[ここをクリック](http://stackoverflow.com/questions/13523530/printing-an) -int-or-int-to-string)を使用します。あなたの解決策ではありませんか? –

答えて

0

以下は、符号なし整数に使用できる(アセンブリスタイルの)アルゴリズムです。数nで起動します。あなたはそれがどのように動作するかを理解するように、手動でwetwareて良いスタートをする必要があります

start: 
    if n is non-zero then goto nonZeroNum. 
    output '0'. 
    return. 

nonZeroNum: 
    set digitCount to zero. 
numLoop: 
    get n modulo 10 and push it onto the stack. 
    increment digitCount. 
    divide n by 10 (integer division). 
    if n is non-zero then goto numLoop. 

digitLoop: 
    pop digit. 
    convert number to character (eg, adding 48 for ASCII). 
    output that character. 
    decrement digitCount. 
    if digitCount is non-zero then goto digitLoop. 

が、私はそれを実行することをお勧めしたいです。

次に、擬似コードの機能を実行するアセンブリ命令を実行するだけで済みます。それは1対1マッピングである可能性が高いのであまり面倒ではありません。

+0

私は方法を知っていますが、分ける方法はわかりません.... nは2つのレジスタにありますが、命令は64b/64bのみを扱います(わかりません) – CXWorks

+0

分裂の代わりに繰り返し減算。それはどんなビット幅でも簡単です。 ) – Jester

+0

128ビット整数が符号なしか符号付きかに応じて、 'DIV'(符号なし)または' IDIV'(符号付き)命令を使用してください。 'RDX'レジスタに上位64ビットを置き、命令の前に' RAX'レジスタの下位64ビットを置きます。そして、 'RBX'に10を格納すると、' DIV RBX'命令は10で割って商を 'RAX'に、残りを' RDX'(元の内容を書き込む)に入れます。 – pcarter

関連する問題