
いつも、お世話になっております。
小生、只今、WindowsXPSP3上でnasm0.99.6を使いアセンブリ言語を勉強しています。
今回質問させて頂き点を、ピックアップすると以下の構文です。
12行目のmov ax, word [msgBack]
16行目のmov word [es:di], ax
23行目のmov byte [es:edi], 'A'
50行目times 510 - ($ - $$) db 0
そして以下にソースコード全体を記述させて頂きます。
1[org 0]
2[bits 16]
3jmp0x07C0:start; far jmpする。
4
5start:
6movax, cs; csには0x07C0が入っている
7movds, ax; dsをcsと同じくする
8
9movax, 0xB800; ビデオメモリのセグメントを
10moves, ax; esレジスタに入れる
11movdi, 0; 一番上の頭の部分から書く
12movax, word [msgBack]; 書く予定のデータの住所を指定する
13movcx, 0x7FF; 画面全体に書くためには
14; 0x7FF(10進数 2047)個のWORDが必要
15paint:
16movword [es:di], ax; ビデオメモリに書く
17adddi,2; 1つのWORDを書いたので、2を加える
18deccx; 1つのWORDを書いたので、CXの値を1つ引く
19jnzpaint; CXが0じゃないと、paintにジャンプし、
20; 残りを書く
21
22movedi, 0; 一番上の頭の部分に書く
23movbyte [es:edi], 'A'; ビデオメモリに書く
24incedi; 1つのBYTEを書いたので、1を加える
25movbyte [es:edi], 0x06; 背景色を描く
26incedi; 1つのBYTEを書いたので、1加える
27movbyte [es:edi], 'B'
28incedi
29movbyte [es:edi], 0x06
30incedi
31movbyte [es:edi], 'C'
32incedi
33movbyte [es:edi], 0x06
34incedi
35movbyte [es:edi], '1'
36incedi
37movbyte [es:edi], 0x06
38incedi
39movbyte [es:edi], '2'
40incedi
41movbyte [es:edi], 0x06
42incedi
43movbyte [es:edi], '3'
44incedi
45movbyte [es:edi], 0x06
46
47jmp$; ここで無限ループに入る
48
49msgBack db'.', 0xE7; 背景に使う文字
50
51times510-($-$$) db 0 ; ここから509番地まで0で詰める
52 dw0xAA55; 510番地に0x55を、511番地に0xAAを
53; 入れておく
以下、私の憶測でコードの動作を記述させて頂きます。
12行目のmov ax, word [msgBack]
・axレジスタに、wordで表された、msgBackのアドレスを格納している。
16行目のmov word [es:di], ax
・wordのデータになる、es:di(esに対して、diがオフセットアドレスと見て)、axのデータを格納している。
23行目のmov byte [es:edi], 'A'
・byteのデータになる、es:ediに対して、'A'と言う値を格納している。
50行目times 510 - ($ - $$) db 0
・これに関しては全くわかりません。$がそのそもよくわかりません。
お忙しい中、誠に恐縮ではありますが、以上をご確認して頂き、
先輩方、ご教示宜しくお願い致します。
No.2ベストアンサー
- 回答日時:
>12行目のmov ax, word [msgBack]
>・axレジスタに、wordで表された、msgBackのアドレスを格納している。
これは、msgBack 番地の内容を ax にロードしているのではないですか?
>23行目のmov byte [es:edi], 'A'
>・byteのデータになる、es:ediに対して、'A'と言う値を格納している。
edi じゃなくて、di ですよね。
>50行目times 510 - ($ - $$) db 0
>・これに関しては全くわかりません。$がそのそもよくわかりません。
$ も $$ もアセンブラー(NASM)の特殊シンボルです。
NASM Manual
http://www7a.biglobe.ne.jp/~iell/nasm/nasmdoc_2. …
3.5 Expressions
NASMには2つの特別なシンボル($、$$)があります。
$はそれが使用された行の先頭アドレスを意味します。
$$はそれが使用されたセクションの先頭を意味します。
使用例:
jmp $ ;無限ループ
jmp ($-$$) ;セクション先頭へジャンプ
sakusaker7さん、ご回答頂き誠にありがとうございます。
誤記が多くて誠に申し訳ございません。
ご教示頂いた知識、とても参考になり勉強になりました。
$と$$のご解説も、ネット上で調べた情報よりもsakusaker7さんのご解説の方が私にはより深く理解できました。
一度、コードを書いて実験してみようと思います。
心より感謝申し上げます。
No.1
- 回答日時:
Tacosanさん、ご回答頂き誠にありがとうございます。
ご教示頂いたサイト様の方、拝見させて頂き勉強してみます。
>自分で調べればよいかと.
仰る通りです。
再度、自分で調べてあせらず、じっくりと考えて行きたいと思います。
ご回答、心より感謝申し上げます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- ドイツ語 esの使い方と訳を教えてください。 2 2022/08/15 13:24
- 面接・履歴書・職務経歴書 現在24卒で就職活動をしているものです。 オンラインで履歴書を提出するのですが、ファイルはどのような 0 2023/03/13 02:07
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/03/09 16:55
- 生物学 ES細胞は、体細胞に遺伝子を導入することによってつくられますか? ES細胞でないなら何か教えてくださ 1 2022/06/17 23:50
- ドイツ語 若い頃、聞いたので記憶が少し曖昧ですが、次のドイツ語の原典をご教示ください。(意訳で「死は全てを解決 1 2023/06/15 11:36
- 書類選考・エントリーシート 就活の志望理由ってどう書くんですか? サイト見るとすごいしっかり書いてあるes多くて。。。 9 2023/04/09 15:16
- 新卒・第二新卒 就活 どうしたら 2 2022/05/24 06:16
- 就職 とある企業、エントリー期限がまだ先だったので、期限に間に合うようにエントリーシートを出し、WEBテス 3 2023/08/04 11:04
- 新卒・第二新卒 就活の書類選考や面接に関する悩みです。 ESの選考結果前に限られた人数で個人面談をしている意図はなん 1 2022/04/06 14:50
- 書類選考・エントリーシート ショック受けた時どうしてますか? 美大就活生です。今第1志望群である5社のES出した内、3社のESが 4 2023/05/01 19:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel上の競馬データをMySQに格納
-
データベースファイル(.db)を開...
-
java
-
レジストリとは?
-
ACCESSデータベースの権限
-
MYSQLが優位な点は?
-
phpMyAdminにおいて閲覧した時...
-
access VBAを勉強中です。DA...
-
fedora19でrootでguiログインし...
-
PHPサイトで、PCサイトか...
-
ウイルスバスター 2006 で・・・
-
ファイルメーカーのポータル
-
phpMyAdmin2.6.0でDBのバックア...
-
CentOSでApache・PHP
-
【MS Excel について】 初めて...
-
phpMyAdminを利用してデータベ...
-
mysqlimportの使い方について
-
MySQL文字化け(サイト上のみ)
-
ホスト言語でテーブル更新
-
データベース作成(SQL)のための...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
NASMアセンブリの構文でわから...
-
csvファイルの改行について
-
エクセルのマクロについて
-
データベースファイル(.db)を開...
-
PL/SQLで@ファイル名が反応しま...
-
PL/SQLをWindowsのBATファイル...
-
あるDBから別のDBのテーブルをs...
-
sql*loader 数値のロード
-
create databaseがうまくいきま...
-
mySQLのデータベースにhtmlのコ...
-
数字で「そ」と「り」
-
同じSQL文で極端に検索が遅くな...
-
mysqlにおけるホストのパーセン...
-
DBファイルの中身を直接見れな...
-
SQLServerのselect文でデータ数...
-
複数行をINSERTで『ORA-00911: ...
-
Mysqlのデータベースのリンク
-
メンテナンスプランについて
-
ユーザにインフォメーション ス...
-
comment on columnについてわか...
おすすめ情報