从键盘输入字符串并输出该字符串(汇编程序)_第1页
从键盘输入字符串并输出该字符串(汇编程序)_第2页
从键盘输入字符串并输出该字符串(汇编程序)_第3页
从键盘输入字符串并输出该字符串(汇编程序)_第4页
从键盘输入字符串并输出该字符串(汇编程序)_第5页
免费预览已结束,剩余2页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、从键盘输入字符串并输出该字符串(汇编程序)DATASSEGMENTSTRDBpleaseinputastring:$BUFDB20DB?DB20DUP(?)CRLFDB0AH,0DH,$;此处输入数据段代码DATASENDSSTACKSSEGMENTSTACKDB200DUP(?);此处输入货仓段代码STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AXLEADX,STRMOVAH,9INT21HMOVAH,10LEADX,BUFINT21HLEADX,CRLFMOVAH,9INT21HM

2、OVCL,BUF+1LEASI,BUF+2NEXT:MOVDL,SIMOVAH,2INT21HINCSIDECCLJNZNEXT;此处输入代码段代码MOVAH,4CHINT21HCODESENDSENDSTART以上是从键盘输入字符串并输出该字符串的简单汇编程序,我们老师的要求是将程序中的2号调用改成9号调用,自己还在思虑取,有能解决此问题的请回复,感谢!若是我认识了该题答案,必然和大家共享。续一:我们汇编老师的授课是先让我们看程序,写程序,再讲基本指令,基本结构学习汇编重要的是掌握CPU结构、程序结构以及熟练的掌握7种指令的运用。以下是自己整理的对上面程序的部分讲解:BUF:键盘缓冲区BUF

3、。DB:定义变量的种类为字节种类。DB20:表示缓冲区能容纳20个字符。DB200DUP(?)中的问号:不对分配的储藏单元初始化。DS:存放当前数据段的段地址。CS:存放当前代码段的段地址。SS:存放当前货仓段的段地址。MOV:传达指令。AX:存放接收到的数据或发送数据。DX:使用间接寻址时存放端口地址。LEA:取偏移地址。CL:在移位指令和循环搬动指令中,存放移位次数也许循环移位次数。SI:在储藏器寻址时,作为变址存放器。在串操作中,作为源串指针。DEC:decrement。INC:increment。INT:interruput。续二:DATASSEGMENTSTRDBpleaseinpu

4、tastring:$BUFDB20;这里的20为指定存放字符的个数DB?;这的?可变,实质存放字符的个数(理论上的)(系统自动计算)DB20DUP(?);这里的20是你在数据段开辟的空间CRLFDB0AH,0DH,$;回车换行;此处输入数据段代码DATASENDSSTACKSSEGMENTSTACKDB200DUP(?);此处输入货仓段代码STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AXLEADX,STR;9号中断前提,给参数DX赋值,指定输出字符串所在的有效地址MOVAH,9INT

5、21HMOVAH,10;10号中断,接收输入字符串,此时DX为存放字符串的有效地址LEADX,BUFINT21HLEADX,CRLFMOVAH,9INT21HMOVCL,BUF+1;获取字符串中字符的个数LEASI,BUF+2;间接寻址NEXT:MOVDL,SIMOVAH,2;2号中断输出单个字符INT21HINCSI;输出一个地址此后加1DECCL;顺便减少输出的次数JNZNEXT;此处输入代码段代码MOVAH,4CHINT21HCODESENDSENDSTART续三:2号调用是逐个显示字符,9号调用是一次完成字符串的显示,但结尾得加上$。最上面程序中用的2号调用,使用循环输出字符串。要将2

6、号调用改为9号调用,必定改程序中的循环结构为序次结构。很明显,程序中的NEXT:INCSIDECCLJNZNEXT都要去掉。所以问题简化为改MOVDL,SIMOVAH,2部分为9号调用,以及在9号调用后加上$。续last:以下是在编程爱好者论坛上请教别人加上自己的整理得出的答案,其实不是最简。DATASSEGMENTSTRDBpleaseinputastring:$BUFDB20DB?DB20DUP(?)CRLFDB0AH,0DH,$此处输入数据段代码DATASENDSSTACKSSEGMENTSTACKDB200DUP(?);此处输入货仓段代码STACKSENDSCODESSEGMENTAS

7、SUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AXLEADX,STRMOVAH,9INT21HMOVAH,10LEADX,BUFINT21HLEADX,CRLFMOVAH,9INT21H;开始改的部分movbl,BUF+1;输出这里开始movbh,0;leasi,BUF+2;首地址movbyteptrsi+bx,$;结尾得加上$movDX,si;MOVAH,9;INT21H;结束MOVAH,4CHINT21HCODESENDSENDSTART我和同学交流此后发现,程序中movbyteptrsi+bx,$si+bx,$,movbh,0

8、也可以去掉,这样就得出最简答案了。可以改为mov终结:DATASSEGMENTSTRDBPleaseinputastring:$BUFDB20DB?DB20DUP(24H)CRLFDB0AH,0DH,$DATASENDSSTACKSSEGMENTDB200DUP(?)STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AXLEADX,STRMOVAH,9INT21HMOVAH,10LEADX,BUFINT21HLEADX,CRLFMOVAH,9INT21HLEADX,BUF+2MOVAH,9INT21HMOVAH,4CHINT21HCODESENDSENDSTART现在已经真切理解DOS10号以及9号功能调用了,今天再次看这个题目又获取一个答案:DATASSEGMENTSTRDBPleaseinputastring:$BUFDB20DB?DB20DUP(?)CRLFDB0AH,0DH,$DATASENDSSTACKSSEGMENTDB200DUP(?)STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AXLEADX,STRMOVAH,9INT21HMOVAH,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论