汇编实验报告(安工大纪平老师).doc_第1页
汇编实验报告(安工大纪平老师).doc_第2页
汇编实验报告(安工大纪平老师).doc_第3页
汇编实验报告(安工大纪平老师).doc_第4页
汇编实验报告(安工大纪平老师).doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

汇编语言实验报告学院:计算机学院姓名: 学号: 班级:软件工程104班实验一 汇编运行环境及方法、简单程序设计1. 程序说明:本程序用来比较两个字符串string1和string2所含的字符是否相同。若相同则显示Match,否则显示Nomatch。 在程序的数据段先定义两个字符串string1和string2,再定义两个字符串mess1和mess2,分别代表Match和Nomatch。再代码段比较字符串string1和string2,通过比较判断是否相同。若相同则显示Match,否则显示Nomatch。2.程序代码(比较两字符串):;PROGRAM TITLE GOES HERE-Compare string;*datarea segment ;define data segmentstring1 db Move the cursor backward.string2 db Move the cursor backward.;mess1 db Match.,13,10,$mess2 db No match!,13,10,$datarea ends;*prognam segment ;define code segment;-main proc farassume cs:prognam,ds:datarea,es:datareastart: ;starting execution address;set up stack for return push ds ;save old data segment sub ax,ax ;put zero in AX push ax ;save it on stack;set DS register to current data segment mov ax,datarea ;datarea segment addr mov ds,ax ;into DS register mov es,ax ;into ES register;MAIN PART OF PROGRAM GOES HERE lea si,string1 lea di,string2 cld mov cx,25 repz cmpsb jz match lea dx,mess2 jmp short dispmatch: lea dx,mess1disp: mov ah,09 int 21hret ;return to DOSmain endp ;end of main part of program;-prognam ends ;end of code segment;*end start ;end assembly3.截图:该程序是用来判断两字符串string1和string2是否相同,相同则显示match。实验二 用DEBUG编程:使用堆栈段将AX和BX的内容进行交换等1.程序说明:(1)设堆栈指针SP=2000H,AX=3000H,BX=5000H;编一程序段将AX和BX的内容进行交换。请用堆栈作为两寄存器交换内容的中间存储单元,用DEBUG调试程序进行汇编与调试。(2)设DS=当前段地址,BX=0300H,SI=0002H;请用DEBUG的命令将存储器偏移地址300H304H连续单元顺序装入0AH,0BH,0CH,0DH,0EH。在DEBUG状态下送入下面程序,并用单步执行的方法,分析每条指令源地址的形成过程,当数据传送完毕时,AX中的内容是什么。2.程序代码:MOV AX,BXMOV AX,0304HMOV AX,0304HMOV AX,BXMOV AX,0001BXMOV AX,BXSIMOV AX,0001BXSIHLT3.截图:先使用-r 设置sp,ax,bx,在使用-a输入指令然后再-t单步调试刚开始ax 3000,bx 5000 debug调试后 ax,5000 bx 3000 首先用-r设置bx,si 然后再用-e将a,b,c,d,e分配到指定的内存中,-a输入指令最后-t单步调试执行单步调试后ax的值一直变化从000E,0B0A,0C0B,0D0C,0E0D实验三 存储器块清零和内存块移动1. 程序说明:第一个程序是存储块清零。程序流程大概为首先设置起始地址,然后设置块长度,然后将当前地址内容清零,地址加1,然后查看是否清除完全,若没有则回到当前地址清零,然后再查看,直到地址内容清除完,结束程序。第二个程序是内存块移动。程序流程框图为:首先设置块的源地址,然后设置筷的目的地址,然后再设置移动长度,然后按长度重复传送数据,然后结束。2调试及截图: 第一个程序进入debug先用-u指令查看程序代码然后-d查看内存的情况再执行-g讲程序执行完 在用-d查看内存 第二个程序进入debug后先用-u查看程序 然后-g运行到指令rep movsd 之前再用 d查看内存的内容-g前-g后实验四 将键盘输入的小写字母用大写字母显示出来1.程序说明:本程序用来将小写字母转变为大写,并在屏幕上显示出来。先利用DOS功能调用INT21H的1号功能从键盘输入字符,然后判断输入的是否是小写字母,若不是小写字母,则显示输入出错,重新输入。若输入的是小写字母,则通过将其减去20h,从而变为大写字母。在通过DOS功能调用INT21H的2号功能显示出来。若输入的是Enter键,则结束程序。2.程序代码:TITLE SHIYANCODE SEGMENT ASSUME CS:CODE START: MOV AH,01H INT 21H CMP AL,61H JL START SUB AL,20H MOV DL,AL MOV AH,02H INT 21H CODE ENDSEND START3.截图:实验五 循环程序设计1.程序说明:第一个程序是用来显示AL寄存器中的两位十六进位制数,通过DOS功能调用INT21H的2号功能显示出来。第二个程序是用来判别键盘上输入的字符:若是1-9字符,则显示之;若为A-Z或a-z字符,均显示“c”;若是回车字符,z则结束程序,若为其他字符则不显示,继续等待新的字符输入。首先输入一个字符,将其和回车字符比较,若是回车字符,则结束程序。1-9字符,则显示之。若是若小于0,则重新等待输入。若大于9,则跳转到和A、Z比较,若小于A,则重新等待输入,若大于Z,则跳转到和a、z比较处,若小于a或大于z,则重新等待输入,否则输出c。2.程序代码:CODE SEGMENTASSUME CS:CODESTART:MOV AL,3EHPUSH AXMOV DL,ALMOV CL,4SHR DL,CLCMP DL,9JBE NEXT1ADD DL,7NEXT1:ADD DL,30HMOV AH,2INT 21HPOP AXMOV DL,ALAND DL,0FHCMP DL,9JBE NEXT2ADD DL,7NEXT2:ADD DL,30HMOV AH,2INT 21HMOV AH,4CHINT 21HCODE ENDSEND START3.截图:4.程序代码:code segment assume cs:codestart:mov ah,1 int 21h cmp al,0dh jz done cmp al,0 jb next cmp al,9 ja charup mov dl,al mov ah,2 int 21h jmp startcharup:cmp al,41h jb next cmp al,5ah ja chrdndispc:mov dl,c mov ah,2 int 21hnext:jmp startchrdn:cmp al,61h jb next cmp al,7ah ja next jmp dispcdone:mov ah,4ch int 21hcode ends end start5.截图:实验六 分支程序设计1.程序说明:第一个程序是用来显示AL寄存器中的两位十六进位制数,通过DOS功能调用INT21H的2号功能显示出来。第二个程序是用来判别键盘上输入的字符:若是1-9字符,则显示之;若为A-Z或a-z字符,均显示“c”;若是回车字符,z则结束程序,若为其他字符则不显示,继续等待新的字符输入。首先输入一个字符,将其和回车字符比较,若是回车字符,则结束程序。1-9字符,则显示之。若是若小于0,则重新等待输入。若大于9,则跳转到和A、Z比较,若小于A,则重新等待输入,若大于Z,则跳转到和a、z比较处,若小于a或大于z,则重新等待输入,否则输出c2.程序代码:CODE SEGMENTASSUME CS:CODESTART:MOV AL,3EHPUSH AXMOV DL,ALMOV CL,4SHR DL,CLCMP DL,9JBE NEXT1ADD DL,7NEXT1:ADD DL,30HMOV AH,2INT 21HPOP AXMOV DL,ALAND DL,0FHCMP DL,9JBE NEXT2ADD DL,7NEXT2:ADD DL,30HMOV AH,2INT 21HMOV AH,4CHINT 21HCODE ENDSEND START3.截图:可以对ax的值进行修改为00ad4.程序代码code segment assume cs:codestart:mov ah,1 int 21h cmp al,0dh jz done cmp al,0 jb next cmp al,9 ja charup mov dl,al mov ah,2 int 21h jmp startcharup:cmp al,41h jb next cmp al,5ah ja chrdndispc:mov dl,c mov ah,2 int 21hnext:jmp startchrdn:cmp al,61h jb next cmp al,7ah ja next jmp dispcdone:mov ah,4ch int 21hcode ends end start5.截图:实验七 统计不同成绩段学生的人数1.程序说明:本程序用来统计在不同分数段的学生人数并显示出来。有三个子程序,分别用来统计各分数段的学生人数、输出相关内容、换行回车。子程序一中,先将每个学生的分数从100、90、80、70、60逐个比较,在哪一分数段,则将其个数加一。直到所有分数都完成比较。子程序二则利用DOS功能调用INT21H的9号功能在显示器上显示一个字符串和2号功能在显示器上显示一个字符来实现输出相关内容。子程序三通过DOS功能调用INT21H的2号功能在显示器上显示一个字符实现换行和回车的。2.程序框图:3.程序代码:data segment grade db 72,69,83,90,75,80,87,99,63,100 a db 60renshu,$ b db 0ah,0dh,6070renshu:,$ c db 0ah,0dh,7080renshu:,$ d db 0ah,0dh,8090renshu:,$ e db 0ah,0dh,90100renshu:,$ f db 0ah,0dh,100renshu:,$ count db 10data endsstacks segmentstacks endscode segment assume cs:code,ds:data,ss:stacksmain proc farstart: mov ax,data mov ds,ax xor ax,ax xor bx,bx xor cx,cx xor dh,dh call countgrade call output mov ah,4ch int 21hmain endpcountgrade proc near mov di,0 io: cmp gradedi,60 jb l1 cmp gradedi,70 jb l2 cmp gradedi,80 jb l3 cmp gradedi,90 jb l4 cmp gradedi,100 jb l5 inc al jmp continuel1: inc bh jmp continuel2: inc bl jmp continuel3: inc ch jmp continuel4: inc cl jmp continuel5: inc dh jmp continuecontinue: inc di dec count jnz io retcountgrade endpoutput proc near mov ah,0 push ax push dx push cx push bx lea dx,a ;分数小于60的人数 mov ah,9 int 21h pop bx mov dl,bh add dl,30h mov ah,2 int 21h lea dx,b ;分数60至69的人数 mov ah,9 int 21h mov dl,bl add dl,30h mov ah,2 int 21h lea dx,c ;分数70至79的人数 mov ah,9 int 21h pop bx mov dl,bh add dl,30h mov ah,2 int 21h lea dx,d ;分数80至89的人数 mov ah,9 int 21h mov dl,bl add dl,30h mov ah,2 int 21h lea dx,e ;分数90至99的人数 mov ah,9 int 21h pop bx mov dl,bh add dl,30h mov ah,2 int 21h lea dx,f ;分数100的人数 mov ah,9 int 2

温馨提示

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

评论

0/150

提交评论