汇编语言实验报告三_第1页
汇编语言实验报告三_第2页
汇编语言实验报告三_第3页
汇编语言实验报告三_第4页
汇编语言实验报告三_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上 汇编语言实验报告(实验三)一. 实验目的1. 掌握程序设计中的子程序结构;2. 熟练使用过程伪指令、子程序调用和返回等汇编语言的指令编写子程序;3. 掌握数制转换方法;4. 掌握利用DOS系统功能调用进行字符输入及字符输出(显示)的方法。二. 程序说明1 编写十进制到十六进制转换程序。要求从键盘取得一个十进制数,然后把该数以十六进制形式在屏幕上显示出来2 已知从BUF开始存放了10个16进制字数据,编程求出这10个数中的最大数,(将最大数存入MAX字节单元),并将其以10进制数的形式在屏幕上显示出来。 (提示:以上两题都要求采用子程序的方法)3 从键盘上输入一行字符

2、,如果这行字符比前一次输入的一行字符长度长,则保存该行字符,然后继续输入另一行字符;如果它比前一次输入的行短,则不保存这行字符。按下$输入结束,最后将最长的一行字符显示出来。(选作) (提示:定义数据段,包括两个变量STRING和BUFFER,格式如下: STRINGDB 0;存放字符的个数DB 80 DUP (?), 0DH,0AH,$ ;存放前一次输入的字符串,兼作显示缓冲区BUFFERDB 80;输入字符串的缓冲区,最多输入80个字符DB?DB80 DUP (20H) 然后利用0AH号DOS系统功能调用收入字符,用09H号系统功能调用输出。)三. 设计思想1. 先调用子函数decibin

3、由键盘输入一个数字后,先减去30h把ASCII码形式转换为十进制数形式,保存在bx中,再调用子函数binihex,用十六进制形式显示bx中的数。2.利用子函数max依次比较,将buf中10个字的最大值放到bx中,再一次除以10000,1000,100,10,并分别把余数放到bx,商放到dl,并转换为ASCII码格式,即把十六进制转为10进制,最后调用2号功能输出结果即可。3.调用0ah功能,将输入字符放到缓冲区,并把之后输入的字符串依次与缓冲区内容相比较,若小于缓冲区内容,则被替换,直到输入$即停止输入字符串为止,输出最终存放在string中的字符串的内容。四. 程序代码1.输入10进制转换为

4、16进制输出data segment Str1 db 0DH,0AH,'Please input a number: ','$' Str2 db 0DH,0AH,'Trans:','$' data ends decihex segment assume cs:decihex,ds:data main proc far push ds sub ax,ax push ax mov ax,data mov ds,axrepeat: lea dx,Str1 mov ah,09 int 21h call decibin lea dx,Str

5、2 mov ah,09 int 21h call binihex mov dl,0ah ;换行 mov ah,2 int 21h jmp repeatmain endpdecibin proc near mov bx,0newchar: mov ah,1 int 21h sub al,30h jl exit cmp al,9d jg exit cbw xchg ax,bx mov cx,10d mul cx xchg ax,bx add bx,ax jmp newchar exit: retdecibin endpbinihex proc near mov ch,4rotate: mov cl

6、,4 rol bx,cl mov al,bl and al,0fh add al,30h cmp al,3ah jl printit add al,7hprintit: mov dl,al mov ah,2 int 21h dec ch jnz rotate retbinihex endpdecihex ends end main2.data segmentbuf dw 05h,0fh,15h,1fh,45h,25h,2ah,32h,3ah,3fhdata endscode segmentassume cs:code,ds:datamain proc farstart:mov ax,datam

7、ov ds,axcall maxcall conveymov ax,4c00hint 21hmain endpmax proc nearmov bx,0mov cl,10mov ax,bufbxrepeat:add bx,2cmp ax,bufbxjg greatermov ax,bufbxgreater: loop repeatmov bx,axretmax endpconvey proc nearmov cx,10000dcall dividmov cx,1000dcall dividmov cx,100dcall dividmov cx,10dcall dividmov cx,1dcal

8、l dividretconvey endpdivid proc nearmov ax,bxmov dx,0div cxmov bx,dxmov dl,aladd dl,30hmov ah,2int 21hretdivid endpcode endsend start3.data segmentSTRINGDB 0;存放字符的个数DB 80 DUP (?), 0DH,0AH,'$' ;存放前一次输入的字符串,兼作显示缓冲区BUFFERDB 82;输入字符串的缓冲区,最多输入80个字符DB?DB80 DUP (?)out db 0dh,0ah,'Longest string

9、:','$'data endscode segment assume cs:code,ds:data,es:datamain proc farstart:mov ax,datamov ds,axmov es,axrepeat:mov ah,02hmov dl,0dhint 21hmov ah,02hmov dl,0ahint 21hlea dx,buffermov ah,0ahint 21hmov al,buffer2cmp al,'$'jnz comparejmp outputcompare:mov al,buffer1cmp al,string0jl repeatmov string,allea si,buffer2lea di,string1mov cl,buffer1sub ch,chcldrep

温馨提示

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

评论

0/150

提交评论