敬业的IT人 >> 编程开发 >> 其他语言 >> 汇编源码--basmain

汇编源码--basmain

敬业的IT人 互联网 佚名 2008-2-19 13:58:26
    ·汇编源码--BRK
    ·汇编源码--CLOCK
    ·汇编源码--BURNOUT
    ·汇编源码--DOSSYM
    ·汇编源码--circle
    ·汇编源码--DEV
    ·汇编源码--getspace
    ·汇编源码--CLEAR
    ·汇编源码--col
    ·汇编源码--gameport
extrn$$main:far csegsegment para public 'code' ; This program is used to set the PSP address for a compiled BASIC program. ; The PSP segment is saved at 0:4F2H. ; It can also be used to limit the maximum memory available to a compiled ; BASIC program. The option '/M:nnn' is used on the command line, where ; nnn is the number of K-bytes the program is limited to. If no, /M option ; is specified, no memory limitation takes place. For example, '/M:64' would ; limit the program to 64*1024 bytes. The range for nnn is 64 to 1024. ; This routine gets control before BASIC, does its handiwork, and then ; passes control to the BASIC program. It must be linked as follows: ; LINK BASMAIN+yourprog,yourprog,NUL.MAP,BASCOM ; If BASMAIN is unable to limit memory as requested, a message is displayed ; and the execution of the program is continued. publicbasmain basmain proc far assume cs:cseg,ds:cseg,ss:nothing,es:nothing push ds ; save ds xor ax,ax mov ds,ax; ds=0 mov si,4f2h; dos communications area mov ax,es; get psp seg mov [si],ax; save psp in dos comm area pop ds; restore ds mov si,80h; point to command line mov ch,0 mov cl,[si]; get length of command line jcxz p025; it's zero p010:inc si mov al,[si]; get char from command line cmp al,'/' ; is it a slash? jnz p020; no mov ax,[si+1]; get next 2 chars cmp ax,':M' ; is it M: ? jz p030 ; yes cmp ax,':m' ; is it m: ? jz p030 ; yes p020:loop p010; check next char p025:jmp p080; no /m: or /M: found p030:; found /m: or /M: add si,3; point to first number mov ax,0 mov bx,0 mov cx,10 p040:mov bl,[si]; get character cmp bl,'0' ; out of range? jb p050 ; yes cmp bl,'9' ; out of range? ja p050 ; yes sub bl,'0' ; convert to binary mul cx; multiply ax by 10 add ax,bx; add new digit inc si; point to next char jmp p040; continue p050:; got value in ax cmp ax,64; less than 64K? jb p060 ; yes - print msg cmp ax,1024; greater than 1024K? ja p060 ; yes - print msg mov cl,6 sal ax,cl; convert from KB to paragraphs (*64) mov bx,es; get psp add bx,ax; new top of memory mov si,2; point to top of memory in psp mov ax,[si]; get current top of memory cmp ax,bx; is new setting larger? jae p055; no mov dx,offset msg2; yes - print msg jmp p065 p055:mov [si],bx; save new top of memory jmp p080 p060:mov dx,offset msg1; print the message p065:add dx,100h; fudge for the psp mov ah,9 int 21h p080:jmp $$main; jump to BASIC's start point msg1db 'Memory specification must be from 64 to 1024',7,10,13,'$' msg2db 'Unable to limit memory',7,10,13,'$' basmain endp csegends endbasmain ; must be a main program! 进入讨论组讨论。
粤ICP备06119539号
Copyright CiscoSky.Org,Some Rights Reserved.
Email:me1228#tom.com