1

本からアセンブリ言語を学び始めました: Introduction to 80x86 Assembly Language and Computer Architecture

これはRepresenting Data in a Computer

数値を表す 2 つのスキームを見てきました。

  1. 2 進整数 (通常は 16 進数で表される) を使用するか、
  2. ASCII コードを使用します。

ただし、これらの方法には次の 2 つの問題があります。

私はこれらの問題を理解していませんでした。

1: 数値を表すために使用できるビット数が制限されています。

聞き取れませんでした。彼は何を言っているの?

2: 負の数を表す方法が明確ではありません。

大丈夫

上記の最初の表現の問題を解決するには、マイナス記号のコードを含めるだけです。たとえば、4 文字 -817 の ASCII コードは、2D (マイナス)、38、31、および 37 です。

私はそれだと思いますsecond representation problem。しかし、わかりました。

最初の問題を解決するために、常に固定バイト数を使用することに同意することができます。おそらく、ゼロまたはスペースの ASCII コードで左側をパディングします。

彼が何を言いたいのかさっぱり分からない. ASCII codes for zeros or spaces.??

別の方法として、可変バイト数を使用することもできますが、数値が数字の最後の ASCII コードで終わることに同意します。つまり、数字以外で文字列を終了します。

一言も発しなかった。

どうしてか分かりません。しかし、彼が何を言おうとしているのか理解できません。誰でもこれを説明できますか。(例は素晴らしいでしょう)

4

5 に答える 5

1

わお。私はその本を読んでいませんが、あなたの抜粋が正確であるならば、私がそれを見逃したことは申し訳ありません.

数値のバイナリ表現は、数値を表すために使用されるビット数によって制限されます。ただし、多数のビットまたは可変数のビットを使用する表現を定義することはできます。左側に 2 進ゼロ (または負数の 2 の補数表現の 1) をパディングします。

本が説明するように、数値のASCII表現を行うことができます。ASCII の問題は、数値の操作が難しいことです。加算はかなり単純ですが、除算がどのようになるか想像してみてください。

于 2010-01-01T13:07:41.250 に答える
1

困っている理由がわかります。別の本を探すことをお勧めします。これは非常に解釈が難しいです。

「数値を表すために使用できるビット数は限られています」

2進数は何ビットですか? 32? それが限界です。

「彼が何を言おうとしているのか、私にはさっぱりわかりません。ゼロまたはスペースの ASCII コードです。」

0x20 のスペースの ASCII コード。ゼロの ASCII コードは 0x30 です

http://www.asciitable.com/

「最初の問題を解決するために、常に固定バイト数を使用することに同意することができます。おそらく、ゼロまたはスペースの ASCII コードで左側をパディングします。」

あまり意味がありません。最初の問題は制限です。2 番目の問題であると仮定すると、次のようになります。

0x30 0x30 0x37 == 7. 固定長 3 で、左側に ASCII ゼロが埋め込まれます。これは数値の標準的な COBOL 表現であり、左側に先行ゼロが埋め込まれた文字列です。(COBOL では末尾符号文字がよく使用されます)。

「代わりに、可変バイト数を使用することもできますが、数値が数字の最後の ASCII コードで終わることに同意します。つまり、数字以外で文字列を終了します。」

1,234,456,890,123 (非常に大きな数) という数字は、

0x20 0x31 0x32 0x33 0x34 0x34 0x35 0x36 0x38 0x39 0x30 0x31 0x32 0x33 0x00

先頭にスペースがあり、正になります。数字以外 (0x00) で終了します。

于 2010-01-01T13:09:51.683 に答える
1

そのような答えではなく、無視したいかもしれないアドバイスです。IEEE 754 (浮動小数点数表現) および BCD (2 進化 10 進数 -- ASCII と同じものではなく、別の同様のアプローチ) に関するウィキペディアの記事を読んで補足してください。これらは、問題とそれらに対するいくつかの解決策に光を当てます。

于 2010-01-01T13:10:58.093 に答える
1

彼は、整数をメモリに格納する 2 つの異なる方法について言及しています。彼は次の 2 つの方法を提案しています。

  1. コンピュータが内部的に使用する基数に数値を格納する
  2. 数値を基数 10 (人間が使用する基数) として格納します。

明らかに最初の方がパフォーマンスに優れていますが、すべての質問は、コンピューターが使用する非常に珍しい方法である数値を保存する2番目の形式に関連しているようです(ただし、人間が読めるソースファイルで見るのは珍しいことではありません)。

方法 1 を無視して方法 2 のみを検討すると、彼はこれを固定幅と可変幅の 2 つのサブカテゴリにさらに分割します。固定幅では、サイズに何らかの制限 (たとえば 10 桁) を選択し、それよりも小さい場合はゼロで埋めます。このシステムでは、12345 は ASCII 文字列として表されます。

0000012345

可変長システムでは、セミコロンなどの区切り文字を選択します。これにより、任意のサイズの整数を格納できます。

12345;

コンピュータは通常、数値をこの形式で内部的に保存しません。最新のプロセッサがサポートするすべての整数演算では、コンピューターの既定の基数を使用して数値を格納する必要があります。必要に応じて、2 進数または 16 進数と考えることができますが、実際には、これらはデータをより簡単に考えられるようにするためのより人間的な方法です。通常、最新のコンピューターは、一度に 32 ビットなど、より大きなデータのチャンクを操作します。

于 2010-01-01T13:12:43.183 に答える
0

コンピューターがデータを操作する方法を理解するには、まずコンピューターがデータをどのように表現するかを理解する必要があります。これを行うには、いくつかの重要な概念を理解する必要があります。数値ベース10進数10進数システム(基数10)では、数値11を書き込みます。2進数オクタルシステム(基数2)では、エイリアンは1011を書き込みます。 (基数8)コンピューターは13を使用します。16進数16進数システム(基数16)では、数値はBになります。

于 2010-01-01T15:24:02.963 に答える