質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
機械語

機械語とは、プロセッサが直接解釈・実行できる状態の言語です。

アセンブリ言語

アセンブリ言語とは、機械語を人間にわかりやすい形で記述した低水準言語です。

バイナリ

バイナリは、「0」と「1」だけで表現されている2進数のデータ形式。または、テキスト以外の情報でデータが記述されているファイルを指します。コンピューター内の処理は全て2進数で表記されています。

標準出力

標準出力(stdout)は、プログラムが標準的に用いるデータ出力元。標準出力に書き込み要求を発行しすることにより、ディスプレイ装置にデータを表示することができます。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

Q&A

解決済

5回答

1224閲覧

システムコールを使わず、アセンブリ(or機械語)でHello,Worldをディスプレイに出力する難易度。

cat111

総合スコア1

機械語

機械語とは、プロセッサが直接解釈・実行できる状態の言語です。

アセンブリ言語

アセンブリ言語とは、機械語を人間にわかりやすい形で記述した低水準言語です。

バイナリ

バイナリは、「0」と「1」だけで表現されている2進数のデータ形式。または、テキスト以外の情報でデータが記述されているファイルを指します。コンピューター内の処理は全て2進数で表記されています。

標準出力

標準出力(stdout)は、プログラムが標準的に用いるデータ出力元。標準出力に書き込み要求を発行しすることにより、ディスプレイ装置にデータを表示することができます。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

0グッド

0クリップ

投稿2022/08/10 02:15

前提

プログラミング初学者です。
ハードの仕組みに興味があります。お手柔らかに(*_ _)

実現したいこと

文字が画面に出力されるまでのハードウェアの仕組みを知りたくて、機械語(orアセンブリ)でHello,worldを出力する方法を調べています。
しかしネットに転がっているサンプルプログラムは、BiosやOSの機能(システムコール)を使っており、内部の挙動がよくわかりません。。。
また、x86_64において、システムコール無しでそのような事をするのは複雑すぎて現実的ではないとの記事も見ました。

皆様の意見が知りたいです。

質問

1.
BiosやOSの機能を使わないで、画面に文字を出力することはどのくらい難しいのでしょうか。
主観でいいので教えてほしいです。
2.
また、個人でそのような事が可能なのでしょうか。
可能な場合、どのような方法がありますか。

個人的推測

フォントデータを用意してビット単位で画面に出力する事になると思うのですが、
やはり現実的ではない気がしますね…

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

だいたいはフレームバッファをメモリマップするように初期化を済ませれば、あとはbitmapフォントをmemcpyするだけなのでは、、。
VGAならここらを見れば。
https://web.stanford.edu/class/cs140/projects/pintos/specs/freevga/vga/vga.htm

そもそもBIOS(x86)からx64モードに移動するまでがまず面倒臭いし、UEFIでないBIOS(最低でもcsm)とかも最近は流行らないけどね。

投稿2022/08/10 05:56

matukeso

総合スコア1677

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

しかしネットに転がっているサンプルプログラムは、BiosやOSの機能(システムコール)を使っており、内部の挙動がよくわかりません。。。

はい、現代のグラフィックチップはプロプライエタリなものですので、BIOSやAPI経由以外のアクセス方法は一般には公開されていません。

自分でグラフィックカードやドライバを解析して直接制御するプログラムを書くことは、理論的には可能ですが、かかるコストと得られるメリットはおそらく釣り合いません。

投稿2022/08/10 02:35

maisumakun

総合スコア145930

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2022/08/10 02:42

> 内部の挙動がよくわかりません。。。 グラフィックチップメーカーの企業秘密です。
guest

0

文字が画面に出力されるまでのハードウェアの仕組みを知りたくて、

というのがどうして

機械語(orアセンブリ)でHello,worldを出力する方法を調べています。

につながるのかよくわかりませんが...

今どきの「すごい」コンピュータでそういうことをいじろうというのがそもそも間違いだと思います。
昔々の、VRAMにデータを書くとキャラクタジェネレータにアクセスしてドットに対応した信号が出る...みたいなものをいじれるといいように思いますけど、もうそういうのはないかな...
少なくともマイコンでLCDグラフィックをいじる、とかの方が勉強になるのでは。

投稿2022/08/10 14:38

thkana

総合スコア7703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

slemntqe

2022/08/10 14:54 編集

あなたが違和感を覚えている事からご理解頂けると思いますが、質問者は当然そのような分野について無知なわけです。(私も偉そうに言えるほど知っているわけではありません。) 質問者はそれらを疑問に思い、興味を持ち、これから学ぼうとする姿勢を見せています。 その姿勢を「間違いだ」と否定することは良い事とは思いません。 質問者の質問1であえて聞くという事はおそらく質問者自身も難しいことは理解している事が伺えます。 間違いとまで書くのは言い過ぎだと思います。
thkana

2022/08/10 22:32 編集

うん、確かに書き方は悪かったかもですね。 「姿勢」に間違いはなくても、「選んだ方針」としてはそこからは(すくなくとも初心者が)目的地にたどり着けるルートではありませんから、間違いは間違いです。
guest

0

まあ、グラフィックモジュールをVGAモードにできれば、あとはVGAデバイスのレジスタアクセスで文字表示ができます。いわゆるDOS画面で英数限定になりますが。

#まあ、このVGAモードにするのがシステムコールでどーこーということになりますが

投稿2022/08/10 06:22

y_waiwai

総合スコア88024

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

1
私は作ったことがないので知りません。他の方の回答に任せます。

2
BIOSやUEFIにもOSSの物が存在します。
それらのソースコードを読み解くことで自分で実装できるようになるのではないでしょうか。
具体的な例だとUEFIのOSSとしてOVMFが存在しますが単純なUEFIの機能だけでは無いのでもっとシンプルなBIOSやUEFIを探して読み解くと理解しやすいのではと思います。

組み込み系でどのように7セグメントディスプレイを表示しているかなども良い経験になるのではないでしょうか。

投稿2022/08/10 02:26

編集2022/08/10 02:29
slemntqe

総合スコア120

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問