汇编实验报告(安工大陆勤老师)

  • 格式:doc
  • 大小:590.00 KB
  • 文档页数:24

汇编语言实验报告学院:计算机学院姓名:学号:班级:实验一汇编运行环境及方法、简单程序设计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 returnpush ds ;save old data segmentsub ax,ax ;put zero in AXpush ax ;save it on stack;set DS register to current data segmentmov ax,datarea ;datarea segment addrmov ds,ax ;into DS registermov es,ax ;into ES register;MAIN PART OF PROGRAM GOES HERElea si,string1lea di,string2cldmov cx,25repz cmpsbjz matchlea dx,mess2jmp short dispmatch:lea dx,mess1disp:mov ah,09int 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的命令将存储器偏移地址300H~304H连续单元顺序装入0AH,0BH,0CH,0DH,0EH。

在DEBUG状态下送入下面程序,并用单步执行的方法,分析每条指令源地址的形成过程,当数据传送完毕时,AX中的内容是什么。

2.程序代码:MOV AX,BXMOV AX,0304HMOV AX,[0304H]MOV AX,[BX]MOV AX,0001[BX]MOV AX,[BX][SI]MOV AX,0001[BX][SI]HLT三、实验要求:1、实验前要做好充分准备,包括汇编程序清单、调试步骤、调试方法,以及对程序结果的分析等。

2、本实验只要求在DEBUG调试程序状态下进行,包括汇编程序、调试程序和执行程序。

四、实验报告:1、程序说明。

说明程序的功能、结构。

2、调试说明。

包括上机调试的情况、上机调试步骤、调试所遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。

3、写出源程序清单和执行结果。

3.截图:先使用-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 SEGMENTASSUME CS:CODESTART:MOV AH,01HINT 21HCMP AL,61HJL STARTSUB AL,20HMOV DL,ALMOV AH,02HINT 21HCODE ENDSEND START2.截图:gsm实验五循环程序设计1.程序说明:第一个程序是用来显示AL寄存器中的两位十六进位制数,通过DOS功能调用INT21H的2号功能显示出来。

第二个程序是用来判别键盘上输入的字符:若是1-9字符,则显示之;若为A-Z或a-z字符,均显示“c”;若是回车字符<CR>,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 segmentassume cs:code start:mov ah,1int 21hcmp al,0dhjz donecmp al,'0'jb nextcmp al,'9'ja charupmov dl,almov ah,2int 21hjmp startcharup:cmp al,41hjb nextcmp al,5ahja chrdn dispc:mov dl,'c'mov ah,2int 21h next:jmp start chrdn:cmp al,61hjb nextcmp al,7ahja nextjmp dispc done:mov ah,4chint 21h code endsend start5.截图:实验六分支程序设计1.程序说明:第一个程序是用来显示AL寄存器中的两位十六进位制数,通过DOS功能调用INT21H的2号功能显示出来。

第二个程序是用来判别键盘上输入的字符:若是1-9字符,则显示之;若为A-Z或a-z字符,均显示“c”;若是回车字符<CR>,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.截图:可以对ax的值进行修改为00ad4.程序代码code segmentassume cs:codestart:mov ah,1int 21hcmp al,0dhjz donecmp al,'0'jb nextcmp al,'9'ja charupmov dl,almov ah,2int 21hjmp start charup:cmp al,41hjb nextcmp al,5ahja chrdn dispc:mov dl,'c'mov ah,2int 21h next:jmp start chrdn:cmp al,61hjb nextcmp al,7ahja nextjmp dispc done:mov ah,4chint 21h code endsend start 5.截图:实验七统计不同成绩段学生的人数1.程序说明:本程序用来统计在不同分数段的学生人数并显示出来。