版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、微原软件实验报告班级:2009211119 班 学号:09210550 班内序号:07 姓名:胡易 实验二 分支,循环程序设计一.实验目的: 1.开始独立进行汇编语言程序设计; 2.掌握基本分支,循环程序设计; 3.掌握最简单的 DOS 功能调用.二.实验内容: 1.安排一个数据区,内存有若干个正数,负数和零.每类数的个 数都不超过 9. 2.编写一个程序统计数据区中正数,负数和零的个数. 3.将统计结果在屏幕上显示.开始三.程序流程图 BUFF偏移地址送BX否dh=dh+1(等于0个数)否ah=ah+1(小于0个数)DL=DL+1 (大于0个数)BX是否大于0?BX是否大于等于0 BX值加1
2、否判断完所有的数?是显示结果,结束四.源程序 data segment buff dw 22,11,33,0,55,-11,-32,-45,-56,123,-121count equ $-buffplus db ? ;大于0的个数zero db ? ;等于0的个数minus db ?;小于0的个数string1 db 'zhengshu:','$' string2 db 'fushu:','$'string3 db '0:','$'data endsstack segment stack's
3、tack' db 100 dup(?)stack endscode segmentassume cs:code,ds:data,ss:stackstart: mov ax,datamov ds,axmov cx,countshr cx,1mov dx,0mov ah,0mov bx,offset buffagain: cmp word ptr bx,0 jge plu ;判断是否大于等于0,是就跳转 inc ah ;小于0的个数加1jmp nextplu:jz zer ;判断是否等于0.是就跳转inc dl;大于0的个数加1jmp nextzer:inc dh ;等于0的个数加1nex
4、t:inc bxinc bx;修改指针地址loop againmov plus,dl ;将大于0,小于0,等入0个数存入mov zero,dhmov minus,ahcall show1 ;显示最终结果call show2call show3mov ax,4c00hint 21hshow1 proc near ;显示大于0的数 push dx mov ah,09hmov dx,seg string1mov ds,dxmov dx,offset string1int 21hmov al,plusadd al,'0'-0hmov ah,02hmov dl,alint 21hmov
5、dl,0ahint 21hpop dxretshow1 endpshow2 proc near ;显示小于0的数 push dxmov ah,09hmov dx,seg string2mov ds,dxmov dx,offset string2int 21hmov al,minusadd al,'0'-0hmov ah,02hmov dl,alint 21hmov dl,0ahint 21hpop dxretshow2 endpshow3 proc near ;显示等于0的数 push dxmov ah,09hmov dx,seg string3mov ds,dxmov dx,
6、offset string3int 21hmov al,zeroadd al,'0'-0hmov ah,02hmov dl,alint 21hmov dl,0ahint 21hpop dxretshow3 endpcode endsend start五.程序运行结果六.预习题 1.十进制数 0 - 9 所对应的 ASCII 码是什么? 如何将十进制数 0 - 9 在 屏幕上显示出来? 0-9的ascii码为,30h,31h,32h,34h,35h,36h,37h,38h,39h, 将要显示的数加上30h,得到该数的ascii码,再利用DOS功能调用显示单个字符 2.如何检验一个
7、数为正,为负或为零? 你能举出多少种不同的方法? 利用cmp指令,利用TEST指令,将该数与0相减,观察标志位。检查最高位,为0是正数,为1时再检查其他位判断是负数或0七.实验心得与体会 这次实验我主要练习了基本的分支结构程序的编写,以及简单的DOS功能调用,并利用debug功能查找程序中的逻辑错误,由于程序比较简单,所以没有花费太多时间,但仍然让我对汇编语言有了一个新的认识 实验三 代码转换程序设计一.实验目的: 1.掌握几种最基本的代码转换方法; 2.运用子程序进行程序设计.二.实验内容: 1.从键盘上输入若干两位十进制数,寻找其中的最小值,然后在屏幕上显示出来. 2.两个十进制数之间的分
8、隔符,输入结束标志自定,但要在报告中说明. 3.对输入要有检错措施,以防止非法字符输入,并有适当的提示. 4.将整个程序分解为若干模块,分别用子程序实现.在报告中要给出模块层次图.三.程序流程图初始化 调用get1子程序,取第一个数调用get2子程序,取第二个数compare子程序调用get3子程序取第三个字符其他数字判断字符是什么?回车显示结果模块层次图 四.源程序 data segmentminh db 9minl db 9number1db 100 dup(?)number2 db 100 dup(?)error db 'input error,pleaes input agai
9、n',0dh,0ah,'$'welcome db 'please number:',0dh,0ah,'$'result db 'the min is:',0ah,'$'data endsstack segment stack'stack'db 100 dup(?)stack endscode segment assume cs:code,ds:data,ss:stackstart: mov bx,0mov ax,datamov ds,axmov si,offset number1mov di
10、,offset number2call welcloop1:call get1cmp bl,01jz startloop2:mov si,alcall get2cmp bl,02jz start call compareinc siinc dicall get3cmp al,0dh jz overcmp al,'0'jb startcmp al,'9'jb loop2 jmp startover: mov ah,02hmov dl,0dhint 21hmov bx,offset minhmov ah,bxadd ah,'0'-0mov bx,ah
11、mov bx,offset minlmov al,bxadd al,'0'-0mov bx,almov ah,09hmov dx,seg resultmov ds,dxmov dx,offset resultint 21hmov ah,02hmov bx,offset minhmov dl,bxint 21h ;显示十位数mov bx,offset minlmov dl,bxint 21h ;显示个位数mov ax,4c00hint 21hcompare proc near push axpush bxmov ah,simov al,di sub ah,'0'-
12、0sub al,'0'-0mov bx,offset minhcmp ah,bxjb e1 ;十位小于现存数,直接将AH,AL,赋给minh,minlja e2 ;大于现存数,返回主程序mov bx,offset minlcmp al,bx ;比较个位,大于就直接跳到返回主程序ja e2e1:mov bx,offset minhmov bx,ahmov bx,offset minlmov bx,ale2:pop axpop bxretcompare endp welc proc near mov ah,09hmov dx,seg welcomemov ds,dxmov dx,o
13、ffset welcomeint 21hretwelc endpget1 proc near ;取第一个数字mov ah,01hint 21hcmp al,'0'jbe error1cmp al,'9'jae error1jmp endpperror1: mov bl,01h mov ah,09hmov dx,seg errormov ds,dxmov dx,offset errorint 21hendpp: retget1 endpget2 proc near ;取第二个数字mov ah,01hint 21hcmp al,'0'jb error
14、2cmp al,'9'jae error2mov di,almov ah,02hmov dl,','int 21hjmp endpp2error2: mov bl,02hmov ah,09hmov dx,seg errormov ds,dxmov dx,offset errorint 21hendpp2: retget2 endpget3 proc near ;判断结束或空格mov ah,01hint 21hretcode endsend start程序分析:在该实验中,我总共定义了4个子程序,get1用于输入第一个字符,在输入后检测输入的是否是0-9的数,不是
15、则报错重新输入,是则存储到相应内存中,get2用于输入第二个字符,检测如果是数字的话则存入相应内存,并且输出“,”表示一个两位十进制数输入完毕,再调用get3函数,若为数字则继续调用get2输入数字,若为回车则进入最后输出结果,若为其他字符则报错重新输入。 输入完毕后按回车键显示最终结果五.程序运行结果六.预习题1如何将输入的两个字符(0 - 9)变为十进制或二进制数? 将输入的字符减去30H,可得到十进制数 2如何将选出的最小值(二进制或十进制)变为 ASCII 码再进行显示? 先定义一个字节的数据,分为十位和低位,每次将输入的数十位和已存的十位相比较,若小于则将输入的字符和已存的交换,大于
16、则不交换,等于时比较个位,若小于则交换,最后将十位和个位分别加上30H变为相应的ascii码输出 3你觉得采用二进制运算还是十进制运算更适合于这个实验? 十进制七.实验心得与体会 这次的实验相较于上次复杂了很多,光编写代码的时间就用了2个小时,期间不断的思考如何输入,如何储存,如何比较,最后又参考了同学的代码才写完,写完后一编译发现又有很多错,于是乎不断的在debug环境下用t命令G命令D命令调试,查错,找到一个错改过来再重新编译继续debug,这个过程一共持续了3个小时才最终将所有的逻辑错误改好,也终于输出了正确的结果。这次实验主要是考察了进制转换的相关知识,认识到了输入的ascii码和数值
17、之间的关系,也学会了DOS功能调用。在该程序中共定义了4个子程序,在写完后觉得还有很多地方也可以定义子程序完成,但是由于急于求成就没有再花心思,导致程序在最后有些冗长,这些是以后需要避免的,总的来说,这次实验是第一次遇到比较多的挑战,但自己都慢慢的解决了,很有成就感。实验四 子程序设计 一.实验目的: 1.进一步掌握子程序设计方法; 2.进一步掌握基本的 DOS 功能调用.二.实验内容: 1.从键盘上输入某班学生的某科目成绩.输入按学生的学号由小到大的顺序输入. 2.统计检查每个学生的名次. 3.将统计结果在屏幕上显示. 4.为便于观察,输入学生数目不宜太多,以不超过一屏为宜.输出应便于阅读.
18、尽可 能考虑美观. 5.输入要有检错手段.开始三.程序流程图 调用get1子程序,取第一个数调用get2子程序,取第二个数compare子程序调用get3子程序取第三个字符其他数字判断字符是什么?回车调用排序子程序显示结果模块层次: 四.源程序 data segmentminh db 9minl db 9number1db 100 dup(?);存储十位number2 db 100 dup(?);存储个位error db 'input error,pleaes input again',0dh,0ah,'$'welcome db 'please inpu
19、t number:',0dh,0ah,'$'result db 'the minist is:',0ah,'$'data endsstack segment stack'stack' db 100 dup(?)stack endscode segment assume cs:code,ds:data,ss:stackstart: mov bx,0mov cx,0mov ax,datamov ds,axmov si,offset number1mov di,offset number2call welcloop1:call
20、get1cmp bl,01jz startloop2:mov si,alcall get2cmp bl,02jz start call compare inc siinc dicall get3cmp al,0dh jz overcmp al,41hjz Acmp al,'0'jb startcmp al,'9'jbe loop2 jmp startover: mov ah,02hmov dl,0dhint 21hmov dl,0ahint 21hmov bx,offset minhmov ah,bxadd ah,'0'-0mov bx,ahmo
21、v bx,offset minlmov al,bxadd al,'0'-0mov bx,almov ah,09hmov dx,seg resultmov ds,dxmov dx,offset resultint 21hmov ah,02hmov bx,offset minhmov dl,bxint 21hmov bx,offset minlmov dl,bxint 21hmov ah,02hmov dl,0dhint 21hmov dl,0ahint 21hcall sortmov si,offset number1mov di,offset number2mov ah,02h
22、display:mov dl,siint 21hmov dl,diint 21hmov dl,0dh int 21hmov dl,0ahint 21hinc siinc diloop displayA:mov ax,4c00hint 21hcompare proc near push axpush bxmov ah,simov al,di sub ah,'0'-0sub al,'0'-0mov bx,offset minhcmp ah,bxjb e1 ;十位小于现存数,直接将AH,AL,赋minh,minlja e2 ;大于现存数,返回主程序mov bx,off
23、set minlcmp al,bx ;比较个位,大于就直接跳到返回主程序ja e2e1:mov bx,offset minhmov bx,ahmov bx,offset minlmov bx,ale2:pop axpop bxretcompare endp welc proc near mov ah,09hmov dx,seg welcomemov ds,dxmov dx,offset welcomeint 21hretwelc endpget1 proc near ;取第一个数字mov ah,01hint 21hcmp al,'0'jb error1cmp al,'9
24、'ja error1jmp endpperror1: mov bl,01hmov ah,09hmov dx,seg errormov ds,dxmov dx,offset errorint 21hendpp: retget1 endpget2 proc near ;取第二个数字mov ah,01hint 21hcmp al,'0'jb error2cmp al,'9'ja error2mov di,almov ah,02hmov dl,','int 21hinc cxjmp endpp2error2: mov bl,02hmov ah,0
25、9hmov dx,seg errormov ds,dxmov dx,offset errorint 21hendpp2: retget2 endpget3 proc near ;判断结束或空格mov ah,01hint 21hretget3 endpsort proc near ;对成绩排序push cx push bxpush axmov bl,clmov al,clst1:mov cl,almov si,offset number1mov di,offset number2st2:mov ah,simov bh,si+1cmp ah,bhjb exchja last mov ah,dimo
26、v bh,di+1cmp ah,bhjbexchjmp lastexch: mov ah,simov bh,si+1xchg ah,bhmov si,ahmov si+1,bhmov ah,dimov bh,di+1xchg ah,bhmov di,ahmov di+1,bhlast:inc siinc diloop st2dec bxcmp bl,0ja st1pop axpop bxpop cx retsort endpcode endsend start五.程序运行结果六.预习题 1.如何确定一个学生在这门科目中的名次?有两种基本思路,一是抽取每个学生的成绩和其他所有学生的成绩进行比较,
27、然后统计比其分数高的学生,得出该学生的名次;二是把学生成绩存入连续内存区域,即数组方式,取得每个学生的成绩偏移量,即成绩指针。然后比较指针所指的成绩的大小,根据比较结果移动指针完成排序。具体排序时可以采用诸多的方式,比如冒泡法,快速排序法等等,均是可行的。本实验采用第二种方式,用冒泡法予以具体实现。 2.你觉得输入结束后,采用什么方法进行比较以得到学生的名次最为简单?利用排序算法,将学生的成绩排序,同时学生的学号也随着成绩的排序而改变在内存中的位置,当排序结束后,学号的顺序也随之改变,最后学后的顺序即为名次 七.实验心得与体会 这次的实验相比上次更加复杂,尤其是排序那里,之前在数据结构中学过的
28、排序算法现在用上了,由于汇编语言没有高级语言那么方便,所以在编写排序算法时花了很长的时间。等做完后看题目要求才发现和题目的要求有出入,题目要求要给出名次,但是我只是将成绩从大到小排了序而没有给出名次,这个时候也没再想继续修改,以后有时间我会考虑将程序补全。这次实验同样花了一下午的时间在debug上,整个程序完成后感觉非常的累,但也觉得比较高兴,因为毕竟是自己亲手完成的实验。通过这次实验也深深的觉得自己的编程能力又提升了一个档次实验五 中断程序设计一.实验目的: 1.初步掌握中断程序的设计方法: 2.初步掌握修改 DOS 系统中断,以适应实际使用的方法.二.实验内容: 1.编写一个 32 位二进
29、制数除以 16 位二进制数的除法程序.观察当除数为 0,或 超过相应寄存器范围时,程序执行的结果. 2.修改零号中断服务程序,使它具有以下功能: (1)判断除数是否为 0,当除数为 0 时,显示相应的结果; (2)当除数不为 0 时,采用适当的方法完成商超过 16 位的二进制数的除法运算. 3.注意必须保护原有中断服务程序的入口地址,并在程序完毕前加以恢复.三.程序流程图四.源程序 DATA SEGMENTmessage db 0AH,0DH,'divisor equals 0.',0dh,0ah,'$'message1 DB 0AH,0DH,' inp
30、ut error',0DH,0AH,'$'message2 DB 'PLEASE INPUT THE DIVIDEND (32)',0AH,0DH,'$'message3 DB 0AH,0DH,'PLEASE INPUT THE DIVISOR (16)',0AH,0DH,'$'message4 DB 0AH,0DH,'THE QUOTIENT IS:','$'message5 DB 0AH,0DH,'THE REMAINDER IS:','$'
31、; DATA ENDSSTACK SEGMENT STACK 'STACK' STACK ENDSCODE SEGMENT;代码段ASSUME CS:CODE, SS:STACK ,DS:DATAstartproc farpush dsmov ax,0push axmov ax,datamov ds,axsti;TF中断标志置1mov al,0;保存原中断向量mov ah,35hint 21hpush espush bxpush dx;写中断向量mov ax,seg int00mov ds,axmov dx,offset int00mov al,0mov ah,25hint 2
32、1hpop ds mov ah,09hmov dx,seg message2;提示输入32位二进制0或1mov ds,dxmov dx,offset message2int 21hmov cx,10hmov ax,0000hpush axa1:mov ah,01hint 21hcmp al,'0'输入数字与0比较jz a2cmp al,'1'输入数字与1比较jnz error1;输入有误则跳错误显示程序stc;为1则将CF置1rcl dx,1;dx左移,移进一个1loop a1jmp a3a2:clc;为0则将CF置0rcl dx,1;dx左移,移进一个0loo
33、p a1a3: mov cx,10ha4:mov ah,01hint 21hcmp al,'0'jz a5cmp al,'1'jnz error2stcpop axrcl ax,1push axloop a4jmp a6a5:pop axclcrcl ax,1push axloop a4a6:mov ah,09hmov dx,seg message3;提示输入16位0或1除数mov ds,dxmov dx,offset message3int 21hmov cx,10ha7:mov ah,01hint 21hcmp al,'0'jz a8cmp
34、al,'1'jnz error2stcrcl bx,1loop a7jmp a9a8:clcrcl bx,1loop a7jmp a9error1: mov ah,09h;输入错误提示mov dx,seg message1mov ds,dxmov dx,offset message1int 21hjmp a1error2: mov ah,09hmov dx,seg message1mov ds,dxmov dx,offset message1int 21hjmp a6a9:mov cx,0000hpop axdiv bxcmp bx,20hjz a14push dxpush axmov ah,09hmov dx,seg message4mov ds,dxmov dx,offset message4int 21hmov bx,08h call xianshimov bx,0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 网络服务保障与修复承诺书5篇
- 农产品安全承诺书4篇范文
- 企业培训计划设计综合指南
- 数据分析建模与可视化操作手册
- 企业流程标准化定制管理软件
- 健康科技产品品质保障承诺函(3篇)
- 业务开展计划申请回复函(7篇范文)
- 员工绩效评价表发送函(3篇)
- 不合格产品召回处理流程回复函6篇范本
- 施工临时用电用水专项施工方案
- 2026年高考化学复习分类汇编(全国)考前押题选择题80道(解析版)
- 2025年四川省凉山州纪委监委考调笔试真题(附答案)
- DB6103∕T 91-2025 外来入侵植物综合防治技术规范 野燕麦
- 关于闰月的课件
- 危重症护理知识培训资料
- 债权撤销权申请书
- GCP药物临床试验培训课件
- 工地环境保护管理实施计划
- 协议健步走活动合同
- 2025年重症5c培训试题及答案
- 2026年一级建造师一建建筑实务案例分析考前重点知识必背十页纸
评论
0/150
提交评论