nasm アセンブリ言語で質問です
count.datのファイルから数値を読み取ってインクリメントするプログラムなのですが
以下のコードのCOUNT_INC:からの処理がいまいちモヤモヤします
どなたか詳しくご教授頂けないでしょうか
//-----------------
org 100Hsection .data
FILENAME db 'count.dat', 00H
ERRORTEXT1 db 'ERROR OPEN', 00H
ERRORTEXT2 db 'ERROR READ', 00H
ERRORTEXT3 db 'ERROR WRITE', 00H
CONTENTTYPE db 'Conyent-Type: text/html', 0DH, 0AH, 0DH, 0AH, 00H
section .bss
buffer: resb 64
datalen: resw 1
handle: resw 1
section .text
start:
mov bx, CONTENTTYPE
call PRINT
FILE_OPEN:
mov ax, 3D02H
mov dx, FILENAME
int 21H
jnc FILE_OPEN_OK
mov bx, ERRORTEXT1
call PRINT
jmp PROGRAM_END
FILE_OPEN_OK:
mov [ds:handle], ax
MEN_CLR:
xor ax, ax
mov bx, buffer
mov cx, 64
MEM_CLR_1:
mov [ds:bx], al
inc bx
loop MEM_CLR_1
FILE_DATA_READ:
mov ax, 3F00H
mov cx, 64-1
mov dx, buffer
mov bx, [ds:handle]
int 21H
jnc FILE_READ_OK
mov bx, ERRORTEXT2
call PRINT
jmp PROGRAM_END
FILE_READ_OK:
mov [ds:datalen], ax
COUNT_INC:
mov si, buffer
mov di, buffer
add di, [ds:datalen]
INC_DIGIT:
cmp si, di
jz INC_DIGIT_1
dec di
mov al, [ds:di]
cmp al, '9'
jnz INC_DIGIT_2
sub al, 9
mov [ds:di], al
jmp INC_DIGIT
INC_DIGIT_1:
mov cx, [ds:datalen]
mov si, buffer
add si, cx
mov di, si
dec si
std
INC_DIGIT_LOOP:
movsb
loop INC_DIGIT_LOOP
mov cx, [ds:datalen]
inc cx
mov [ds:datalen], cx
mov al, '1'
mov [ds:buffer], al
jmp COUNT_INC_END
INC_DIGIT_2:
inc al
mov [ds:di], al
COUNT_INC_END:
MOVE_FILE_POINT:
mov ax, 4200H
xor cx, cx
xor dx, dx
mov bx, [ds:handle]
int 21H
FILE_DATA_WRITE:
mov ah, 40H
mov cx, [ds:datalen]
mov dx, buffer
mov bx, [ds:handle]
int 21H
jnc FILE_WRITE_OK
mov bx, ERRORTEXT3
call PRINT
jmp PROGRAM_END
FILE_WRITE_OK:
FILE_CLOSE:
mov ah, 3eH
mov bx, [ds:handle]
int 21H
COUNT_DATA:
mov bx, buffer
//--------------
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。