パスワードを忘れた? アカウント作成
14111340 journal
Intel

route127の日記: ディーふらぐ(アセンブラ) 3

日記 by route127

ブートセクタ内に配置可能な510バイト以内というサイズ縛りアセンブラ本、Programming Boot Sector Games紹介されてたのを見て興味が湧いたのでちょっと読んでみた。
パラパラ眺めながら気になった短い例を打ち込んで試していて、46ページに掲載されたカラフルなHELLO WORLDが目に留まった。
CLDやSTOSWといった今まで使ったことのないニーモニックが使われていたのだ。

ORG 0x0100
MOV AX,0x0002
INT 0x10
MOV AX,0xB800
MOV DS,AX
MOV ES,AX
CLD
XOR DI,DI
MOV AX,0x1A48
STOSW
MOV AX,0x1B45
STOSW
MOV AX,0x1C4C
STOSW
MOV AX,0x1D4C
STOSW
MOV AX,0x1E4F
STOSW
INT 0x20

やってることはテキストVRAM書き込みなので、もしdebug.exeが付属してるなら、

e b800:0 48 1a 45 1b 4c 1c 4c 1d 4f 1e
q

というテキストファイルをdebug.exeにファイル入力で読み込ませれば同じことが実現できる。
しかし今までこれを自力でアセンブラで書き下すことができなかった。

調べながら、これまでES、DSやDIの使い方が分かってなかったことが分かった。
今までMOVで主記憶のアドレス指定して書き込みしようとしたりしていたのだが、同じMOVでもDSやDIを指定してやればよかったのか
ただ今回はSWOSWで書き込んでるのがなんかカッコよくて目についたので、MOVで書かれてたら実際に打ち込んで試してみようと思わなかったかもしれない。

ところでCLDがクリアするDフラグのDが英語圏だとdirectionのようだが日本語圏だとデスティネーションと呼ばれてるような気がする。
MOVSWやSTOSWでSIがインクリメントする方向を制御するのでデスティネーションでも間違いではないとは思いつつもどっちかというとdirectionの方がイメージに合う。

書籍は他にもインベーダー風ゲーム(第7章)、パックマン風ゲーム(第8章)、チェス(第9章)、BASICインタプリタ(第10章)等面白そうな話題が並んでいた。
アセンブラコードはgithubで公開されている。
著者はIOCCCで5度の受賞歴のある1978年生まれのメキシコ人(Òscar Toledo Gutièrrez)なんだそうだ。

著者がおっさんなので第4章のタイトルが"All your memory belongs to us"なのは別に懐ゲーネタなんだな、としか思わなかったけれども、この本の出版された2019年7月の半年前、2019年1月に富裕層増税(所得税の最高税率引上げ)に関する投票がらみで米民主党のオカシオコルテス下院議員がこのネタをつぶやいてたようだ。
1989年生まれの年少議員の懐ゲーネタが珍しかったのか記事にもなっていた
とすると第4章タイトルもゲームネタと見せかけてスペイン語話者としての政治的立場の表明だったりするんだろうか。
そんなわけないか。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by Anonymous Coward on 2020年02月14日 0時15分 (#3761825)

    > ところでCLDがクリアするDフラグのDが英語圏だとdirectionのようだが日本語圏だとデスティネーションと呼ばれてるような気がする。

    うーん、日本語でも「ディレクション」という解説しか見たことがありませんが。
    DI(デスティネーションインデックス)レジスタあたりと混同していたのではないですか?

  • by Anonymous Coward on 2020年02月14日 21時35分 (#3762488)

    LODSW: ax = *si++;
    STOSW: *di++ = ax;
    MOVSW: *di++ = *si++;
    REP MOVSW: while (cx) { *di++ = *si++; --cx; }
    (STDしている場合は++が--になる)
    こんな動作を一命令で書けるのがx86(というかCISC)なんだな。

  • by Anonymous Coward on 2020年02月15日 1時29分 (#3762584)

    > CLDがクリアするDフラグのDが英語圏だとdirectionのようだが日本語圏だとデスティネーションと呼ばれてるような気がする。

    ぐぐればないわけじゃないけど数十件しかヒットしないし、
    https://www.google.com/search?q=%22%E3%83%87%E3%82%B9%E3%83%86%E3%82%A... [google.com]

    x86 のフラグについてはほぼこれが唯一ではないかな
    http://tyunitidenko.x0.com/nd80kl86setumeisyo/asm86usersmanual.pdf [x0.com]

typodupeerror

犯人はmoriwaka -- Anonymous Coward

読み込み中...