#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