




已阅读5页,还剩51页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
汇编语言程序设计实验报告ASSEMBLY LANGUAGE PROGRAMMING班级:计科1103班学号:2011014257姓名:朱楠北京化工大学信息科学与技术学院二一三年六月实验一 汇编语言源程序的建立、汇编、连接和运行1、 实验目的:1. 学习汇编语言源程序的编辑、汇编、连接、运行全过程。2. 了解汇编程序、连接程序、DOS系统装入和返回功能。掌握MASM、LINK的应用。3. 掌握汇编语言程序结构,熟悉汇编语言的一些常用语法规则,初步掌握汇编语言程序的开发过程。4. 掌握DOS系统功能调用的基本方法。2、 实验原理:调用DOS系统功能21h的简单输入输出功能。3、 实验内容:1. 从键盘输入一个字符并回显到显示器上。 源程序: code segment assume cs:code start: mov ah,1 int 21h mov ah,4ch int 21h code ends end start2. 显示输出一个字符Q 源程序:code segment assume cs:code start: mov ah,2 mov dl,Q int 21h mov ah,4ch int 21h code ends end start3. 在屏幕上显示输出“I love DOTA” 源程序:data segment znzn1 dbI LOVE DOTA$ data ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax lea dx,znzn1 mov ah,9h int 21h mov ah,4ch int 21h code ends end start4. 编写一个程序,要求从键盘输入一个小写字母,以其大写字母形式显示,否则显示ERROR 源程序data segment string db error!$ data ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax mov ah,7 int 21h cmp al,a jnl next1 jmp next2 next1:cmp al,z jg next2 mov ah,2 sub al,20h mov dl,al int 21h mov ah,4ch int 21h next2:mov ah,9 lea dx,string int 21h mov ah,4ch int 21h code ends end start5.在屏幕上输出10个“T” 源程序:code segment assume cs:code start: mov cx,10 again:mov ah,2 mov dl,t int 21h loop again mov ah,4ch int 21h code ends end start4、 结果与分析:按要求输入输出,完成实验要求。5、 问题讨论:初步体验汇编与c语言以及c+的不同,结构较简单6、 实验扩展(XB2):7、 结论:8、 实验心得:9、 参考文献:IBM-PC汇编语言程序设计(第二版)10、 技术支持:实验二 调试程序DEBUG的使用1、 实验目的:熟悉DEBUG的主要命令,学会使用DEBUG进行程序调试2、 实验原理:1. DEBUG程序的调用在DOS提示符下,可键入命令: C.DEBUG d:path文件名参数1参数2其中文件名是被调试文件的名字,他必须是可执行文件(EXE),两个参数是运行被调试文件是所需要的命令参数,在DEBUG程序调入后,出现提示符“_”此时,可键入所需的DEBUG命令。2. DEBUG的主要命令(1) 显示内存单元内容的命令D,格式为:-D地址或-D范围(2) 修改内存单元内容的命令E,他有两种格式:-E 地址 内容表和-E 地址(3) 检查和修改寄存器内容的命令和标志位状态,格式为:-R,-R 寄存器名,-RF(4) 运行命令G,格式为:-G =地址1地址2地址3.(5) 退出DEBUG命令Q,格式为:Q3、 实验内容:1. 从键盘输入一个字符,与x,y,z比较,相等则输出10个*或或$ 源程序:code segment assume cs:codestart: mov ah,7 int 21h cmp al,x jz start1 cmp al,y jz start2 cmp al,z jz start3 mov ah,4ch int 21hstart1: mov cx,10 again1: mov ah,2 mov dl,* int 21h loop again1 mov ah,4ch int 21hstart2: mov cx,10 again2: mov ah,2 mov dl, int 21h loop again2 mov ah,4ch int 21hstart3: mov cx,10 again3: mov ah,2 mov dl,$ int 21h loop again3 mov ah,4ch int 21hcode ends end start2. 将输入的字符串转换为大写字符串显示 源程序:data segmentstring db 100 db 0 db 100 dup($)data endscode segment assume cs:code,ds:datastart: mov ax,data mov ds,ax mov dx,offset string mov ah,0ah int 21h mov ah,2 mov dl,13 int 21h mov dl,10 int 21h mov di,0 add di,2 next: cmp stringdi,13 jz next1 mov cl,stringdi sub cl,20h mov stringdi,cl inc di jmp next next1: mov ah,9 mov dx,offset string add dx,2 int 21h mov ah,4ch int 21hcode ends end start3. 接收一个字符,找出它的前导字符和后续字符,按顺序显示这三个字符,有提示信息 源程序:data segmentstr1 db plese input one character$str2 db ?,?,?,$data endscode segment assume cs:code,ds:datastart: mov ax,data mov ds,ax lea dx,str1 mov ah,9 int 21h mov ah,2 mov dl,13 int 21h mov dl,10 int 21h mov ah,7 int 21h mov dl,al sub dl,1 mov str20,dl cmp str20,a jb next1 jmp next4 next1: mov str20,# next4: mov str21,al add al,1 mov str22,al cmp str22,z ja next2 jmp next3 next2: mov str22,# jmp next3 next3: lea dx,str2 mov ah,9 int 21h mov ah, 4ch int 21hcode ends end start4. 从键盘接收一串字符,在下一行输出剔除其中数字字符的字符串,有提示信息。 源程序:data segmentstr1 db Plese input a string.$array db 100 dup(?) data endscode segment assume cs:code,ds:datastart: mov ax,data mov ds,ax lea dx,str1 mov di,0 mov ah,9 int 21h again: mov ah,1 int 21h cmp al,13 jz exit cmp al,0 jb next cmp al,9 ja next jmp again next: mov arraydi,al inc di jmp again exit: mov ah,2 mov dl,13 mov dl,10 int 21h mov cx,di mov si,0 inc cx again1: mov ah,2 mov dl,arraysi inc si int 21h loop again1 mov ah,4ch int 21hcode ends end start5. 判断某正整数是否为素数,是输出一,否则输出n 源程序:code segmentassume cs:codestart: mov bx,0 next: mov ah,1 int 21h cmp al,13 je exit sub al,30h mov ah,0 xchg ax,bx mov cx,10 mul cx xchg ax,bx add bx,ax jmp next exit: mov cx,2 next3: cmp cx,bx jz next2 mov ax,bx sub dx,dx div cx cmp dx,0 jz next1 inc cx jmp next3 next1: call change mov ah,2 mov dl,n int 21h mov ah,4ch int 21h next2: call change mov ah,2 mov dl,y int 21h mov ah,4ch int 21h change proc near mov ah,2 mov dl,13 int 21h mov dl,10 int 21h ret change endp code ends end start4、 结果与分析程序1运行截图:程序2运行截图:程序3运行截图:程序4运行截图:程序5运行截图:五、问题讨论:第三个程序中,考虑到第一个或最后一个字符找不到他的前导字符和后续字符,所以用#代替六、实验扩展(XB2):七、结论:八、实验心得:九、参考文献:IBM-PC汇编语言程序设计(第二版)十、技术支持:实验三 数据统计及查找1、 实验目的:1.熟悉汇编语言程序的开发方法和过程。2.掌握汇编语言程序设计中分支及循环程序设计的基本方法。3.掌握汇编语言程序设计中数据分类统计的基本方法。二、实验原理:运用存储器寻址方式寻址,找到内存中的相应字符做统计。三、实验内容: 源程序:11.data segmentNum_Dight dw 0Num_Letter dw 0Num_Others dw 0data endscode segmentassume cs:code,ds:datastart: mov ax,0fff0h mov ds,ax mov di,0 mov cx,100 again: mov bx,ds:di cmp bx,0 jb l1 cmp bx,9 jbe l2 cmp bx,A jb l1 cmp bx,Z jbe l3 cmp bx,a jb l1 cmp bx,z jbe l3 jmp l1 l1: mov ax,data mov ds,ax inc Num_Others mov ax,0fff0h mov ds,ax inc di loop again mov ah,4ch int 21h l2: mov ax,data mov ds,ax inc Num_Dight mov ax,0fff0h mov ds,ax inc di loop again mov ah,4ch int 21h l3: mov ax,data mov ds,ax inc Num_Letter mov ax,0fff0h mov ds,ax inc di loop again mov ah,4ch int 21h code ends end start12.data segmentstr db he34ll434o43 w43or35l3d!data endscode segment assume cs:code,ds:datastart: mov ax,data mov ds,ax mov di,0 mov cx,24 again: mov dl,strdi cmp dl,0 jb next cmp dl,9 ja next next1: inc di loop again jmp exit next: mov ah,2 mov dl,strdi int 21h jmp next1 exit: mov ah,4ch int 21hcode ends end start 流程图:先将0fff0h给到段地址,置循环次数100次,偏移量依次加一找到字母后相应的变量加一找到数字后相应的变量加一既不是字母也不是数字的其他字符相应的变量加一四、结果与分析:5、 问题讨论:6、 实验扩展:7、 结论:可以熟练运用dos系统功能调用(int 21h)的综合运用,同时了解了汇编语言的分支结构程序写法。8、 实验心得:实验有错误,首先要自己尝试着调,这样才会有比较大的进步。实在不会,也可以找同学讨论讨论,在讨论中互相学习。九、参考文献:IBM-PC汇编语言程序设计第二版十、技术支持:实验四 字符串搜索1、 实验目的:1、进一步熟悉汇编语言程序的开发方法和过程。2、掌握汇编语言程序设计中字符串搜索的基本方法2、 实验原理:使用串比较指令判断子串在主串中相匹配的位置3、 实验内容: 源程序:13. data segmentstr1 db Enter keyword:$str2 db Enter sentence:$str3 db Match at location:$str4 db No match!$str5 db H of the sentence$buf1 db 100 db 0 db 100 dup(?)buf2 db 100 db 0 db 100 dup(?)data endscode segmentassume cs:code,ds:data,es:datastart: mov ax,data mov ds,ax mov es,ax main proc far call enterk call crlf repeat:call enters call comp jmp repeat main endp enterk proc near mov dx,offset str1 mov ah,9 int 21h mov di,0 newchar1: mov ah,1 int 21h cmp al,13 jz exit2 mov buf1di,al inc di jmp newchar1 exit2: mov cx,di ret enterk endp crlf proc near mov ah,2 mov dl,13 int 21h mov dl,10 int 21h ret crlf endp enters proc near lea dx,str2 mov ah,9 int 21h mov di,0 newchar: mov ah,1 int 21h cmp al,27 jz exit cmp al,13 jz exit1 mov buf2di,al inc di jmp newchar exit1: mov ax,di ret enters endp comp proc near push cx lea di,buf2 mov bx,di mov dx,cx mov cx,ax inc ax again: mov di,bx lea si,buf1 mov cx,dx cld repe cmpsb jz next1 inc bx dec ax mov cx,ax loop again call crlf mov ah,9 mov dx,offset str4 int 21h call crlf exit3: pop cx ret comp endp next1: call change jmp exit3 change proc near call crlf mov ah,9 mov dx,offset str3 int 21h lea di,buf2 sub bx,di add bx,1 mov ch,4 rotate: mov cl,4 rol bx,cl mov al,bl and al,0fh add al,30h cmp al,3ah jl printit add al,7 printit: mov dl,al mov ah,2 int 21h dec ch jnz rotate mov ah,9 mov dx,offset str5 int 21h call crlf ret change endp exit:mov ah,4ch int 21h code ends end start14. data segmentstr1 db Please input the password:$str2 db Password error!$str3 db Welcome to use!$key db zk123456,100 dup(?)buf1 db 100 dup(?)data endscode segmentassume cs:code,ds:data,es:datastart: mov ax,data mov ds,ax mov es,ax mov bx,0 lea dx,str1 mov ah,9 int 21h lea si,buf1 next1: mov ah,7 int 21h mov si,al inc si cmp al,13 jz next2 mov ah,2 mov dl,* int 21h jmp next1 next2: lea bp,buf1 sub si,bp cmp si,9 ja nextt lea si,buf1 lea di,key mov cx,8 cld repz cmpsb jz next3 nextt: mov ah,2 mov dl,13 int 21h mov dl,10 int 21h mov dx,offset str2 mov ah,9 int 21h cmp bx,2 jz exit inc bx mov ah,2 mov dl,13 int 21h mov dl,10 int 21h mov dx,offset str1 mov ah,9 int 21h lea si,buf1 jmp next1 next3: mov ah,2 mov dl,13 int 21h mov dl,10 int 21h lea dx,str3 mov ah,9 int 21h next4: mov ah,7 int 21h cmp al,1 jnz exit jmp next4 exit: mov ah,4ch int 21h code ends end start4、 结果与分析:1.2.5、 问题讨论:对于输出的十六进制数开头为零的没有消去,看起来不简约6、 实验扩展(XB2):7、 结论:8、 实验心得:9、 参考文献:IBM-PC汇编语言程序设计10、 技术支持:实验七 宏指令的调用1、 实验目的:1、掌握宏指令的使用。2、进一步熟悉DOS系统功能调用方法。2、 实验原理:宏调用3、 实验内容: 源程序:qp macro a,b,c,d,e,fmov ah,6mov al,fmov bh,emov ch,amov cl,bmov dh,cmov dl,dint 10hendmzgb macro a,bmov bh,0mov ah,2mov dh,amov dl,bint 10hendmcode segmentassume cs:codestart: qp 0,0,24,79,0,0 qp 7,19,19,51,04fh,0 qp 8,20,18,50,02fh,0 next: zgb 18,20 mov cx,30 again: mov ah,1 int 21h cmp al,27 jz exit loop again qp 8,20,18,50,02fh,1 jmp next exit: mov ah,4ch int 21h code ends end start 流程图: 清屏为黑色在屏幕中间显示一个品红色的矩形块在品红色矩形块内再显示一个绿色矩形块将光标至于窗口左下角在光标处输入字符,当字符数超过三十个时上卷一行,光标回到原处按ESC键退出4、 结果与分析:5、 问题讨论:6、 实验扩展(XB2):7、 结论:8、 实验心得:九、参考文献:IBM-PC汇编语言程序设计第二版十、技术支持:【习题18】1、 实验目的:显示8个“I LOVE YOU FOREVER”并闪烁2、 实验原理:调用BIOS功能,先用6号功能清黑屏,再用DOS的21h7号功能输入y,最后用BIOS功能的13号功能显示字符串3、 实验内容: 流程图: 源程序:data segmentstring db I LOVE YOU FOREVER!len_str equ $-stringdata endscode segment assume cs:code,ds:datastart: mov ah,0 mov al,3 int 10h mov ah,6 mov al,0 mov bh,0 mov ch,0 mov cl,0 mov dh,24 mov dl,79 int 10h na: mov ah,7 int 21h cmp al,y jz next jmp na next: mov bp,seg string mov es,bp mov bp,offset string mov cx,len_str mov dx,0 mov bl,0dah mov al,0 mov ah,13h int 10h nq: mov ah,7 int 21h cmp al,27 jz next1 jmp nq next1: mov ah,4ch int 21hcode ends end start四、结果与分析:不能闪烁,可能是系统不支持五、问题讨论:六、实验扩展(XB2):七、结论:Bx,多用于基址寄存器,cx,多用于循环计数。八、实验心得:对于BIOS功能,对汇编有了更深的理解,以前用c,c+是做不到的九、参考文献:IBM-PC汇编语言程序设计(第二版)十、技术支持:【习题19】一、实验目的:编写一个查询表将十六进制数00H0FH转化为十六进制数字的ASCII码字符。二、实验原理:将015转化为对应的16进制数三、实验内容: 流程图: 源程序:data segmentbuf db 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,Fdata endscode segmentassume cs:code,ds:datastart: mov ax,data mov ds,ax call input mov ah,2 mov dl,10 int 21h mov dl,13 int 21h mov dl,bufbx int 21h mov ah,4ch int 21h input proc near mov bx,0 newchar: mov ah,1 int 21h cmp al,13 jz exit sub al,30h cbw xchg ax,bx mov cx,10 mul cx xchg ax,bx add bx,ax jmp newchar exit: ret input endp code ends end start4、 结果与分析:五、问题讨论:六、实验扩展(XB2):七、结论: Bx,多用于基址寄存器,cx,多用于循环计数。八、实验心得:原本不会使用寄存器间接寻址,多次尝试后任不得其法。有一次上课听课时,听到老师讲到这一部分,认真听了一下,之后自己试验一下后,就渐渐地会了。由此可知,上课认真听课是很重要的事情。九、参考文献:IBM-PC汇编语言程序设计(第二版)十、技术支持:【习题20】1、 实验目的:将数据段BUFF开始字节单元中的10个数字09转换为相应的ASCII码送入以ASC开始的内存单元。2、 实验原理:用di,si分别指向asc和buff的第一个单元位置,循环十次,将buff里的内容存进asc里3、 实验内容: 流程图: 源程序:data segmentbuff db 0,1,2,3,4,5,6,7,8,9asc db 10 dup(?)data endscode segmentassume cs:code,ds:datastart: mov ax,data mov ds,ax mov si,0 mov di,0 mov cx,10 again: mov bl,30 add buffsi,bl mov bl,buffsi mov ascdi,bl inc si inc di loop again mov ah,4ch int 21h code ends end start4、 结果与分析:5、 问题讨论:没有输出操作6、 实验扩展(XB2):7、 结论: Bx,多用于基址寄存器,cx,多用于循环计数。8、 实验心得: 原本不会使用寄存器间接寻址,多次尝试后任不得其法。有一次上课听课时,听到老师讲到这一部分,认真听了一下,之后自己试验一下后,就渐渐地会了。由此可知,上课认真听课是很重要的事情。9、 参考文献:IBM-PC汇编语言程序设计(第二版)10、 技术支持:【习题21】1、 实验目的:学习两存储区的数据传递。2、 实验原理:dos系统功能调用(int 21h)功能3、 实验内容:源程序:data segmentstr1 db WELCOMEstr2 db 7 dup(?)data endscode segmentassume cs:code,ds:data,es:datastart: mov ax,data mov ds,ax lea si,str1 lea di,str2 mov cx,7 cld rep movsb mov ah,4ch int 21h code ends end start 4、 结果与分析:5、 问题讨论:6、 结论:Bx,多用于基址寄存器,cx,多用于循环计数。七、实验心得: 原本不会使用寄存器间接寻址,多次尝试后任不得其法。有一次上课听课时,听到老师讲到这一部分,认真听了一下,之后自己试验一下后,就渐渐地会了。由此可知,上课认真听课是很重要的事情。八、实验扩展(XB2):九、参考文献:IBM-PC汇编语言程序设计十、技术支持:【习题22】1、 实验目的:显示5行hello二、实验原理:用21h的9号功能,循环输出数据段里的str三、实验内容: 源程序:data segmentstr db hello$data endscode segment assume cs:code,ds:datastart: mov ax,data mov ds,ax lea dx,str mov cx,5 again: lea dx,str mov ah,9 int 21h mov ah,2 mov dl,13 int 21h mov dl,10 int 21h loop again mov ah,4ch int 21hcode ends end start4、 结果与分析
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版事业单位人员海外实习与职业规划服务合同
- 2025年度围墙夜景照明设计与施工合同
- 2025成都二手房买卖合同含租赁权处理及转租条款
- 2025年度车辆租赁及车辆租赁租赁车辆租赁服务合同
- 贵州省凯里市2025年上半年公开招聘辅警试题含答案分析
- 贵州省余庆县2025年上半年事业单位公开遴选试题含答案分析
- 2025蛋糕店员工保密与竞业禁止劳动合同书
- 2025年文化产业园区场地租赁合同模板(含知识产权)
- 贵州省都匀市2025年上半年公开招聘村务工作者试题含答案分析
- 2025年度新能源汽车租赁共享经济合同范本
- 2025中国中煤华东分公司附其所属企业第一批社会招聘52人考试参考题库附答案解析
- 2025年十八项医疗核心制度考试试题库及参考答案
- 《创新创业基础》 课件 第1章 创新创业概述
- Z20+名校联盟(浙江省名校新高考研究联盟)2026届高三第一次联考英语及答案
- 2025-2030年中国黑色像素定义层材料(BPDL)市场调研分析及投资前景研究预测报告
- 2025至2030中国开环霍尔效应电流传感器行业发展趋势分析与未来投资战略咨询研究报告
- 塑料海洋污染课件
- 民族宗教法规课件
- 2025年吉林省事业单位招聘考试公共基础知识考试试题库及答案详解
- 2025年农业科技学(农业技术推广)知识考试题库与答案
- 小学三年级数学加减乘除混合运算口算练习题
评论
0/150
提交评论