【80X86汇编语言学习】【DOS功能调用】基本IO功能 (二)
来源:互联网 发布:淘宝网酒水经营许可证 编辑:程序博客网 时间:2024/05/16 13:01
例2:写一个程序,它先接受一个字符串,然后显示其中的数字符的个数、英文字母的个数和字符串的长度
本 实例用到的DOS系统调用如下:
1、显示字符串(9号功能调用)
功 能:在标准输出上显示一个字符串。通常情况下,标准输出就是屏幕
入口参数:DS:DX=需要输出字符串的首地址,字符串以’$‘为结束标志
出口参数:无
说 明:在显示输出的时候检查是否按Ctrl+C或者Ctrl+Break键,否则程序退出。
2、输入字符串(0AH号功能调用)
功 能:从表中输入中读取一个字符串,通常情况下,标准输入就是键盘。
入口参数:DS:DX=缓冲区首地址,
出口参数:接收到的字符串在缓冲区中
说 明:(1)缓冲区中第一个字为缓冲区最大容量,可认为是入口参数;缓冲区第二字节存放实际读入的
字符数(不包括回车符),可认为是出口参数的一部分,第三字节开始存放接受的字符串。
(2)字符串以回车符结束,回车符是字符串的最后一个字符。
(3)如果输入的字符数超过缓冲区所能容纳的最大值,则随后输入的字符被丢弃,并响铃,直至遇到回车符。
(4)按Ctrl+C或者Ctrl+Break键,则程序退出
3、显示输出(2号功能调用)
功 能:像标准输出设备中写一个字符,通常情况下,标准输出为屏幕
入口参数:DL=要输出显示的字符ASCII码
出口参数:无
说 明:按Ctrl+C或者Ctrl+Break键,否则程序退出
代码如下:
MLENGTH = 128 ;定位常量,缓冲区最大的长度DSEGSEGMENTBUFFDBMLENGTH ;第一个字节存放缓冲区的最大值DB? ;第二个字节存放实际字符串的长度DBMLENGTH DUP (0) ;真实字符串MESSG0DB 'Please input:$'MESSG1DB'Length = $'MESSG2DB 'X = $'MESSG3DB'Y = $'DSEGENDSCSEGSEGMENTASSUMECS:CSEG,DS:DSEGSTART:MOVAX,DSEGMOVDS,AX ;设置DS寄存器MOVDX,OFFSETMESSG0 ;显示提示信息CALLDISPMESS;MOVDX,OFFSETBUFF ;调用10号调用,获取输出字符串MOVAH,10INT21HCALLNEWLINE ;显示换行符和回车符MOVBH,0 ;清空数字字符计数器MOVBL,0 ;清空字符计数器MOVCL,BUFF+1 ;获取输入字符串的长度MOVCH,0 JCXZCOK ;判断字符串是否为空,以回车符为结束MOVSI,OFFSETBUFF+2 ;获取存放字符串的首地址AGAIN:MOVAL,[SI] ;获取字符 INCSI ;指针加一CMPAL,'0' JBNEXTCMPAL,'9' ;判断是否是否数字JANODECINCBH ;数字计数累加JMPSHORTNEXTNODEC: ORAL,20H ;如果是字母转换为小写字母CMPAL,'a'JBNEXTCMPAL,'z'JANEXTINCBL ;字母计数累加NEXT:LOOPAGAIN;COK:MOVDX,OFFSETMESSG1 ;显示提示信息CALLDISPMESS MOVAL,BUFF+1 ;获取字符串的长度XORAH,AHCALLDISPAL ;以十进制数的形式显示CALLNEWLINE;MOVDX,OFFSET MESSG2 ;显示数字的个数CALLDISPMESSMOVAL,BHXORAH,AHCALLDISPALCALLNEWLINE;MOVDX,OFFSETMESSG3 ;显示字母的个数CALLDISPMESSMOVAL,BLXORAH,AHCALLDISPALCALLNEWLINE;MOVAX,4C00HINT21H;用十进制显示8位二进制DISPALPROCMOVCX,3 ;8位二进制数最大表示为3为十进制数MOVDL,10 ;除数为10DISP1:DIVDL ;AX/DL=AL(商) AH(余数)XCHGAH,AL ;交换AL,AH,使AL保存余数ADDAL,'0' ;转换为ASCII码PUSHAX ;将Ax保存到栈中,其中主要用到AL,后续显示过程会用到ALXCHGAH,AL ;是AL中继续保持商MOVAH,0 ;清空AHLOOPDISP1 ;继续循环测试;MOVCX,3DISP2:POPDXCALLECHOCHLOOPDISP2RETDISPALENDPECHOCHPROCMOVAH,2INT21HRETECHOCHENDP;显示有DX所指的提示信息DISPMESSPROCMOVAH,9INT21HRETDISPMESSENDP;显示换行符和回车符NEWLINE PROCPUSHAXPUSHDXMOVDL,0DHMOVAH,2 INT21HMOVDL,0AHMOVAH,2 INT21HPOPDXPOPAXRETNEWLINE ENDPCSEGENDSEND START
- 【80X86汇编语言学习】【DOS功能调用】基本IO功能 (二)
- 【80X86汇编语言学习】【DOS功能调用】基本IO功能
- 【80X86汇编语言学习】【DOS功能调用】磁盘文件管理及应用(一)
- x86:用DOS功能调用实现简单输入输出
- 汇编相关(ASCII码字符表 DEBUG命令 BIOS功能调用表 DOS功能调用表 汇编语言错误信息表)
- 80x86汇编语言学习笔记(二)二次修改版
- x86汇编语言(二)
- 汇编--学习笔记(四)-DOS功能调用
- DOS功能调用
- DOS功能调用
- 总结:DOS功能调用
- DOS功能调用
- DOS功能调用表
- Dos功能调用
- DOS功能调用详解
- DOS系统功能调用
- DOS功能调用一览表
- 汇编dos功能调用
- Java的路还是得自己走_1
- spring[2]
- Linux kernel 分析之五:内核启动-内核解压缩
- mybatis(四)——mybatis解决数据库表字段名与实体类属性名不同的冲突
- Android Service的用法
- 【80X86汇编语言学习】【DOS功能调用】基本IO功能 (二)
- Google官方教程之Selling In-app Products
- pydot- couldn't import dot_parser,loading of dot files will not be possible解决办法
- 解决Linux下AES解密失败
- java面试题目总结
- createQuery与createSQLQuery区别、hibernate分页
- iOS内存管理之浅见
- 包装类
- 2015 Multi-University Training Contest 1 题解 BY FZUw