#99 Article 808 Posted at 1993/12/14 09:46:06 by てこ (MAP2384) [ASM]

Subject: Re:*10 メモリのいつでもあいてる場所。 /807 .... /798 /797

えーんうまくいかないーしくしくー。
    と言うわけで、さいごのしゅだん。
    おかしいとこあるでしょうか?


        DOSSEG
        .MODEL COMPACT
        .STACK
        .CODE
        .386

start:

      MOV     AX,CS
      SUB     AX,10H
      MOV     ES,AX                   ;変更するセグメントアドレス
      MOV     BX,1000H                ;変更後のサイズ(Ex:64K)
      MOV     AH,4AH
      INT     21H                     ;ファンクションコー(後略)
      JC      ER

        mov bx,192*1024/16
        mov ah,48h
        int 21h

        jc er

        cld
        push ax        ;割り当てられたの先頭のセグメント。
        push ax
        push ax


        mov ax,0a800h
        mov ds,ax
        xor eax,eax
        mov esi,eax      ;ブルー面から lodsd 。
        pop es           ;stosd 先のセグメント。
        mov eax,0
        mov edi,eax      ;stosd 先のオフセット(ここからブルー)。
        mov cx,500
        call xloop


        mov eax,8000h
        mov edi,eax      ;ここからレッド。
        mov ax,0b000h
        mov ds,ax
        xor eax,eax
        mov esi,eax      ;レッド面から lodsd 。
        mov cx,500
        call xloop


        mov eax,8000h+8000h   ;ここからグリーン。*これがさっきのブルーの所に
        mov edi,eax           ;上書きされてるような気がするんです。
        mov ax,0b800h 
        mov ds,ax
        xor eax,eax
        mov esi,eax      ;グリーン面から lodsd 。
        mov cx,500
        call xloop


        jmp abc


xloop:
        lodsd
        stosd
        lodsd
        stosd
        lodsd
        stosd
        lodsd
        stosd
        lodsd
        stosd
        lodsd
        stosd
        lodsd
        stosd
        lodsd
        stosd
        lodsd
        stosd
        lodsd
        stosd
        lodsd
        stosd
        lodsd
        stosd
        lodsd
        stosd
        lodsd
        stosd
        lodsd
        stosd
        lodsd
        stosd
        loop xloop
        ret



er:

        mov cx,ax        ;cx <-エラーコード。

eloop:

        mov ah,02h
        mov dl,4dh       ;エラーコード分 M を表示。
        int 21h
        loop eloop
        jmp ext

abc:

        pop ds           ;確保したメモリのセグメント。
        mov eax,320      ;4 line 分下から lodsd 。
        mov esi,eax
        mov ax,0a800h
        mov es,ax        ;ブルー面に stosd のセグメントをセット。
        xor eax,eax
        mov edi,eax      ;ブルー面の最初。
        mov cx,500
        call xloop

        mov eax,8000h
        add eax,320
        mov esi,eax      ;4 line 分下からlodsd 。
        mov ax,0b000h
        mov es,ax        ;レッド面に stosd のセグメントをセット。
        xor eax,eax
        mov edi,eax      ;レッド面の最初。
        mov cx,500
        call xloop

        mov eax,8000h+8000h
        add eax,320
        mov esi,eax      ;4 line 分下から lodsd 。
        mov ax,0b800h
        mov es,ax        ;グリーン面に stosd のセグメントをセット。
        xor eax,eax
        mov edi,eax      ;グリーン面の最初。
        mov cx,500
        call xloop


        pop es           ;確保したメモリのセグメント。
        mov ah,49h       ;確保したメモリの解放。
        int 21h

        mov cx,ax
        jae ext

sloop:

        mov ah,02h
        mov dl,53h       ;解放に失敗したら S を表示。
        int 21h
        loop sloop

ext:

        mov         ah,4cH
        int         21H


        end start



                                てこMAP2384