3: 2009-11-17 (火) 12:08:46  |
現: 2024-01-08 (月) 12:58:43 k-tan  |
| - | * ぐいぐい01に関するメモ-30 | + | TITLE:x |
| | + | * ぐいぐい01に関するメモ-30 [#jd166c93] |
| | -(by [[K]], 2009.08.03) | | -(by [[K]], 2009.08.03) |
| | -メモのうち重要な部分をそのうちまとめてまともなページを作る | | -メモのうち重要な部分をそのうちまとめてまともなページを作る |
| - | *** (42) naskで.g01アプリを作るには?(1) | + | *** (42) naskで.g01アプリを作るには?(1) [#d8843b70] |
| | -[[impressions]]の2009-07-26ごろのfshinoさんのリクエストに答えるために、このセクションは用意されました。 | | -[[impressions]]の2009-07-26ごろのfshinoさんのリクエストに答えるために、このセクションは用意されました。 |
| | -文脈的には[[GUIGUI01/memo27]]の続きだけど、あっちはC言語。こっちはアセンブラ主体です。 | | -文脈的には[[GUIGUI01/memo27]]の続きだけど、あっちはC言語。こっちはアセンブラ主体です。 |
| | GLOBAL _G01Main | | GLOBAL _G01Main |
| | EXTERN _g01_execcmd0 | | EXTERN _g01_execcmd0 |
| | + | |
| | [SECTION .text] | | [SECTION .text] |
| | + | |
| | _G01Main: | | _G01Main: |
| | MOV EAX,msg | | MOV EAX,msg |
| | DB 0x53, 0x00 ; g01_putstr0((char *) EAX); | | DB 0x53, 0x00 ; g01_putstr0((char *) EAX); |
| | RET | | RET |
| | + | |
| | [SECTION .data] | | [SECTION .data] |
| | + | |
| | msg DB "hello, world", 0x0a, 0 | | msg DB "hello, world", 0x0a, 0 |
| | -これです。makeすると64バイトになるでしょう。Makefileは[[GUIGUI01/memo18]]のex0000の例を参考にしてください。 | | -これです。makeすると64バイトになるでしょう。Makefileは[[GUIGUI01/memo18]]のex0000の例を参考にしてください。 |
| | GLOBAL _G01Main | | GLOBAL _G01Main |
| | EXTERN _g01_execcmd0 | | EXTERN _g01_execcmd0 |
| | + | |
| | [SECTION .text] | | [SECTION .text] |
| | + | |
| | _G01Main: | | _G01Main: |
| | MOV AL,0x20 | | MOV AL,0x20 |
| | -ここで、「CALL _g01_execcmd0」の正体を明かしたいと思います。これはライブラリで用意されている関数なのですが、中身はこうなっています。 | | -ここで、「CALL _g01_execcmd0」の正体を明かしたいと思います。これはライブラリで用意されている関数なのですが、中身はこうなっています。 |
| | EXTERN _g01_esi0 | | EXTERN _g01_esi0 |
| | + | |
| | _g01_execcmd0: | | _g01_execcmd0: |
| | XOR EDI,EDI | | XOR EDI,EDI |
| | GLOBAL _G01Main | | GLOBAL _G01Main |
| | EXTERN _g01_esi0 | | EXTERN _g01_esi0 |
| | + | |
| | [SECTION .text] | | [SECTION .text] |
| | + | |
| | _G01Main: | | _G01Main: |
| | MOV AL,0x20 | | MOV AL,0x20 |
| | [BITS 32] | | [BITS 32] |
| | GLOBAL _G01Main | | GLOBAL _G01Main |
| | + | |
| | [SECTION .text] | | [SECTION .text] |
| | + | |
| | _G01Main: | | _G01Main: |
| | MOV AL,0x20 | | MOV AL,0x20 |
| | GLOBAL _G01Main | | GLOBAL _G01Main |
| | EXTERN _g01_execcmd0 | | EXTERN _g01_execcmd0 |
| | + | |
| | [SECTION .text] | | [SECTION .text] |
| | + | |
| | _G01Main: | | _G01Main: |
| | CALL _g01_execcmd0 | | CALL _g01_execcmd0 |
| | -この手法は、当然ex0026の末尾の改行コード出力にも使えます。わざわざAL=0x0a;なんてやってAPIを呼ぶ必要なんてないのです。 | | -この手法は、当然ex0026の末尾の改行コード出力にも使えます。わざわざAL=0x0a;なんてやってAPIを呼ぶ必要なんてないのです。 |
| | | | |
| - | * こめんと欄 | + | * こめんと欄 [#g4dd4525] |
| | | | |
| | #comment | | #comment |