3: 2004-12-15 (水) 18:06:26 [6] | 4: 2004-12-15 (水) 18:06:26 [7] | ||
---|---|---|---|
Line 8: | Line 8: | ||
*** 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> | ||
Line 63: | Line 63: | ||
-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"); | ||
Line 153: | Line 153: | ||
-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"] | ||
Line 164: | Line 164: | ||
[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 |
(This host) = http://osask.net