WEB开发网
开发学院软件开发汇编语言 汇编源码系列之fxn 阅读

汇编源码系列之fxn

 2008-04-29 09:33:36 来源:WEB开发网   
核心提示:这个都是过去DOS时代的汇编源码,虽然已经过去了,汇编源码系列之fxn,但是对于学习汇编还是有帮助的,汇编语言只是程序员一门基础语言

这个都是过去DOS时代的汇编源码,虽然已经过去了,但是对于学习汇编还是有帮助的,汇编语言只是程序员一门基础语言,大多人掌握即可,不一定要深入研究.......

     name   FXN4BH
     page   55,132
     title   'FXN4BH --- demo PC-DOS EXEC function'
;
; FXN4BH --- demonstrate use of the
; PC-DOS 2.0 EXEC function call 4BH
;
; Copyright (c) 1983 by Ray Duncan
;
cr    equ    0dh    ;ASCII carriage return
lf    equ    0ah    ;ASCII line feed
               ;
cseg   segment  para public 'CODE'
               ;
     assume  cs:cseg,ds:data,ss:stack
               ;
demo   proc   far
               ;at entry DS & ES = PSP
     push   ds    ;Save address for final
     xor    ax,ax   ;FAR RET to PC-DOS on stack
     push   ax
               ;save copy of SS:SP for use
               ;after return from overlay
     mov    cs:STK_SEG,ss
     mov    cs:STK_PTR,sp
               ;
               ;Reserve 1000H bytes for
               ;this loader and release
               ;the rest of memory for
               ;use by the overlayed program.
     mov    bx,100h  ;ES=segment of PSP of loader
     mov    ah,4ah  ;BX=paragraphs to reserve
     int    21h
               ;make the messages in data
               ;segment addressable
     mov    ax,seg DATA
     mov    ds,ax
     mov    es,ax
               ;jump if memory
               ;de-allocation failed
     jc    ALLOC_ERR
               ;print memory successfully
               ;released
     mov    dx,offset MSG2
     mov    ah,9
     int    21h
               ;
               ;now load and execute
               ;the overlaid program.
     mov    dx,offset PGM_NAME
     mov    bx,offset PAR_BLK
     mov    al,0
     mov    ah,4bh
     int    21h
               ;restore stack pointers
               ;to state before EXEC call
     mov    ss,cs:STK_SEG
     mov    sp,cs:STK_PTR
               ;Make data segment
               ;addressable again
     mov    ax,seg DATA
     mov    ds,ax
               ;print message that loader
               ;successfully regained control
     mov    dx,offset MSG3
     mov    ah,9
     int    21h
               ;now exit to PC-DOS
     ret
alloc_err:          ;come here if memory
               ;cannot be released
     mov    dx,offset MSG1
     mov    ah,9
     int    21h    ;print error message and
     ret         ;exit to PC-DOS
               ;
demo   endp
               ;
               ;these two variables must
               ;reside in Code Segment so
               ;that they are addressable
               ;after return from overlay.
stk_seg dw    0     ;original SS contents
stk_ptr dw    0     ;original SP contents
               ;
cseg   ends
               ;declare a stack area
               ;for use by this loader
stack  segment  para stack 'STACK'
               ;allow 64 bytes in this case
     db    64 dup (?)
stack  ends
               ;declare data segment to
               ;contain variables and tables
data   segment  para public 'DATA'
;
msg1   db    cr,lf
     db    'Unable to release memory.'
     db    cr,lf,'$'
msg2   db    cr,lf
     db    'Memory above loader released.'
     db    cr,lf,'Now loading CHKDSK.COM.'
     db    cr,lf,'$'
msg3   db    cr,lf
     db    'Loader regained control from CHKDSK,'
     db    cr,lf
     db    'now making final exit to PC-DOS.'
     db    cr,lf,'$'
;
               ;drive, path, and name of program
               ;to be loaded and executed.
pgm_name db    'CHKDSK.COM',0
;
par_blk dw    ENVIR   ;segment address of
               ;environment descriptor
               ;
               ;full address of command line
               ;to be passed at offset 80H
     dw    offset CMD_LINE   ;in overlaid
     dw    seg CMD_LINE    ;program's PSP
               ;
               ;full address of default
               ;File Control Block to be
               ;passed at offset 5CH in
     dw    offset FCB1     ;overlaid
     dw    seg FCB1      ;program's PSP
               ;
               ;full address of default
               ;File Control Block to be
               ;passed at offset 6CH in
     dw    offset FCB2     ;overlaid
     dw    seg FCB2      ;program's PSP
;
               ;actual command line tail
               ;to be passed to overlay
cmd_line db    4,' *.*',cr,0
;
               ;first default FCB to
fcb1   db    0     ;be passed to overlay
     db    11 dup ('?')
     db    25 dup (0)
               ;second default FCB to
fcb2   db    0     ;be passed to overlay
     db    11 dup (' ')
     db    25 dup (0)
;
data   ends
               ;declare separate data
               ;segment to contain
               ;environment descriptor
envir  segment  para 'ENVIR'
               ;
               ;Search path used by PC-DOS
               ;to look for commands or
               ;batch files not found in
     db    'PATH=',0 ;the current directory
               ;
               ;Search path used by PC-DOS
               ;to locate COMMAND.COM
     db    'COMSPEC=A:COMMAND.COM',0
     db    0     ;extra 0 byte designates
               ;end of environment
envir  ends
     end    demo


Tags:汇编 源码 系列

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接