CODE SEGMENT
ASSUME DS:CODE,CS:CODE,ES:CODE,SS:CODE
ORG 100h
START:
mov sp,offset _END ;スタック領域を変更
mov bx,offset _END ;↓自分自身のメモリーを
mov cl,4 ; いくつにすればよいか
shr bx,cl ; 計算する
inc bx ;↑
mov ah,4ah
int 21h ;メモリー変更
mov ah,48h
mov bx,1000h / 16
int 21h ;メモリー割り当て
jc ERR01 ;エラーか?
mov es,ax
call DISP ;割り当てたセグメント表示
mov ah,9
mov dx,offset MSG01 ;メッセージ表示
int 21h
mov ax,4C00h
int 21h ;終了
ERR01: ;エラールーチン
mov ah,9
mov dx,offset ERRMSG01
int 21h
mov ax,4CFFh
int 21h
DISP: ;セグメント表示
mov cx,10h
xor dx,dx
div cx
push dx
or ax,ax
jz DISPE
call DISP
DISPE:
pop dx
add dl,'0'
cmp dl,'9'
jbe DISPE10
add dl,7
DISPE10:
mov ah,2
int 21h
ret
MSG01 db 'が確保できました',0Dh,0Ah,24h
ERRMSG01 db '空きメモリーがありません',0Dh,0Ah,24h
_STACK dw 20 dup(?) ;スタック領域
_END:
ENDS
END START
; 一部のコンパイラでは、
;CODE ENDS
; END START
;と記述しなければいけないようです
|