FromNandの日記

自分的備忘録

2020-03-01から1ヶ月間の記事一覧

停止性問題についてまとめておく

Wikiがわかりやすかった。 停止性問題 - Wikipedia まず、プログラムが停止するかどうかを判別できるプログラムH(A)が存在したと仮定する。(この仮定が結果的に矛盾を生じる) プログラムH(A)は引数としてプログラムAを取り、プログラムAが停止する場合はYES…

HDDのヘッド・トラック・シリンダー・セクタについて

まず、一つのHDDは複数のディスクがハノイの塔のように重ねられて作成されている。 ヘッドとは、この中のどのディスクを操作するのかという情報だ。(裏表が存在するディスクの場合はその情報も含むことがある) トラックとは、一枚のディスク上に多数存在する…

C言語ではDS, ES, SSを同じ値にしなければならないのはなぜか?

そういう前提を置くことでコンパイラが機械語を生成するときにラクできるから、ということらしいです。 まぁ、DSやES、SSをうまく扱うのは難しそう。 ここで実際の確認コードをある掲示板で見つけたので貼っておく。 #include<stdio.h> int main(void) { int i; int *</stdio.h>…

x86のジャンプ命令とコール命令の詳細

先のこの部分を見ると、色々に勉強できる。 faq/asm - hrb-wiki まず、ジャンプ命令やコール命令について。 これらの命令には大きく分けて「相対short」「相対near」「絶対間接near」「絶対far」「絶対間接far」の5つがあります。 下にx86で使用されているジ…

【VMA・LMA】OSのリンカスクリプトについて思ったこと

こちらも参考にすると良い。 VMAとLMAについて - プログラマ専用SNS ミクプラ 組み込みシステムにおけるアドレスの考え方 (VMA, LMAについて) - FPGA開発日記 簡単に言うとVMAは実際に動作するときのアドレスを意識している。 つまり、プログラムが実際に参…

配列を持った構造体を値渡し・ポインタ渡ししてみる

ポインタ渡し #include<stdio.h> typedef struct { int a; int array[100]; } STR; void func(STR* str){ printf("%d, %d, %d\n", str->a, str->array[0], str->array[30]); return; } int main(void){ STR str; func(&str); return 0; } 結果のアセンブリはこちら 00</stdio.h>…