2016-05-30 1 views
1

変数からレジスタに値をコピーすると、記号のようにコピーしていることに気づいた(恐らく非常にダムなのですが) ASCIIコード?)、しかし私は代わりに番号としてそれを必要とします。シンボルの種類を含む、ああ、シンボルの代わりにアセンブリの移動番号

mov ah,[byte ptr playerSize] 
    mov [statusBar+17],ah 

とああにplayerSizeに値を移動した後、私はステータスバーに戻ってそれを移動しようとすると、シンボルは番号を移動しないばかり:私はやってみました何 。ヘルプのあらゆる種類の

感謝:)

+0

数字を文字列(表示するため)または文字列(数字など)に変換する必要があります(キーボードなどから取得した場合)。私のprocs 'string2number'と' number2string'はあなたを助けます:http://stackoverflow.com/questions/30243848/assembly-x86-date-to-number-breaking-a-string-into-smaller-sections/30244131#30244131 。 –

+0

@JoseManuelAbarcaRodríguezありがとう、私はそれを使用し、それは私をそんなに助けてくれました! :D – Cake

答えて

0

それはプレーヤーのサイズは32

あなたの問題は、あなたが数を表示したいということ、であるされている場合、それはたとえば32のため、実際の数だ、記号ではありません人間の書式(10進数)で。通常、フォントレンダリング関数は、ある種の文字エンコーディングを使用します。一般的な文字エンコーディングは、ASCIIとUTF-8(最初の127コードは基本的にASCIIと同じです)です。

フォントレンダリングに「A」と表示させたい場合は、まずビッグAをエンコードする数字の種類を知っている必要があります(CPUの場合は、0 ..(2^num_of_bits)-1、CPU ASCIIとUTF-8では、大きな「A」は65という数字で符号化されているので、4つのバイト「65,65,65,0」からなるメモリは、何らかのルーチンへの入力として入力されます。ディスプレイには、終端文字列をゼロ、「AAA」が表示されます。

今、私はあなたがおそらく...?何らかの手段で表示している、あなたの「ステータスバー」はASCIIゼロ終端文字列であると仮定します。

ですから、数32をしたいです(player size)0x20、0x20、0x33、0x32( "32")のような文字列に変換してstatusBar + 17〜メモリのstatusBar + 20バイト。

ステータスバーをレンダリングする機能を持っている場合は、おそらく数字の書式設定機能もあります。APIを検索します。

そうでない場合に行う独自の、ちょうど所望の符号化を確認し(ASCII変換が簡単で、桁XX + 0x30からASCIIコードを有する)、及び10によって数を分割、エンコード残りは、文字列の最後にそれを置きます、左に1つ移動し、除算の結果がゼロになるまで続行し、残りの文字列をスペースで埋める。

+0

情報をいただき、ありがとうございます。 – Cake

+0

古いDOSのテキストモード(CGA/EGA/VGA)と、ASCIIテキストを表示する簡単な方法であるASCIIについて、何かを読んでみてください。 次に、ピクセル単位で自分でグラフィックスモードで同じことを行うとします。まもなく、文字列にエンコードが使用された理由をすぐに理解できます。 – Ped7g

関連する問題