5个在汇编中常用的INT 21H系统功能调用:
(1)通过4C功能调用能够结束当前正在执行的程序,返回DOS(Disk Operating System 磁盘操作系统)系统,一般用于汇编程序的结束位置。如下图紫色框中所示。
(2)执行完下面黄色框中的01系统调用后,出现提示输入光标,从键盘输入一个字符并保存其ASCII码到AL寄存器中。
(3)通过02功能可以输出DL寄存器中的字符到显示器。
(4)09功能:输出显示一个以"$"字符结尾的字符串到显示器。
调用方法:
MOV AX,字符串所在的段地址
MOV DS,AX
MOV DX,字符串的首址偏移地址
MOV AH,09
INT 21
执行上面调用,输出以DS:DX为首地址,"$"为结尾的字符串到显示器中。
(5)0A功能:从键盘输入一串ASCII码字符到缓冲区,输入结束为缓冲区的个数或者“回车”字符。
调用方法:
MOV AX,缓冲区的首址的段地址
MOV DS,AX
MOV DX,缓冲区的首址的偏移地址
MOV AH,0A
INT 21
执行完上面调用,将从键盘接受字符串送到内存的输入缓冲区(由DS:DX指定缓冲区),要求预先定义一个缓冲区,缓冲区的第一个字节指定容纳的最大字符个数,由用户给出;第二个字节存放实际的最大字符个数,由系统最后添入;从第三个字节开始存放从键盘接受的字符,直到ENTER键结束。
实例1 secret0.exe
将程序分段,便于分析其结构框架。
上图棕色框的操作是将0000作为偏移量赋值给DX,于是输出以DS:0000为首地址,"$"为结尾的字符串,即下图中右边框中的字符串,用于提示字符输入正确。
上图粉色框的操作是将0013作为偏移量赋值给DX,于是输出以DS:0013为首地址,"$"为结尾的字符串,即下图中右边框中的字符串,用于提示字符输入错误。
由上图的分析可知第一个字符应该是Z(其ASCII码的十六进制表示就是5A),第二个字符是H(其ASCII码的十六进制表示是48)。
截图如下:
总结:
程序看不懂的话就将其拆分成一段一段的,知道从哪跳到哪,知道每一段的作用就大致可以分析出整个程序的意图。
感觉我真的是一根筋,脑袋太笨了,不灵活。可能是很少用的原因吧。ε=(´ο`*)))唉,没有力气干巴爹了。