亚博app|用汇编进行简单的文件读写
##前言
一周前开始为了应付中学的汇编程序设计竞赛,一直在学习汇编,在程序设计的过程中,关于汇编读写文件这块感慨颇深,特此总结一下。
##环境打算
由于使用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寄存器中的值执行相应的操作.out文件得到汇编程序,其中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=错误码.out文件得到汇编程序,总之和读文件是相对应的。
##最后
首先附上DOS功能中断调用过程:
设置入口参数->执行int n指令,即执行中断服务程序,最后执行IRET指令,分析处理出口参数。
汇编在执行个别操作时往往须要考虑显存等问题,以前认为C上面表针操作显存比较费脑,主要就是绕了绕去,很烧脑部,现在汇编对显存的操作更是要在地址层面,当然现今的练习还是处于相当基础的层次,而且有操作系统对cpu的保护模式,我们操作时不太可能对系统导致比较大的破坏,个人认为对于不走底层方向而学习汇编的意义就在于使我们更好的去理解操作系统与计算机工作的原理,从而在编程的公路上走的更远。
亚博app|老王