ほげほげ日記スマートフォン用の表示で見るほげほげ日記この広告は、90日以上更新していないブログに表示しています。2016-05-09はじめて読む8086読書(技術書)GW中に「はじめて読む8086」という本を読んだ。8086」のことで、今まで連綿と続くx86アーキテクチャを採用した最初のCPU。8086で採用されたx86は16ビット版のx86。8086(x86-16)のアセンプラについてアセンプラを理解するのに必要なCPUやメモリ、I/Oの仕組みと合わせてわかりやすく解説されている。開発環境はMS-DOSを想定しているが、そこら辺は気にする必要はない。汎用レジスタ郡AX(アキュムレータ)BX(ベースレジスタ)CX(カウントレジスタ)DX(データレジスタ)インデックスレジスタ郡SI(ソースインデックス)DI(デスティネーションインデックス)特殊レジスタ郡BP(ベースポインタ)SP(スタックポインタ)IP(インストラクションポインタ)セグメントレジスタ郡CS(コードセグメント)DS(データセグメント)ES(エクストラセグメント)SS(スタックセグメント)あと、フラグレジスタという演算結果の状態を記録するレジスタがある。どのレジスタもサイズは16ビット。汎用レジスタは上位バイトと下位バイトを分けることにより8ビットのレジスタとしても使うことができる。メモリやI/Oとのやり取り8086ではアドレスバスが20本ある。8086で扱えるメモリは1MiB(=2**20バイト)。8086は20本あるアドレスバスの下位16本を利用してI/Oアクセスを行う。8086で扱えるI/Oポートは65536(=2**16)個。メモリへのアクセスなのか、I/Oへのアクセスなのかはアドレスバスとは別に信号を送って区別する。CPUによってはアクセスするアドレスによってメモリへのアクセスなのかI/Oへのアクセスなのかを区別する(メモリマップドI/O)。セグメント方式8086ではメモリ管理にセグメント方式という方法をとっている。メモリ全体はいくつかのセグメント(領域)に分けて管理される。セグメントの始まり(セグメントベース)の物理アドレスはどこでもいいわけではなくて16の倍数でなくてはならない。物理アドレスを16進数20ビットで表したときに一番下の桁が0になっていないといけない。セグメントは連続していなければならない。これは、例えば、一つのセグメントが0x00000から0x00010までと0x00040から0x00100まで、みたいに分かれていてはいけないということを意味する。セグメントベースの物理アドレスから下位4ビット(セグメントの制約からこれはどれも0)を除いた16ビットの数値をセグメントアドレスという。アドレスの指定はセグメントベースとセグメントベースを起点としたオフセットによって行う。オフセットはオフセットアドレスという16ビットの数値で表される。これはつまり、オフセットの最大値は0xffffで1つのセグメントの最大の大きさも0xffffであることを意味する。0x0024)へのアクセスに変換される。この変換はCPUによって行われ、アセンブラでの通常のアドレス指定はオフセットアドレスで行う。セグメントアドレスは用途によってセグメントアドレス郡に格納されているどれかの値をセグメントアドレスとして使う。大事なレジスタがip、sp、bp。(GDBではrip、rsp...2016-03-27GDBGDBの基本的な操作メモ。サンプル用のプログラム。...2016-03-27メモリセグメントメモリセグメントのメモ。月別アーカイブ参加グループテクノロジーはてなブログをはじめよう!yktwwwさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。