★卢培培★ ── 欢迎光临卢培培(goodname008)的BLOG

人生真正的快乐,多在贫家茅舍,少在富室红楼。

用户操作
[即时聊天] [发私信] [加为好友]
卢培培ID:goodname008
79349次访问,排名1255好友0人,关注者0
goodname008的文章
原创 22 篇
翻译 0 篇
转载 5 篇
评论 286 篇
卢培培的公告


只有干不成事的人
没有干不成的事


代码下载说明:请将代码下载地址的链接复制到浏览器的地址栏,按下回车即可正常下载。

最近评论
jingang123gz:在C# 中怎么屏蔽WIN键啊?????
kennylyj:我在做类似的东西的时候遇到一个问题:
由于需要将一些16位的DOS程序的输出导出,因此使用了管道,但直接CreateProcess这些程序是不行的,必须通过ComSpec这个环境变量得到命令行程序的路径并把要运行的DOS程序的路径及相关参数作为命令行程序的参数才行,或者是先运行cmd/command,然后通过标准写端口写入要启动的程序的参数
而这样做却导致系统的虚拟机程序……
mycaibo:原来可以下载呀,我还自己写了一遍,不过说KBDLLHOOKSTRUCT没有定义,也不知道是为什么,谢谢哈
jarcyju:大哥下载不了呀,麻烦发一份给我,谢谢啦
zhuyc0808@gmail.com
wuzhongyi:我认为以上的方案不好,看样子你也是做开发的。先不考虑硬盘本身的分区特点及如何得到更快的访问速度,

现在如果c:\为系统盘,而也是你常用的。那样XP安装完以后要多大?2G左右吧,那么虚拟的内存又会占用1G多,你再装点软件什么的。VS2005+msdn即使你不装在C盘,照样撑死你。
文章分类
收藏
    相册
    其它图片
    文章用图
    A.我的软件
    1.注册表大师 v2.0
    2.窗口间谍
    3.图易贴 v1.1
    B.强烈推荐
    1.VB打造超酷个性化菜单[一]
    2.VB打造超酷个性化菜单[二]
    3.VB打造超酷个性化菜单[三]
    4.剖析VC++函数调用约定
    C.有脚印的地方
    CSDN--中国软件网
    微软中国社区
    微软中文新闻组
    D.开放源代码
    1.鼠标感应器
    2.VB自绘菜单类
    3.你想要钱吗?
    E.友情链接
    1. 凝尘
    2. 羽毛羽毛
    3. 泗水寻芳
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 用汇编写个文件分割器收藏

    新一篇: 利用底层键盘钩子拦载任意按键(回调版) | 旧一篇: 教育实习总结

        今天在把宿舍机器上的东西往家里机器上腾的时候,无意中发现了一年多以前用汇编写的一个文件分割器。这一年过去了,一直没有用汇编,也忘得差不多了。再看这个以前自己用汇编写的小程序时,心里有一种莫名的感觉,于是想放到blog上纪念一下。下面是源代码:

     

    ; File Splitter V1.0

    ; Author: LuPeipei(goodname008)

    ; Date: 2003.11.29

    ; BLOG: http://blog.csdn.net/goodname008

     

    FILE_CREATE     EQU  3CH    ;Create File

    FILE_OPEN       EQU  3DH    ;Open File

    FILE_READ       EQU  3FH    ;Read File

    FILE_WRITE      EQU  40H    ;Write File

    FILE_CLOSE      EQU  3EH    ;Close File

    FILE_MOVEPTR    EQU  42H    ;Move File Pointer

    FILE_DELETE     EQU  41H    ;Delete File

     

    ERR_IFN         EQU  01H    ;Invalid File Number

    ERR_FNF         EQU  02H    ;File Not Found

    ERR_PNF         EQU  03H    ;Path Not Found

    ERR_TMF         EQU  04H    ;Too Many File opened

    ERR_RIO         EQU  05H    ;Refuse Input/Output

    ERR_IFH         EQU  06H    ;Invalid File Handler

     

    ATTR_ARCHIVE    EQU  00H    ;File Attrib: Archive

    ATTR_READONLY   EQU  01H    ;File Attrib: Read-only

    ATTR_HIDDEN     EQU  02H    ;File Attrib: Hidden

    ATTR_SYSTEM     EQU  04H    ;File Attrib: System

     

    MODE_READ       EQU  00H    ;File open Mode: Read-only

    MODE_WRITE      EQU  01H    ;File open Mode: Write-only

    MODE_RW         EQU  02H    ;File open Mode: Read and Write

     

    DSEG SEGMENT

        ERROR_OF    DB 'Failed to open file.',0DH,0AH,'$'

        ERROR_MP    DB 'Failed to move the pointer of file.',0DH,0AH,'$'

        ERROR_FS    DB 'The file size must be more than 1MB and less than 4096MB.',0DH,0AH,'$'

        ERROR_VC    DB 'The number of volume must be more than 1 and less than 100.',0DH,0AH,'$'

        ERROR_CF    DB 'Falied to create file.',0DH,0AH,'$'

        ERROR_WF    DB 'Insufficient disk space.',0DH,0AH,'$'

     

        COMPLETE    DB 'Complete successfully!!!',0DH,0AH

                    DB 'Thank you for using this software.',0DH,0AH,'$'

     

        LOGO        DB 'LPP (R) File Splitter version 1.0',0DH,0AH

                    DB 'Copyright (C) LPP software studio 2003-2004. All rights reserved.',0DH,0AH,0DH,0AH

                    DB 'Options:  1 -- Split       2 -- Combine',0DH,0AH,0DH,0AH

                    DB 'Your choice: $'

     

        PROMPTSF    DB 'Source filename: $'

        FILESIZE    DB 'File size: ',8 DUP('$')

        OPTIONSIZE  DB 'Volume size options: 1 -- Floppy Disk (1.44 MB)    2 -- Custom.',0DH,0AH,0DH,0AH

                    DB 'Your choice: $'

        PROMPTS     DB 'Volume size(MB): $'

        PROMPTTF    DB 'Target filename(don',"'",'t input extend name): $'

        SFSIZE      DD ?

        TFSIZE      DW ?

        SFNUM       DW ?

        TFNUM       DW ?

        SFNAME      DB 65,?,65 DUP(0),'$'

        TFNAME      DB 65,?,65 DUP(0),'.ext',0,'$'

        VSIZE       DB 4,?,4 DUP(0),'$'

        PDIGIT      DB 0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9

        BUFFER      DB 60736 DUP(?),'$'

        FLAG        DB ?

    DSEG ENDS

     

    SSEG SEGMENT STACK

        DB 100 DUP(?)

    SSEG ENDS

     

    CSEG SEGMENT

        ASSUME CS:CSEG,DS:DSEG,SS:SSEG

     

    START:  MOV  AX,DSEG

            MOV  DS,AX

     

            LEA  DX,LOGO            ;print Author ,Copyrights and options

            MOV  AH,9H

            INT  21H

     

            MOV  AH,1H              ;get user choice

            INT  21H

            CALL PRINTCRLF

     

            CMP  AL,'1'             ;1 -- Split       2 -- Combine

            JE   SPLIT

            CMP  AL,'2'

            JE   COMBINE

            MOV  AH,4CH

            INT  21H

     

    COMBINE:CALL COMBINEMODULE

     

    SPLIT:  CALL SPLITMODULE

     

    ;----------------------------------------------------------------------------

     

    COMBINEMODULE PROC

            MOV  PROMPTTF[15],':'

            MOV  PROMPTTF[16],' '

            MOV  PROMPTTF[17],'$'

            LEA  DX,PROMPTTF        ;print "Target filename:"

            MOV  AH,9H

            INT  21H

     

            LEA  DX,TFNAME          ;get the target filename from user

            MOV  AH,0AH

            INT  21H

     

            MOV  DL,TFNAME+1        ;set the last filename char to 0

            XOR  DH,DH

            MOV  DI,DX

            MOV  TFNAME[DI+2],0

            CALL PRINTCRLF

     

            LEA  DX,TFNAME+2        ;create target file

            MOV  AH,FILE_CREATE

            MOV  CX,ATTR_ARCHIVE

            INT  21H

            MOV  TFNUM,AX           ;save target file number to TFNUM

            JNC  COK_CF             ;if error then EXIT

            LEA  DX,ERROR_CF

            MOV  AH,9H

            INT  21H

            MOV  AH,4CH

            INT  21H

     

    COK_CF: LEA  DX,PROMPTSF        ;print "Source filename:"

            MOV  AH,9H

            INT  21H

     

            LEA  DX,SFNAME          ;get the source filename from user

            MOV  AH,0AH

            INT  21H

            CALL PRINTCRLF

     

            MOV  DL,SFNAME+1        ;set the last filename char to 0

            XOR  DH,DH

            MOV  DI,DX

            LEA  DI,SFNAME[DI]      ;source filename extendsion's number --> DI

            MOV  BYTE PTR [DI+2],0

            MOV  BYTE PTR [DI+3],'$'

            CALL PRINTCRLF

            CALL PRINTCRLF

     

            MOV  TFSIZE,0FFFFH      ;copy 1048576 bytes per time

            XOR  AX,AX

     

    C_NEXT: PUSH AX

            CALL HEXTODECASC        ;change source file extend name

            MOV  BX,AX

     

            LEA  DX,SFNAME+2        ;open source file

            MOV  AH,FILE_OPEN

            MOV  AL,MODE_READ

            INT  21H

     

            MOV  SFNUM,AX           ;save source file number

            JNC  COK_OF             ;if error then EXIT

     

            CMP  BX,0               ;if complete the EXIT

            JNE  EXITCSU

     

            CALL PRINTCRLF

            LEA  DX,ERROR_OF        ;print "Falied to open file."

            MOV  AH,9H

            INT  21H

            MOV  AH,4CH

            INT  21H

     

    EXITCSU:CALL PRINTCRLF

            LEA  DX,COMPLETE        ;print "Complete successfully ..."

            MOV  AH,9H

            INT  21H

            MOV  AH,4CH

            INT  21H

     

    COK_OF: LEA  DX,SFNAME+2        ;print source filename

            MOV  AH,9H

            INT  21H

            MOV  DL,'.'             ;print "......"

            MOV  AH,2H

            INT  21H

            INT  21H

            INT  21H

            INT  21H

            INT  21H

            INT  21H

            CALL PRINTCRLF

     

    CCOPY:  CALL COPYBYTES

            JC   EXITCWF            ;if disk full then EXIT

            CMP  FLAG,1             ;if complete then EXIT

            JNE  CCOPY

     

            MOV  BX,SFNUM           ;close source file

            MOV  AH,FILE_CLOSE

            INT  21H

     

            POP  AX

            INC  AX

     

            JMP  C_NEXT

     

    EXITCWF:CALL PRINTCRLF

            LEA  DX,ERROR_WF        ;print "Insufficient disk space."

            MOV  AH,9H

            INT  21H

            MOV  AH,4CH

            INT  21H

     

    COMBINEMODULE ENDP

     

    ;----------------------------------------------------------------------------

     

    SPLITMODULE PROC

            LEA  DX,PROMPTSF        ;print "Source filename:"

            MOV  AH,9H

            INT  21H

     

            LEA  DX,SFNAME          ;get the source filename from user

            MOV  AH,0AH

            INT  21H

            CALL PRINTCRLF

     

            MOV  DL,SFNAME+1        ;set the last filename char to 0

            XOR  DH,DH

            MOV  SI,DX

            MOV  SFNAME[SI+2],0

            CALL PRINTCRLF

     

            LEA  DX,SFNAME+2        ;open source file

            MOV  AH,FILE_OPEN

            MOV  AL,MODE_READ

            INT  21H

            JNC  SOK_OF             ;if error then EXIT

            LEA  DX,ERROR_OF

            MOV  AH,9H

            INT  21H

            MOV  AH,4CH

            INT  21H

     

    SOK_OF: MOV  SFNUM,AX           ;save source file number

            MOV  BX,AX

            XOR  CX,CX              ;get the length of file(Bytes) --> DX:AX

            XOR  DX,DX

            MOV  AL,02H

            MOV  AH,FILE_MOVEPTR

            INT  21H

            JNC  SOK_MP             ;if error occured then EXIT

            LEA  DX,ERROR_MP

            MOV  AH,9H

            INT  21H

            MOV  AH,4CH

            INT  21H

     

    SOK_MP: CMP  DX,0010H           ;if the length of file is less than 1MB or more than 4096MB then EXIT

            JB   EXIT_FS

            CMP  DX,0FFF0H

            JNA  SOK_FS

    EXIT_FS:LEA  DX,ERROR_FS

            MOV  AH,9H

            INT  21H

            MOV  AH,4CH

            INT  21H

     

    SOK_FS: MOV  WORD PTR SFSIZE,AX

            MOV  WORD PTR SFSIZE+2,DX

            MOV  AX,DX              ;the length of file(MB) --> AX

            MOV  CL,4

            SHR  AX,CL

     

            PUSH AX                 ;save the length of file to stack

            MOV  DX,AX

            LEA  BX,FILESIZE[11]

            CALL HEXTODECASC5

            MOV  FILESIZE[DI+11],'.'

            MOV  FILESIZE[DI+12],'0'

     

            MOV  AX,WORD PTR SFSIZE+2

            AND  AX,000FH           ;calculate the point part (XXXX.p MB)

            LEA  BX,PDIGIT

            XLAT

            MOV  DX,AX

            LEA  BX,FILESIZE[DI+12]

            CALL HEXTODECASC5

     

            MOV  FILESIZE[SI+11+1],'0'

            LEA  DX,FILESIZE

            MOV  AH,9H

            INT  21H

            MOV  AH,2H              ;show ' MB' after source file size

            MOV  DL,' '

            INT  21H

            MOV  DL,'M'

            INT  21H

            MOV  DL,'B'

            INT  21H

            CALL PRINTCRLF

            CALL PRINTCRLF

     

            MOV  BX,SFNUM           ;set file pointer to 0000:0000

            XOR  CX,CX             

            XOR  DX,DX

            MOV  AL,00H

            MOV  AH,FILE_MOVEPTR

            INT  21H

     

            LEA  DX,OPTIONSIZE      ;print volume size options information

            MOV  AH,9H

            INT  21H

     

            MOV  AH,1H              ;get user choice

            INT  21H

            CALL PRINTCRLF

     

            CMP  AL,'1'             ;1 -- Floppy Disk (1.44 MB)    2 -- Custom.

            JE   FLP

            CMP  AL,'2'

            JE   CUSTOM

            MOV  AH,4CH

            INT  21H

                                    ;if FLOPPY then check file size

    FLP:    CMP  WORD PTR SFSIZE+2,0016H

            JB   EXIT_VC

            JE   CMPLOW

            MOV  AX,WORD PTR SFSIZE+2

            CMP  AX,8B0H

            JA   EXIT_VC

            JMP  SOK_VC

    CMPLOW: CMP  WORD PTR SFSIZE,3E00H

            JB   EXIT_VC

            JMP  SOK_VC

     

    CUSTOM: LEA  DX,PROMPTS         ;print "Volume size:"

            MOV  AH,9H

            INT  21H

     

            LEA  DX,VSIZE           ;get volume size to AX (n:MB)

            CALL RECEIVENUM

            LEA  DX,VSIZE+2

            CALL ASCTOHEX

            CALL BCDTOHEX

     

            CMP  AX,0

            JE   EXIT_VC

            MOV  SI,AX              ;AX --> SI (volume size, n:MB)

            MOV  TFSIZE,AX          ;save volume size to memory

            POP  AX                 ;restore the length of file from stack

     

            XOR  DX,DX              ;volume count --> AX (actually in AL)

            DIV  SI

            CMP  AX,0               ;if volume count = 0 or more than 100 then EXIT

            JE   EXIT_VC

            CMP  AX,64H

            JNA  SOK_VC

    EXIT_VC:LEA  DX,ERROR_VC

            MOV  AH,9H

            INT  21H

            MOV  AH,4CH

            INT  21H

     

    SOK_VC: LEA  DX,PROMPTTF        ;print "Target filename:"

            MOV  AH,9H

            INT  21H

     

            LEA  DX,TFNAME          ;get the target filename from user

            MOV  AH,0AH

            INT  21H

            CALL PRINTCRLF

            MOV  DL,TFNAME+1        ;set the last filename char to '.'

            XOR  DH,DH

            MOV  SI,DX

            MOV  TFNAME[SI+2],'.'   ;set target filen