3: 2004-12-15 (水) 18:06:26 |
4: 2004-12-15 (水) 18:06:26 |
| | | |
| *** countdown | | *** countdown |
- | -C版:"cntdwnc1.c" [osa_dir2では 616バイト] | + | -C版:"cntdwnc1.c" [osa_dir2では 617バイト] |
| /* "cntdwnc1.c":countdwnをC言語で記述した例 */ | | /* "cntdwnc1.c":countdwnをC言語で記述した例 */ |
- | /* stack:20k malloc:1k */ | + | /* stack:4k malloc:1k */ |
| | | |
| #include <guigui00.h> | | #include <guigui00.h> |
| -ASKA版:"cntdwna1.ask" [osa_dir2では 249バイト] | | -ASKA版:"cntdwna1.ask" [osa_dir2では 249バイト] |
| /* "cntdwna1.ask":countdwnをASKAで記述した例 */ | | /* "cntdwna1.ask":countdwnをASKAで記述した例 */ |
- | /* stack:20k malloc:0k */ | + | /* stack:4k malloc:0k */ |
| segment CODE(USE32, PARA); default(code == CODE); asmout("[FILE 'cntdwna1.ask']"); | | segment CODE(USE32, PARA); default(code == CODE); asmout("[FILE 'cntdwna1.ask']"); |
| asmout("GLOBAL _OsaskMain"); | | asmout("GLOBAL _OsaskMain"); |
| -nask版:"cntdwnn1.nas" [osa_dir2では バイト] | | -nask版:"cntdwnn1.nas" [osa_dir2では バイト] |
| ; "cntdwnn1.nas":countdwnをnaskで記述した例 | | ; "cntdwnn1.nas":countdwnをnaskで記述した例 |
- | ; stack:20k malloc:0k | + | ; stack:4k malloc:0k |
| | | |
| [FORMAT "WCOFF"] | | [FORMAT "WCOFF"] |
| [SECTION .text] | | [SECTION .text] |
| GLOBAL _OsaskMain | | GLOBAL _OsaskMain |
- | ;;; | + | |
| _OsaskMain: | | _OsaskMain: |
| MOV EBX,init | | MOV EBX,init |
| CALL 0xc7:0 | | CALL 0xc7:0 |
- | MOV AL,0 | |
| .mainloop: | | .mainloop: |
- | MOV EBX,putstr | + | MOV EAX,100 |
- | MOV CL,10 | + | .countloop: |
- | MOV CH,AL | + | MOV EBX,putnum |
- | SHR CH,1 | + | LEA ESI,[EBX+36] |
- | JC .skip | + | CALL setdec3 |
- | MOV CL,0 | + | |
- | .skip: | + | |
- | MOV [EBX+ 8],CL | + | |
- | MOV [EBX+12],CH | + | |
- | MOV [EBX+20],AL | + | |
- | LEA ESI,[EBX+42] | + | |
- | CALL setdec2 | + | |
| CALL 0xc7:0 | | CALL 0xc7:0 |
- | INC AL | + | DEC EAX |
| CMP AL,16 | | CMP AL,16 |
- | JB .mainloop | + | JNZ .countloop |
- | MOV EBX,sleep | + | MOV EBX,putgo |
| CALL 0xc7:0 | | CALL 0xc7:0 |
| + | JMP .mainloop |
| | | |
| setdec2: | | setdec2: |
| + | PUSH EDX |
| PUSH ECX | | PUSH ECX |
| PUSH EAX | | PUSH EAX |
- | MOV CL,10 | + | XOR EDX,EDX |
- | MOV AH,0 | + | MOV ECX,10 |
| + | DIV ECX |
| DIV CL | | DIV CL |
| OR EAX,'00' | | OR EAX,'00' |
| + | OR DL,'0' |
| CMP AL,'0' | | CMP AL,'0' |
| JNE .skip | | JNE .skip |
| MOV AL,' ' | | MOV AL,' ' |
| + | CMP AH,'0' |
| + | JNE .skip |
| + | MOV AH,' ' |
| .skip: | | .skip: |
| MOV [ESI+0],AL | | MOV [ESI+0],AL |
| MOV [ESI+1],AH | | MOV [ESI+1],AH |
| + | MOV [ESI+2],DL |
| POP EAX | | POP EAX |
| POP ECX | | POP ECX |
| + | POP EDX |
| RET | | RET |
- | | + | ;;; |
- | ; .で始まるラベルはローカルラベル。 | + | |
- | ; ローカルラベルは、次のグローバルラベル宣言までが有効範囲。 | + | |
| [SECTION .data] | | [SECTION .data] |
| ALIGNB 4 | | ALIGNB 4 |