Создание infinte файла программой сборки, но остановка, когда это не предполагается - PullRequest
0 голосов
/ 06 апреля 2019

Я создаю программу на ассемблере, используя tasm ассемблер, я пытаюсь сделать бесконечный цикл процедуры "buat".Эта процедура создает бесконечные файлы с именем случайное целое число.Но когда я запускаю эту программу с помощью DOSbox, она только успешно создает около 6–3 файлов, а затем программа останавливается.Кстати, исполняемый файл этой программы я делаю как .COM.

Я пытался проверить программу в emu8086, но emu8086 только смог показать мне, что переменная "Rnd" изменяется бесконечно.Я подозреваю, что моя программа остановилась, когда не удается закрыть недавно созданный файл, потому что, когда я пытаюсь удалить все файлы, которые были созданы, будет один файл, который нельзя удалить, потому что он все еще открыт DOSbox.Есть ли какой-либо предел инструкций, которые может выполнять TASM?или DOSbox?

Вот часть кода, которая создает бесконечные файлы

create:
    call buat

buat proc
    ;call loading       
    jmp lop

lop:
    call random
    cmp ax,0
    jg good
    NEG AX

good:
    MOV BX, 10;#4 base, we divide by it
    MOV SI, 0;#4 first position after the "Tnt/" of RndFile
    opt:
        CMP AX, 10000;#4not 5 digits
        JAE bra
        IMUL bx
        JMP opt

bra:
    W:
        MOV DX, 0
        DIV BX ;#3Divide number (AX) by base (BX)
        ADD DL, 48;#3char
        MOV Rnd[SI], DL
        INC SI
        CMP AX, 0
        JE done
    JMP W   

done:      
    mov dl, "."
    mov rnd[si],dl

    inc si
    mov dl, "e"
    mov rnd[si],dl

    inc si
    mov dl, "x"
    mov rnd[si],dl

    inc si
    mov dl, "e"
    mov rnd[si],dl

    lea dx, rnd
    mov cx, 0h
    mov ah, 3Ch
    int 21h

    mov ah, 3Eh
    int 21h
    jmp lop

    ret
endp

randgen proc
    mov ah, 2ch
    int 21h 
    xor ax,ax
    mov al,dl   
    xor dx,dx
    mov bx,10
    div bx

    ret                       
endp

random proc
    call randgen
    mov [ones], dl


    call randgen
    mov [tens], dl


    call randgen
    mov [hundsa], dl 

    mov ax, 0
    mov bx, 0
    mov bl, 10

    mov al, tens
    mul bl 
    mov tens, al

    mov ax, 0
    mov bx, 0
    mov bl, 100

    mov al, hundsa
    mul bl 
    mov hundsa, al
    mov hundsb, ah  

    mov al, hundsa
    mov ah, hundsb
    mov numb, ax

    mov ax, 0
    mov al, tens
    add numb, ax 

    mov ax, 0
    mov al, ones
    add numb, ax
    mov ax, numb
    ret
endp

Я ожидаю, что эта программа будет непрерывно создавать файлы, если я не закрою DosBox

...