一个朋友写的操作系统源码

源代码在线查看: rdconfig.asm

软件大小: 2890 K
上传用户: Rebecca_SYF
关键词: 操作系统 源码
下载地址: 免注册下载 普通下载 VIP

相关代码

				
				sseg segment stack
				
				     db 128 dup (0)
				
				sseg ends
				
				dseg segment para public 'global'
				
				     extrn parambuf:byte
				     extrn paramnr:word
				     configpath db 'config.txt',0  ; file name to be open
				
				dseg ends
				
				cseg segment para public 'code'
				
				     assume cs:cseg,ds:dseg,ss:sseg
				
				     public rdconfig,chksynx
				
				     extrn panic:near
				
				     rdconfig proc near
				
				     push ds  ; save caller's segment
				     push es
				     push bp  ; make stack frame
				     mov bp,sp
				
				     mov ax,3d00h  ; read only open file         
				     mov dx,offset configpath
				     int 21h
				     jnc suc
				     ; don't clear carry if error detected
				     mov sp,bp
				     pop bp  ; restore stack frame
				     pop es
				     pop ds
				     ret     ; leave error code in ax
				
				suc:
				     mov bx,ax    ;we will read the config file
				     xor ax,ax
				     mov ah,3fh
				     mov dx,offset parambuf
				     mov cx,1024
				     int 21h
				     jnc suc1
				     mov sp,bp
				     pop bp
				     pop es
				     pop ds
				     ret
				suc1:
				     mov [paramnr],ax   ; indicate how many byte we read from config file
				     clc                ; guaratee no error
				
				     ; the file handler is already set properly
				
				     mov ah,3eh
				     int 21h            ; close config file
				
				     ; we don't care if this operating is successful
				
				     mov sp,bp
				     pop bp
				     pop es
				     pop ds
				     ret
				
				     rdconfig endp
				
				
				     chksynx proc near
				
				     push ds
				     push es
				     push bp
				     mov bp,sp
				
				     sub sp,4
				
				     ; stack arranges like this
				
				     ; [bp-2] : first '/' char position
				     ; [bp-4] : first '$' char position
				
				     ; try to find the '#', if '#' not present in our parameter
				     ; buf, we will refuse to continue operating and panic
				
				     cmp word ptr [paramnr],0    ; configuration file can't be NULL
				     jne cnext1
				     mov ax,105
				     push ax
				     call panic
				cnext1:
				     cld                 ; clear direction
				     mov di,offset parambuf
				     mov cx,[paramnr]
				     mov al,35           ; '#'
				     repnz scasb         ; find first '#' char
				     jz found1
				     mov ax,100          ; get appropriate error code
				     push ax
				     call panic
				found1:
				
				     ; '/' should be first encounted
				
				     cld                 ; clear direction
				     mov di,offset parambuf
				     mov cx,[paramnr]
				     mov al,47           ; '/'
				     repnz scasb         ; find first '/' char
				     jz found2
				     mov ax,106
				     push ax
				     call panic
				found2:
				     mov [bp-2],di       ; save position of '/'
				     cld                 ; clear direction
				     mov di,offset parambuf
				     mov cx,[paramnr]
				     mov al,36           ; '$'
				     repnz scasb         ; find first '$' char
				     jz found3
				     mov ax,106
				     push ax
				     call panic
				found3:
				     mov [bp-4],di
				     cmp [bp-2],di       ; who is big?
				     jb right
				     mov ax,106
				     push ax
				     call panic
				right:
				     mov sp,bp
				     pop bp
				     pop es
				     pop ds
				     ret
				
				     chksynx endp
				
				cseg ends
				
				end
				
							

相关资源