これはアセンブリ言語ですか?


70

私の幼少期には、MK-61 ソビエト電卓でプログラムを作成していました。4つの操作レジスタ(X、Y、Z、T)と15のストレージレジスタがありました。プログラムには105ステップあります。

思い出すと、次のようなコマンドがありました。

  • XおよびYレジスタを交換する
  • シフトレジスタ(ZからT、YからZ、XからY)
  • ストレージレジスタ(1..15)からXへのコピー
  • Xからストレージレジスタへのコピー(1..15)
  • X <0の場合、プログラムステップ##に進みます。
  • XおよびYの値を使用して操作(+、-、*、/)を実行し、結果をXに書き込む

このコマンドはアセンブリ言語を設定していますか?このデバイスを使用して、アセンブリ言語の基本的なアイデアはありましたか?

端末

「キーストロークプログラミング」と呼ばれるものであることがわかりました

おもしろい事実:1988年に、宇宙ミッションの軌道計算用のバックアップハードウェアとして、同様の計算機(これと似ていますが、エネルギーに依存しないメモリを使用)が使用されました。


いいね!-その写真は思い出を呼び戻します。私はまだMK-52を地下のどこかに持っていました:)
DXM

これは、HP 65のソビエトクローンのように見えます。スタックをプッシュおよびプルする操作で、逆ポーランド記法でプログラムできます。RPN演算子は単にメモリに記録され、おそらく4004 CPUと同等のものによって解釈されます。4004 ROMのコードはおそらく4004アセンブラーからコンパイルされましたが、キーストロークは実際にはスプレッドシートマクロに似ています。
メレディス貧しい

回答:


13

これはアセンブリ言語ではなく、機械語です。

機械語とは、機械にとって物理的に何かを意味するものです。ポケットコンピュータの場合、キーを押すだけで、マシンの数字にエンコードされます。このElectronika MK61マシンに関する詳細情報は提供しないので、TI-57の例を示します。マシン言語では、10の列とユニットの行として指定されたキーの番号を使用しました。したがって、たとえば、メモリ8をインクリメントするプログラムは次のようになります。

33 8  57 1 58 23

これは機械語です。機械が直接解釈するものです。

アセンブリ言語は、人間が読めるテキストになります。

RCL 8 
+
1
=
STO 8

このテキストを機械コードのシーケンスに変換するには、アセンブラーが必要です。アセンブラーは、プログラム、またはテキストを数字のシーケンスに変換する人間である場合があります。

多くの場合、アセンブリ言語から機械語への非常に直接的な翻訳があるため、混乱がよく起こりますが、これは必ずしも完全に直接的な翻訳ではありません。マクロアセンブラには、アセンブラで多くの作業を行い、単一のアセンブリ命令からの多くの機械語命令。単なるシンボリックアドレスの変換には、分岐命令のオペコードの変更が含まれる場合があります(たとえば、短い相対アドレス指定から長い相対アドレス指定または絶対アドレス指定に切り替える場合)。


36

私はあなたの質問の両方の部分に対する答えはノーであると言うでしょう:この計算機のコマンドはアセンブリ言語とは異なり、この計算機のプログラミングはアセンブリ言語でのプログラミングとは異なります。

この計算機がプログラムされている「言語」はかなり低レベルですが、プログラマーとしては見えない低レベルの構成要素の上に抽象化されたままです。私は少し推測していますが、あなたの説明から、そしてキーボードを見て(そして1970年代後半から1980年代初期のHewlett PackardまたはTexas Instrumentsの似たような計算機と比較して)、各プログラムは「ステップ「追加」や「XとYの交換」などの単純な操作だけでなく、三角法、べき乗、対数などのより複雑な操作も可能です。これらの各ステップは、おそらく内部マイクロコードルーチンとして実装されます。そのマイクロコードはおそらくアセンブリ言語でプログラムされていますが、私はそうは思いません

他の人が説明したように、アセンブリ言語は通常、基礎となるマシンの機能と非常に密接に対応しています(1:1ではない場合)。アセンブリ言語プログラミングには、この計算機のプログラミングにはおそらくない次の特徴が含まれていると思います。

  • 操作には、ビット単位のAND、OR、XOR、シフトなどの低レベルの操作が含まれます。さまざまなデータサイズ(単精度または倍精度など)の整数および(おそらく)浮動小数点演算。さまざまなサイズ(バイト、ハーフワード、ワードなど)のロード/ストア。

  • より高いレベルの操作(トリガー、対数)は通常、命令ではなくサブルーチン呼び出しです。多項式評価命令があったDEC VAXなど、いくつかの例外があります。[編集:OPはx87にもトリガー機能があることを指摘しました。]

  • マシンのアドレス指定スキームが公開されます。アドレス空間がセグメント化されている場合は、ベースアドレスをレジスタにロードしてから、そのレジスタに関連するアドレスコードまたはデータをロードする必要があります。フラットなアドレス空間であっても、アドレスとアドレス算術を認識しています。通常、アセンブラにより、プログラマはラベルを使用してアドレスを示すことができます。ただし、アドレスが別のセグメントにある場合、アクセスする前にセグメントレジスタをロードする必要があります。

  • メモリアライメントが公開されます。たとえば、多くのマシンでは、4バイトのワードは、4バイトの倍数であるアドレスからのみロードまたはストアできます。

  • データ表現が公開されます。通常、アセンブラは、16進数、8進数、10進数、浮動小数点、場合によっては文字データで数値データを指定する方法を提供します。

  • レジスタの特殊化が公開されています。一部のアーキテクチャでは、一部のレジスタで整数演算とアドレス演算が許可されていますが、他のレジスタでは浮動小数点のみが許可されているか、特定のレジスタに関連するアドレス指定のみが許可されています。場合によっては、アドレス指定や算術演算に使用できない条件ビットまたはステータスビットを備えたレジスタなど、特殊なレジスタがあります。

  • サブルーチン呼び出し規約が公開されています。引数と戻り値はレジスタに渡すか、スタックにプッシュしたりポップしたりできます。(このスタックは通常、XYZやTのような固定セットではなく、特別なスタックポインターレジスタによってアドレス指定されるメモリ領域です。)

  • OSとやり取りする方法を意識する必要があるかもしれません。もしなければ、低レベルのハードウェア設備に対処する方法を意識する必要があります。OSでは、引数をレジスタ(またはスタック)にロードし、カーネルにトラップする必要があります。OSがなければ、おそらく割り込みとタイマーを処理する必要があります。

アセンブリプログラミングの私の記憶は、それは非常に苦痛だということです。この計算機のプログラミングは、比較すると簡単で楽しいと思います。(ごめんなさい。)


1
青のシンボル- 1)まあ、それはいくつかのビット演算AND、OR、XOR、NOTを持っておよびИНВキーボード上)INVを意味しています(。2)サイン、コサインなどは、x86プロセッサ向けのこのリファレンスref.x86asm.net/coder32.htmlによる命令であると考えました。しかし、もちろん、アセンブラーははるかに複雑であることに同意します。
defhlt

-あなたはVMS命令セット動作のためにrefrenceたい場合deathrow.vistech.net/...を。他のいくつかの楽しいビットは、esolangs.org

25

はい、それは間違いなくアセンブリ言語のように聞こえます。

定義(コマンドがターゲットプラットフォームのマシンコードと1:1でマッピングされる言語)は、マシンコード自体の知識なしに判断するのが難しいため、説明だけで実際アセンブリであるかどうかを判断するのは困難です。しかし、それはASMが他のプラットフォームで動作する方法のように聞こえます。


11

それは確かにアセンブリ言語といくつかの密接な類似点を持っていますが、私はそれが実際にそうではないことを議論するつもりです。

アセンブリ言語では、操作は主に1対1をCPU命令にマップします。マクロや疑似操作など、いくつかの例外があります(たとえば、実際にレジスタをそれ自体とXORするCLEAR命令など)。実際のポイントは、アセンブリプログラムが生成されるCPU命令を正確に決定することです。(これがアセンブリ言語とCのような高レベル言語の根本的な違いです。後者では、プログラムは動作を指定します)。

計算機には間違いなくCPUが含まれていますが、個々のCPU命令がX、Y、Z、Tの「レジスタ」を参照している、xyまたはsin(またはПРГ、その意味は何でも)のような高レベルの操作を実行しているとは思えません。

代わりに、目に見える操作の多くまたはほとんどがサブルーチン呼び出しとして実行されると確信しています。また、実行される各操作について、結果を表示するためにかなりの量の余分な作業が必要です。

目に見える操作は、高レベルの仮想マシンのアセンブリ言語と考えることができますが、その仮想マシンは、実際のCPUで実行されるインタープリターのようなものを介して実装されます。

それでも、私はあなたの質問の2番目の部分への答えは言うでしょう:

このデバイスを使用したアセンブリ言語の基本的なアイデアはありましたか?

はいです。


1
私たちのボックスにはAX、BX、CXおよびDXはありません。アセンブリ言語はシンボリック翻訳が許可されています。高レベル関数はアセンブリではないことは確かですが、彼がリストしたものにはそれらが含まれていないことに注意してください。私はそれが実際にアセンブリ言語である可能性は低いと思いますが(アドレッシングモードが機能するためにはすべてが固定長である必要があります)、リストされているコマンドはどれもPCのアセンブラーを超えていません。
ローレンペクテル

2
「X <0の場合、プログラムステップ##に進む」は、単純なBMI(マイナスの場合は分岐)アセンブリ命令です。
mouviciel

1
@mouvicielそして、プラットフォームがBMI例のようなものを直接サポートしていない場合でも、IF ... THEN ...一般に2つの指示として読み取られます:最初に比較(x < 0この場合)、次にその比較の結果に基づくアクション(最も可能性が高い作業中のジャンプ)アセンブリ言語で)。Intel 8086では、(xAXにあると仮定)のようなものCMP AX, 0 JNL After_IfThen_Blockです。(JNLはNot If Not Lessです。高水準言語if not (x < 0) then goto After_IfThen_Blockでは、これはのようになりif (x >= 0) then {code until there}ます。これはと同じです。)
CVn

1
ПРГ(PRG-プログラミング)は、プログラミングモードに切り替えるための単なるメタキーであり、機能ではありません。
オレグV.ボルコフ

1
@mouviciel:「X <0の場合、プログラムステップ##に進む」は、実際には単一のハードウェアCPU命令として実装されることには懐疑的です。計算機に入力されたプログラムは、CPU命令のシーケンスとして保存されていないと推測します。むしろ、ファームウェアプログラムによって解釈される一連の高レベルの命令として保存されます。この特定の計算機で作業したことはありませんが、HP-48を使用しました。ユーザーに見える命令セットは、使用するSaturn CPUの命令セットとは大きく異なります。
キーストンプソン

9

そうです、投稿されたコードフラグメントは、アセンブリ言語のように見えます。このコードを適切に変換すると、バージョンが定義されます。

編集:このデバイスに特定の言語がありますが、アセンブリではありません。

ソ連製の電卓のようにも見えます。丸いバッテリー/コードで動作しますか?


3
正しい、80年代半ばからソビエトウクライナで生産されました。1991年に作ったものがあります。単三電池3本と220vアダプタ用の両方のスロットがあります。
defhlt

1
これは本当に懐かしいです。このブランド名「Elektronika」を覚えています:)
ELユスボフ

3

私はあなたがBASICアセンブリ言語ハイブリッドに近いと主張しますが、それは実際に基盤となるCPUとアーキテクチャに依存します。真のRAMがない場合は、直接メモリアクセスする必要はありません。浮動小数点演算もFPUなしで存在する必要はありません。

簡単なテストは、浮動小数点数と整数の加算演算だと思います。最も高いレベルのプログラミング言語はADD 2.5、7を受け入れ、9.5を返します。ただし、アセンブリ言語は、呼び出された命令に基づいて、バイナリの基になる数値表現に応じて出力が異なります。ほとんどのアセンブリ言語では、浮動小数点演算と整数演算の使用に基づいて、異なる命令を使用する必要があります。これの例外は、ある種の固定小数点形式です。


すべての数値を浮動小数点数として扱い、引数7.0の1つを考慮することができます。
オレグV.ボルコフ

@ OlegV.Volkovかもしれませんが、その場合、合計が真の表現を持たない2つの浮動小数点数を選択するだけで済みます。また、減算のキャンセルエラーを探すこともできます。
ピータースミス

3

逆ポーランド記法(RPN)計算機は古典的でした。いいえ、レジスタの指定はアセンブリ言語のように見えますが、そうではありません。計算は、代数形式からスタックに変換して実行されました。使用された数値はスタックにプッシュされ、最後にスタックされた値に対して最後にスタックされた値に対して操作が実行されました。

表示された値はスタックメンバーであるため、スタックを「回転」して値を移動できます。必要に応じて結果を交換または積み重ねて、ほぼ複雑な計算を実行できます。スタックハードウェアとアセンブリ言語を理解している場合、この電卓はパラダイムが最も類似していたため、学ぶのは簡単でした。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.