Emerald@ ウィキ内検索 / 「フラグレジスタと条件分岐」で検索した結果
-
フラグレジスタと条件分岐
2つ目のレジスタ、フラグレジスタの登場です。 名称 意味 ON / OFF OF(オーバーフローフラグ) 符号付演算の桁上がりが起こるとセット OV / NV ZF(ゼロフラグ) 演算結果が0であればセット NR / NZ CF(キャリーフラグ) 演算結果の桁上がりが起こるとセット CY / NC フラグレジスタの数は全部で8つだが、これらはもっとも利用される3つです。 オーバーフローフラグ(OF) キャリーフラグ(CF) フラグレジスタは右下のOV~CYという部分。 オーバーフローフラグは OV キャリーフラグは CY と二つとも有効なっています。 ※説明は省略 ゼロフラグ(ZF) 「cmp」命令はデータの比較し、その結果をフラグレジスタに反映させます。 同値ならば ZFフラグが1(ZR)、CFフラグが0(NC)になる。 a... -
メニュー
...減算 ジャンプ命令 フラグレジスタと条件分岐 乗算と除算 ループ命令 フラグ操作 命令ポインタ スタックと特殊汎用レジスタ サブルーチン 論理演算 シフト ローテート セグメントとオフセット メモリ操作 システムコール リンク @wiki @wikiご利用ガイド 他のサービス 無料ホームページ作成 無料ブログ作成 2ch型掲示板レンタル 無料掲示板レンタル お絵かきレンタル 無料ソーシャルプロフ ここを編集 a -
乗算と除算
「フラグレジスタと条件分岐」でやったようにcmp命令とジャンプ命令を駆使すれば乗算、除算をすることはできます。 しかし乗算、除算専用にそれぞれ命令がちゃんと存在します。 ※CPUによってはサポートしていない場合もある。 乗算 乗算をするには「mul」命令を使います。 mul命令に16ビットのサイズが渡された場合は渡された値とAXレジスタを乗算してその解の上位16ビットをDXレジスタへ下位16ビットをAXレジスタへ格納する。 mul命令は符号なし乗算なのでマイナスには対応していない。 除算 除算をするには「dev」命令を使います。 基本的に乗算と同じです。AXレジスタに商と余りが入る。 16ビットのレジスタが渡された場合、AXレジスタに商が、DXレジスタに余りが入ります。 -
フラグ操作
フラグレジスタは一般的に条件分岐に使われます。 CFフラグは「キャリーフラグ」と呼ばれており、演算結果の桁上がりが 起こると1(CY)となり、桁上がりが起こらなければ0(NC)となります。 ALレジスタに FF を格納して、さらに1を加算することでALレジスタは桁上がりが発生します。 ALレジスタは1バイトなので当然、桁上がりが発生したら0になります。 また桁上がりが発生したのでCFフラグが1(CY)になっているのが結果からわかります。 このプログラムではadd命令によってCFフラグを変化させましたが、フラグレジスタを変化させるだけの命令が存在します。 「clc」命令はCFフラグを0(NC)にする命令です。 プログラムではadd命令によってCFフラグは1(CY)になるはずですが 次のclcl命令によって再び0(NC)に戻っています... -
汎用レジスタ
汎用レジスタとはCPUのレジスタのひとつ。 レジスタには大きく分けて 「汎用レジスタ」「フラグレジスタ」「命令ポインタ」「セグメントレジスタ」の4つ。 AX(アキュームレータ) オペランドと結果データ用のアキュムレータ BX(ベースレジスタ) DSセグメント内のデータに対するポインタ CX(カウントレジスタ) ストリング操作およびループ操作用のカウンタ DX(データレジスタ) I/Oポインタ SI(ソースインデックス) DSレジスタに対応するセグメント用ポインタ DI(デスティネーションインデックス) ESレジスタに対応するセグメント用ポインタ mov命令で代入した値がしっかりと入っている。 この6つのレジスタはプログラマが自由に使用してよいレジスタ。 そしてAX BX CX DX の4つのレジスタに限り上位と下位にそれぞれ分けられる。 ... -
ループ命令
フラグレジスタとジャンプ命令を使えば、繰り返し処理を実現することはできるが これもまた繰り返し処理専用の命令が用意されている。 「loop」命令はフラグレジスタではなく、CXレジスタの値でジャンプを判断します。 まずCXレジスタをデクリメントし、CXレジスタが0以外ならば指定したアドレスに飛びます。 つまりAXレジスタに5,4,3,2,1と加算されていって、 F(15) となるわけです。 -
スタックと特殊汎用レジスタ
特殊汎用レジスタとはこの本(アセンブリ言語の教科書 著:愛甲健二)のみでの読み方なので注意。 これらも一般的に「汎用レジスタ」と定義されている。 データ構造 「スタック」 最後に入った物が最初に取り出せる というデータ入出力方式を「Last In, First Out」又は「First In, Last Out」と呼ぶ。 略:「LIFO」「FILO」 特殊汎用レジスタ BP(ベースポインタ) スタックベースのアドレス SP(スタックポインタ) スタックトップのアドレス 新しい命令が出てきました。 「push」命令は指定した値をスタックへ積み上げる命令。 「pop」命令はスタックのトップから値を取り出す命令。 このプログラムの動きを見てみましょう。 -
命令ポインタ
命令ポインタとは IP(インストラクションポインタ)レジスタのことです。 IPレジスタは現在実行中のプログラムのアドレスを示します。 使用するには -T=[開始アドレス] [実行する命令数] と指定します。 このプログラムではアドレス 0100 から2つの命令を実行しています。 結果からIPレジスタが次々に移っていく様子が分かる。 IPレジスタは実行中のアドレスを示すレジスタでプログラマが変更することはできない。 -
ジャンプ命令
ジャンプ命令 ジャンプ命令には「jmp」を使う。 使う場合は jmp+(アドレス) という風に指定する。 プログラムを戻るジャンプ(上)ならばアドレスは見えているのでそれを指定すればいいが プログラムを進むジャンプ(下)ならばアドレスは見えていないので一工夫必要になる。 最初のjmp命令ではとりあえず適当なアドレス(ここでは0100)を入れておいてあとから書き加えるというもの。 書き加えられたところには jmp 010A という命令があり、アドレス0106から010Aにジャンプすることになっている。 つまりプログラムはアドレス0108のadd命令を実行せずに終わり、結果として最初に代入された値のままになっている。 このようにあとから変更することも可能。 ちなみにjmp命令のオペランドにはレジスタも指定可能。その場合はレジスタの値のアドレスにジャンプ... -
加算と減算
加算 加算するには「add」命令を使う。 add命令はデスティネーションオペランドにソースオペランドを加算する。 結果として AX に BX を加算した 4 が表示されている。 add命令が実行してもBXレジスタの値は変わらないので 3 のまま 減算 減算するには「sub」命令を使う インクリメントとデクリメント インクリメント(increment)とは1だけ加算するということ。 デクリメント(decrement)とは1だけ減算することをいう。 1だけ加算、減算する場合はadd sub よりこちらを利用したほうがよい。 -
プラグイン/ニュース
ニュース @wikiのwikiモードでは #news(興味のある単語) と入力することで、あるキーワードに関連するニュース一覧を表示することができます 詳しくはこちらをご覧ください。 =>http //atwiki.jp/guide/17_174_ja.html たとえば、#news(wiki)と入力すると以下のように表示されます。 ウィキペディアを作ったiMacが箱付きで競売に登場。予想落札価格は約96万円!(ギズモード・ジャパン) - Yahoo!ニュース - Yahoo!ニュース メトロイド ドレッド攻略Wiki - Gamerch(ゲーマチ) ツムツム攻略Wiki|ゲームエイト - Game8[ゲームエイト] 【グランサガ】リセマラ当たりランキング - グランサガ攻略wiki - Gamerch(ゲーマチ) アイプラ攻略Wiki|アイドリー... -
トップページ
@wikiへようこそ ウィキはみんなで気軽にホームページ編集できるツールです。 このページは自由に編集することができます。 メールで送られてきたパスワードを用いてログインすることで、各種変更(サイト名、トップページ、メンバー管理、サイドページ、デザイン、ページ管理、等)することができます まずはこちらをご覧ください。 @wikiの基本操作 用途別のオススメ機能紹介 @wikiの設定/管理 分からないことは? @wiki ご利用ガイド よくある質問 無料で会員登録できるSNS内の@wiki助け合いコミュニティ @wiki更新情報 @wikiへのお問合せフォーム 等をご活用ください @wiki助け合いコミュニティの掲示板スレッド一覧 #atfb_bbs_list その他お勧めサービスについて 大容量1G、PHP/CGI、MySQL、FTPが使える無料ホームページは@PAGES 無... -
プラグイン
@wikiにはいくつかの便利なプラグインがあります。 アーカイブ コメント ニュース 人気商品一覧 動画(Youtube) 編集履歴 関連ブログ これ以外のプラグインについては@wikiガイドをご覧ください = http //atwiki.jp/guide/ -
プラグイン/コメント
コメントプラグイン @wikiのwikiモードでは #comment() と入力することでコメントフォームを簡単に作成することができます。 詳しくはこちらをご覧ください。 =>http //atwiki.jp/guide/17_60_ja.html たとえば、#comment() と入力すると以下のように表示されます。 名前 コメント -
プラグイン/人気商品一覧
人気商品一覧 @wikiのwikiモードでは #price_list(カテゴリ名) と入力することで、あるカテゴリの売れ筋商品のリストを表示することができます。 カテゴリには以下のキーワードがご利用できます。 キーワード 表示される内容 ps3 PlayStation3 ps2 PlayStation3 psp PSP wii Wii xbox XBOX nds Nintendo DS desctop-pc デスクトップパソコン note-pc ノートパソコン mp3player デジタルオーディオプレイヤー kaden 家電 aircon エアコン camera カメラ game-toy ゲーム・おもちゃ全般 all 指定無し 空白の場合はランダムな商品が表示されます。 ※このプラグインは価格比較サイト@PRICEのデータを利用しています。 ... -
プラグイン/編集履歴
取得中です。 -
プラグイン/アーカイブ
アーカイブ @wikiのwikiモードでは #archive_log() と入力することで、特定のウェブページを保存しておくことができます。 詳しくはこちらをご覧ください。 =>http //atwiki.jp/guide/25_171_ja.html たとえば、#archive_log()と入力すると以下のように表示されます。 保存したいURLとサイト名を入力して"アーカイブログ"をクリックしてみよう サイト名 URL -
プラグイン/関連ブログ
関連ブログ @wikiのwikiモードでは #bf(興味のある単語) と入力することで、あるキーワードに関連するブログ一覧を表示することができます 詳しくはこちらをご覧ください。 =>http //atwiki.jp/guide/17_161_ja.html たとえば、#bf(ゲーム)と入力すると以下のように表示されます。 #bf -
プラグイン/動画(Youtube)
動画(youtube) @wikiのwikiモードでは #video(動画のURL) と入力することで、動画を貼り付けることが出来ます。 詳しくはこちらをご覧ください。 =>http //atwiki.jp/guide/17_209_ja.html また動画のURLはYoutubeのURLをご利用ください。 =>http //www.youtube.com/ たとえば、#video(http //youtube.com/watch?v=kTV1CcS53JQ)と入力すると以下のように表示されます。 - @wiki全体から「フラグレジスタと条件分岐」で調べる