首页 汇编语言程序设计实验报告

汇编语言程序设计实验报告

举报
开通vip

汇编语言程序设计实验报告汇编语言实验报告 题目:1、 实验方法 2、 用表格形式显示字符 3、 分类统计字符个数 4 、 查找电话号码 学生学院 应用技术学院 专业班级 2009级电子信息工程技术一班 学 号 2009680107 学生姓名____李果____ 指导教师 胡勇 2011年 1月 12 日 实验 实验目的与要求 掌握用汇编语言设计、编写、调试和运行程序的方法。掌握debug程序的各种操作命令,熟悉程序的调试及其技巧。 实验内容 比较字符串sample.asm(文件名) 试编写一程序:比较两个字符串stringl和string...

汇编语言程序设计实验报告
汇编语言实验 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 目:1、 实验方法 2、 用 表格 关于规范使用各类表格的通知入职表格免费下载关于主播时间做一个表格详细英语字母大小写表格下载简历表格模板下载 形式显示字符 3、 分类统计字符个数 4 、 查找电话号码 学生学院 应用技术学院 专业班级 2009级电子信息工程技术一班 学 号 2009680107 学生姓名____李果____ 指导教师 胡勇 2011年 1月 12 日 实验 实验目的与要求 掌握用汇编语言 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 、编写、调试和运行程序的方法。掌握debug程序的各种操作命令,熟悉程序的调试及其技巧。 实验内容 比较字符串sample.asm(文件名) 试编写一程序:比较两个字符串stringl和string2所含的字符是否相同。若相同则显示‘Match’,否则,显示‘No match’。 实验步骤 调用字处理程序wordstar或记事本建立asm文件 建立sample.asm源文件如图1.1所示: ;********************************************* datarea segment ;define data segment string1 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 far assume cs:prognam,ds:datarea,es:datarea start: ;start execution address ;set up stack for return push ds ;save old data segment sub ax,ax ;push 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 disp match: lea dx,mess1 disp: mov ah,09 int 21h ret ;return to DOS main endp ;end of main part of program ;--------------------------------------------------------------- prognam ends ;end of code segment ;************************************************ end start ;end assembly 图1.1 源文件sample.asm 用汇编程序masm(或asm)对源文件汇编产生目标文件obj C:>masm sample; 用连接程序link产生执行文件exe C:>link sample 执行程序 可直接从DOS执行程序如下: C:>sample Match. 终端上已显示出程序的运行结果。为了调试程序的另一部分,可重新进编辑程序修改两个字符串的内容,使他们互不相同。如修改后的数据区为: ;********************************************* datarea segment ;define data segment string1 db 'Move the cursor backward.' string2 db 'Move the cursor forward.' ; mess1 db 'Match.',13,10,'$' mess2 db 'No match!',13,10,'$' datarea ends ;********************************************* 然后,重新汇编、连接、执行,结果为: C:>sample No match! 至此,程序已经调试完毕,运行结果正确。 另一种调试程序的方法是使用debug程序。可调用如下: C:>debug sample.exe 可先用u命令显示程序,以便了解指令地址。显示结果如图1.2所示: 图1.2 用debug调试时,u命令的显示情况 将断点设置在程序的主要部分运行以前,同时根据其中指示的DS寄存器内容查看数据段的情况如下: 可用e命令修改数据区的字符串,操作如下图所示,再次用d命令查看修改结果。 用g命令运行程序,结果为: -g No match! 用q命令退出debug -q 至此程序已调试完毕。 四、 心得体会 决胜全面小康心得体会学党史心得下载党史学习心得下载军训心得免费下载党史学习心得下载 通过这次实验主要是学习使用debug调试程序,掌握对程序的调试方法。虽然在调试过程中有遇到一定的难处,但是通过反复实验和同学的帮助还是能够比较顺利的完成的。个人觉得这个调试方法比较不直接点,不过相信应该有它的独到之处吧。 计算机 学院 0 专业 2班__组、学号31姓名 协作者_________ 教师评定 实验题目 用表格形式显示字符 实验二 实验目的与要求 学习用汇编语言设计与编写循环程序。 题目:用表格形式显示ASCII字符SMASCII 实验内容 按15行×16列的表格形式显示ASCII码为10H---100H的所有字符,即以行为主的顺序及ASCII码递增的次序一次显示对应的字符。每16个字符为一行,每行中的相邻两个字符之间用空白符(ASCII为0)隔开。 实验步骤 输入的源文件为print.asm,以下为源代码: .model small .stack 200h .data .code start: mov cl,16 ;初始化列数计数为16 mov ch,15 ;初始化行数计数为15 mov dh,10h ;初始化dh为10h po: dec cl ;列数计数减1 mov ah,02h ;输出该字符 mov dl,dh int 21h inc dh ;令dh为下一个字符的ASCⅡ值 mov ah,02h ;输出空格 mov dl,0 int 21h cmp cl,0 ;若列数计数cl为0 jz mo ;即已输出了16个字符则跳转换行 jmp po ;否则继续执行输出下一个字符的操作 mo: mov cl,16 ;换行,重新置列数计数为16 mov ah,02h ;输出回车符 mov dl,0dh int 21h mov ah,02h mov dl,0ah ;输出换行符 int 21h dec ch ;换行,则使行数计数ch减1 cmp ch,0 ;若ch为0 jz no ;则跳转至结束程序 jmp po ;否则继续执行输出下一行字符的操作 no: mov ax,4c00h int 21h end start 汇编并连接文件后,生成exe文件,运行结果如下: 心得体会 编写中使用了功能号为02的输出功能调用,同时由于逐个显示相继的ASCII字符,需要保存并不断修改dl寄存器的内容,而显示空白、回车、换行符时也需要使用dl寄存器,故要使用堆栈来保存相继的ASCII字符。 同样的,在实验过程中遇到了一些难点和想不通的地方,幸运的是,有老师的指点和同学的帮助,使我能够完成这个实验。同时也让我感受到细心,谨慎对我们学汇编语言的重要性,有一点点失误就使整个程序不能运行了。 计算机 学院 专业 2班__组、学号 姓名 协作者_________ 教师评定 实验题目 分类统计字符个数 实验三 实验目的与要求 学习用汇编语言编写与设计分支循环程序。 题目:分类统计字符个数COUNT_CHAR 实验内容 程序接收用户键入的一行字符(字符个数不超过80个,该字符串用回车符结束),并按字母、数字及其他字符分类计数,然后将结果存入以letter、digit和other为名的存储单元中。 实验步骤 1输入的源文件为count_c.asm的源代码: datasg segment string label byte max db 80 act db ? stokn db 80 dup(?) digit db 0 Letter db 0 other db 0 mess1 db 'Please input chars:','$' mess2 db 0dh,0ah,'$' mess3 db 'digit:','$' mess4 db 'letter:','$' mess5 db 'other:','$' mess6 db 'h ','$' n db 3 datasg ends ; codesg segment assume cs:codesg,ds:datasg COUNT_CHAR proc far push ds sub ax,ax push ax mov ax,datasg mov ds,ax lea dx,mess1 ;输出字符串 mov ah,09 int 21h lea dx,string mov ah,0ah ;换行 int 21h lea dx,mess2 mov ah,09h ;输出字符串 int 21h lea si,stokn sub ch,ch mov cl,act again: ;判断ASCLL mov al,[si] cmp al,30h jl other1 cmp al,3ah jl digit1 cmp al,41h jl other1 cmp al,5bh jl letter1 cmp al,61h jl other1 cmp al,7bh jl letter1 other1: ;处理其他字符,计数加一 inc other inc si loop again jmp print digit1: ;处理数字,计数加一 inc digit inc si loop again jmp print letter1: ;处理字母,计数加一 inc letter inc si loop again print: mov ch,2 mov bl,digit lea dx,mess3 mov ah,09 int 21h rotate: ;转换16进制 mov cl,4 rol bl,cl mov al,bl and al,0fh add al,30h cmp al,3ah jl print1 add al,7h print1: mov dl,al mov ah,2 int 21h dec ch jnz rotate lea dx,mess6 mov ah,09 int 21h dec n cmp n,2 jz letter2 cmp n,1 jz other2 jmp exit letter2: lea dx,mess4 mov ah,09 int 21h mov ch,2 mov bl,letter jmp rotate other2: lea dx,mess5 mov ah,09 int 21h mov ch,2 mov bl,other jmp rotate exit: ;结束退出 ret COUNT_CHAR endp codesg ends end COUNT_CHAR 2编并连接文件后,生成exe文件,debug调试程序: 输入字符为1234[%$#@]abcd ^_^.结果如下: 心得体会 编写程序主要用0a号功能输入字符串,同时练习设计分支结构的程序,为以后的编程打下基础. 次实验程序分支较多,刚开始不懂得如何用DEBUG查询,后来在老师的帮助下终于知道原来通过查看寄存器内容得到结果的。 计算机 学院 专业 2班__组、学号姓名 王楚青 协作者_________ 教师评定 实验题目 查找电话号码 实验四 实验目的与要求 学习用汇编语言设计与编写子程序。 题目:查找电话号码phone 实验内容 要求程序建立一个可存放50项的电话号码表,每项包括人名(20个字符)及电话号码(8个字符)两部分; 程序可接受输入人名及相应的电话号码,并把它们加入电话号码表中; 凡有新的输入后,程序应按人名对电话号码表重新排序; 程序可接受需要查找电话号码的人名,并从电话号码表中查出其电话号码,再在屏幕上以如下格式显示出来。 name tel. ×××× ×××× 实验步骤 输入的源文件为phone.asm,以下为源代码: OUTPUT MACRO MESS ;定义输出字符串宏操作 MOV AH,9 LEA DX,MESS INT 21H ENDM ;---------------------------------- DATA SEGMENT NAMEPAR LABEL BYTE MAXNLEN DB 21 NAMELEN DB ? NAMEFLD DB 21 DUP(?) ; PHONEPAR LABEL BYTE MAXPLEN DB 9 PHONELEN DB ? PHONEFLD DB 9 DUP(?) ; NAMECTR DB 0 PHONECTR DB 0 ENDADDR DW ? ; TEL_TAB DB 50 DUP(28 DUP(' ')),'$' ;电话号码表 TELSAV DB 28 DUP(?),'$' SWAPPED DB 0 ; ;提示信息 MESS1 DB 'Input name:$' MESS2 DB 'Input a telephone number:$' MESS3 DB 'Do you want a telephone number?(Y/N)$' MESS4 DB 'NAME$' MESS5 DB 'TEL.$' MESS6 DB 16 DUP(' '),'$' MESS7 DB 'NAME?$' DATA ENDS CODE SEGMENT MAIN PROC FAR ASSUME CS:CODE,DS:DATA START: PUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV ES,AX ;----------------------------------------------- LEA DI,TEL_TAB LOOP1: OUTPUT MESS1 CALL INPUT_NAME ;输入名字 CALL CRLF CMP NAMELEN,0 ;当输入字符为回车符结束输入记录 JZ LOOP2 CALL STOR_NAME ;保存名字 OUTPUT MESS2 CALL INPHONE ;输入并保存个人电话号码 CALL CRLF JMP LOOP1 LOOP2: CALL NAME_SORT ;按人名对电话号码表重新排序 LOOP3: OUTPUT MESS3 MOV AH,1 ;接收单个字符 INT 21H CMP AL,'n' ;若为’n’退出程序 JZ QUIT CMP AL,'N' ;若为’N’退出程序 JZ QUIT CALL CRLF OUTPUT MESS7 CALL INPUT_NAME ;输入要查找人名 CALL CRLF CALL NAME_SEARCH ;按人名查找记录 OUTPUT MESS4 OUTPUT MESS6 OUTPUT MESS5 CALL CRLF CALL PRINTLINE ;按要求输出信息 CALL CRLF JMP LOOP3 QUIT: MOV AH,4CH INT 21H MAIN ENDP ;---------------------------------------- INPUT_NAME PROC NEAR ;接受人名 MOV AH,0AH ;0A号功能调用接收人名 LEA DX,NAMEPAR INT 21H ; CMP NAMELEN,0 JZ EXIT MOV BH,0 MOV BL,NAMELEN MOV CX,21 SUB CX,BX INPUT_XH: MOV NAMEFLD[BX],20H INC BX LOOP INPUT_XH EXIT: RET INPUT_NAME ENDP ;----------------------------------- STOR_NAME PROC NEAR ;把人名存入电话号码表tel_tab中 INC NAMECTR CLD LEA SI,NAMEFLD MOV CX,10 REP MOVSW ;人名从缓冲区传送到tel_tab RET STOR_NAME ENDP ;------------------------------------ INPHONE PROC NEAR ;接受电话号码,并存入电话号码表tel_tab中 MOV AH,0AH ;0A号功能调用接受电话号码 LEA DX,PHONEPAR INT 21H MOV BH,0 MOV BL,PHONELEN MOV CX,9 SUB CX,BX INPHONE_XH: MOV PHONEFLD[BX],20H INC BX LOOP INPHONE_XH INC PHONECTR CLD LEA SI,PHONEFLD MOV CX,4 REP MOVSW ;电话号码从缓冲区送到tel_tab RET INPHONE ENDP ;---------------------------------- NAME_SORT PROC NEAR ;对电话号码表按人名排序(冒泡法) SUB DI,56 MOV ENDADDR,DI XH1: MOV SWAPPED,0 ;SWAPPED为记录转换次数 LEA SI,TEL_TAB XH2: MOV CX,28 MOV DI,SI ADD DI,28 MOV AX,DI MOV BX,SI REPE CMPSB JBE XH3 CALL EXCHANGE XH3: MOV SI,AX CMP SI,ENDADDR JBE XH2 CMP SWAPPED,0 JNZ XH1 RET NAME_SORT ENDP ;---------------------------------- EXCHANGE PROC NEAR ;冒泡法中交换记录 MOV CX,14 LEA DI,TELSAV MOV SI,BX REP MOVSW ; MOV CX,14 MOV DI,BX REP MOVSW ; MOV CX,14 LEA SI,TELSAV REP MOVSW ; MOV SWAPPED,1 RET EXCHANGE ENDP ;-------------------------------------- NAME_SEARCH PROC NEAR ;在电话号码表中查找所要的电话号码 LEA SI,NAMEFLD LEA DI,TEL_TAB SEARCH_XH1: MOV CX,20 REP CMPSB ;缓冲区字符串与tel_tab记录比较 JE SEARCH_XH2 ADD DI,8 LEA SI,NAMEFLD JMP SEARCH_XH1 SEARCH_XH2: MOV SI,DI SUB SI,20 LEA DI,TELSAV MOV CX,14 REP MOVSW ;比对正确,传送记录到缓冲区以便输出 RET NAME_SEARCH ENDP ;----------------------------------- PRINTLINE PROC NEAR ;按要求格式显示人名及电话号码 MOV AH,9 LEA DX,TELSAV INT 21H RET PRINTLINE ENDP ;----------------------------------- CRLF PROC NEAR ;输出回车换行符 MOV DL,0DH MOV AH,2 INT 21H MOV DL,0AH INT 21H RET CRLF ENDP ;---------------------------------- CODE ENDS END START 各个模块说明: 由于各个模块基本上是并行方式共存,故模块层次为main模块之下有以下模块并行,这些模块分别是INPUT_NAME、STOR_NAME、INPHONE、NAME_SORT、EXCHANGE、NAME_SEARCH和PRINTLINE。 各模块说明: 模块名:main 为总控模块 输入:接受从键盘输入的人名及其电话号码,存入tel_tab中。 输出:接受从键盘输入的欲查找记录的人名,再按要求格式输出记录。 功能:显示提示符’Input name:’,调用子程序INPUT_NAME接收人名,调用子程序STOR_NAME把人名存入电话号码表tel_tab中,显示提示符’Input a telephone number:’,调用子程序INPHONE接收电话号码,并把它存入电话号码表tel_tab中,如输入已结束则调用NAME_SORT子程序对电话号码表按人名排序,显示提示符’Do you want a telephone number?(Y/N)’,回答N或n退出程序,否则显示提示符’name?’,调用子程序INPUT_NAME接收人名,调用子程序NAME_SEARCH在电话号码表中查找所要的电话号码,调用子程序PRINTLINE按要求格式显示人名及电话号码。 模块名:INPUT_NAME 输入:从键盘接收人名。 功能:人名存入缓冲区(0A号功能调用)。 模块名:STOR_NAME 功能:把缓冲区中的人名以字符串传送形式送到电话号码表tel_tab中。 模块名:INPHONE 输入:从键盘接收电话号码。 功能:人名存入缓冲区后,按字符串传送形式送到电话号码表tel_tab中。 模块名:NAME_SORT 功能:对电话号码表tel_tab按人名用冒泡法重新排序,调用EXCHANGE子程序进行冒泡法中的数据交换。 模块名:EXCHANGE 功能:若前一个人名的ASCII码比后一个人名的ASCII码大,则交换两个记录。 模块名:NAME_SEARCH 功能:接收人名后,比较缓冲区的记录和电话号码表tel_tab中的记录,若相等,则把tel_tab中的记录移到缓冲区中,以便输出。 模块名:PRINTLINE 输出:按要求格式输出人名和电话号码。 汇编并连接文件后,生成exe文件,执行文件并debug调试程序: 输入三个记录: 分别是1.LiMing 38456787;2.zhangYi 49885656;3.LiuWei 84752544; 执行exe全过程: 四、心得体会 作为一次综合实验比起前几次的实验还是比较难的,编写过程中遇到的问题也比较多,通过上几次实验的练兵,代码程序还是比较容易写的,但在开始调试却用了很多时间,最后认真的检查和跟同学交流讨论才找出所有的错误,确实调试是一件很不简单的事啊! 通过这个综合实验,对汇编语言有了更进一步的掌握,一些课堂上比较难弄懂的知识,做完这个实验后,基本都迎刃而解了。为了更好的学好汇编语言,只有经常上机编程实验才能把课本上的知识应用到实践上,在实践中更好的掌握学到的知识。 同时,在编程的过程中时时刻刻都不要忘记细心、再细心,只要有一点点失误,就永远运行不了这个程序。也许人生就如程序这样,以后无论在生活还是工作中都必须细心、再细心!
本文档为【汇编语言程序设计实验报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_060165
暂无简介~
格式:doc
大小:262KB
软件:Word
页数:22
分类:互联网
上传时间:2011-01-12
浏览量:492