アセンブリ言語の例とは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > ウィキペディア小見出し辞書 > アセンブリ言語の例の意味・解説 

アセンブリ言語(System/360)の例

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2018/10/23 06:34 UTC 版)

ループ展開」の記事における「アセンブリ言語System/360)の例」の解説

* 配列などを指すよう全レジスタ初期化しておく(R14はリターンアドレスLM R15,R2,INIT load R15= '16'、R0= 配列要素数、R1--> FROM配列、R2--> TO配列LOOP EQU * SR R15,R0 配列要素数を16から引く BNP ALL n > 16 なら全命令列を実行し繰り返す* MVC命令列の先頭からのオフセット計算し展開されMVCループ所定位置無条件ジャンプする MH R15,=AL2(ILEN) MVC命令長さ(この例では6)をかける B ALL(R15) インデックス付き分岐命令(その位置からMVC命令実行)* 転送テーブル - 1つめが最大オフセットであり、この例では X'F00'ALL MVC 15*256(100,R2),15*256(R1) * 16番目のエントリの100バイトをFROMからTO転送ILEN EQU *-ALL MVC命令長さ。この例では6 MVC 14*256(100,R2),14*256(R1) * MVC 13*256(100,R2),13*256(R1) * MVC 12*256(100,R2),12*256(R1) * これら16個の文字転送命令 (MVC) はベース+オフセットアドレッシングであり MVC 11*256(100,R2),11*256(R1) * オフセット配列要素長 (256) ずつ減っている。 MVC 10*256(100,R2),10*256(R1) * System/360では命令指定できるオフセット最大値は X'FFF' であり MVC 09*256(100,R2),09*256(R1) * それを越えない範囲で展開可能な最大16要素ということになる。 MVC 08*256(100,R2),08*256(R1) * オフセット大きい方から転送するので、先頭要素最後に転送されるMVC 07*256(100,R2),07*256(R1) * MVC 06*256(100,R2),06*256(R1) * MVC 05*256(100,R2),05*256(R1) * MVC 04*256(100,R2),04*256(R1) * MVC 03*256(100,R2),03*256(R1) * MVC 02*256(100,R2),02*256(R1) * MVC 01*256(100,R2),01*256(R1) 2番目の要素100バイト転送 MVC 00*256(100,R2),00*256(R1) 1番目の要素100バイト転送* S R0,MAXM1 残り要素数を引く BNPR R14 全部転送し終えたので、R14のリターンアドレス呼び出し元に復帰 AH R1,=AL2(16*256) FROMへのポインタを1反復ぶんだけずらす AH R2,=AL2(16*256) TOへのポインタを1反復ぶんだけずらす L R15,MAXM1 R15MVC命令(16)再設定する(計算壊れているため) B LOOP ループ先頭に戻る** ----- 定数変数の定義(引数として渡すこともできる) --------------------------------- *INIT DS 0A LM命令事前ロードされる4つアドレスポインタ)MAXM1 DC A(16) MVC命令N DC A(50) 配列要素数(変数であり、変更可能) DC A(FROM) 配列1の先頭アドレスポインタDC A(TO) 配列2の先頭アドレスポインタ)* ----- 配列の定義(動的に確保することも可能) -------------------------------------------------- *FROM DS 50CL256 256バイト×50エントリの配列TO DS 50CL256 256バイト×50エントリの配列 この例を通常の50反復するループ記述する202命令を必要とするが、このように動的コードにすると約89命令で済む(約56%のコード削減)。配列が2要素しかない場合でも、単純なループ展開同程度命令数となる。バイナリサイズの増大は約108バイトほどであり、配列要素数が数千であっても対応可能である。この場合MVC命令反復展開しただけだが、複数命令場合同様の技法適用可能である。例えば、この例で各要素先頭100バイトコピーした後、残り部分ヌル文字クリアしたい場合、'XC xx*256+100(156,R1),xx*256+100(R2)' という命令を各MVC命令の後に追加すればよい('xx' は直前MVC命令と同じ値にする。ILENの位置注意)。 4つまたは5つ引数を持つマクロで上記コードインライン展開することも可能だし、サブルーチン化することも可能である。

※この「アセンブリ言語(System/360)の例」の解説は、「ループ展開」の解説の一部です。
「アセンブリ言語(System/360)の例」を含む「ループ展開」の記事については、「ループ展開」の概要を参照ください。

ウィキペディア小見出し辞書の「アセンブリ言語の例」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「アセンブリ言語の例」の関連用語

アセンブリ言語の例のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



アセンブリ言語の例のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaのループ展開 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2024 GRAS Group, Inc.RSS