##前言
    一周前开始为了应付学校的汇编程序设计大赛,一直在学习汇编,在程序设计的过程中,关于汇编读写文件这块感触颇深,特此总结一下。

    ##环境准备
    由于使用linxu开发环境,而MASMx86微处理器家族汇编开发环境需要在dos环境下运行,故下载DOSBOX模拟dos环境以便于开发。

    ##读文件
    在此放上读取文件数据的指令:

        mov	ah,3fH
    	mov	bx,handle
    	mov	cx,size
    	lea	   dx,buffer
    	int	   21H
    

    要理解这段代码,先来看看什么是DOS和BIOS调用:

            简单来说就是在DOS与BIOS中预先设计好了一系列通用子程序,以便其调用,由于这种调用采用的是以中断指令INT n的内部中断方式进行的,常称为DOS及BIOS中断调用。
    

    现在回过头来再分析这段代码,首先mov ah,3fH设置功能号,查询可知3f代表读文件或设备时,概括起来就是通过给ah寄存器赋值3f,然后调用int 21h指令,计算机就会根据AH寄存器中的值执行相应的操作,其中int21h以我目前水平只能理解到它是dos的一个中断调用这一层啦。然后剩余的mov bx,handle代表将文件名送入bx寄存器当然这个handle是自己定义的一个缓冲区之类的东西,mov cx,size指要从文件读入的字节个数,lea dx,buffer将偏移地址移入dx,方便后面读入移动。

    ##写文件
    与之对应的放上简单的将数据写入文件指令:

    mov	ah,40H
    mov	bx,handle
    mov	cx,size
    lea	   dx,buffer
    int  	21H
    

    与之对应的查询得到在int21H功能调用中40H代表写文件或设备,其中DS:DX=数据缓冲区地址BX=文件代号 CX=写入的字节数 写成功:AX=实际写入的字节数 写出错:AX=错误码,总之和读文件是相对应的。

    ##最后
    首先附上DOS功能中断调用过程:
    设置入口参数->执行int n指令,即执行中断服务程序,最后执行IRET指令,分析处理出口参数。
    汇编在执行某些操作时常常需要考虑内存等问题,以前觉得C里面指针操作内存比较费脑,主要就是绕了绕去,很烧大脑,现在汇编对内存的操作更是要在地址层面,当然现在的练习还是处于相当基础的层次,而且有操作系统对cpu的保护模式,我们操作时不太可能对系统造成比较大的破坏,个人觉得对于不走底层方向而学习汇编的意义就在于让我们更好的去理解操作系统与计算机工作的原理,从而在编程的道路上走的更远。

    ————没有什么是停不下来的,除了时间