




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
汇编语言实验报告姓名: 组长: 张亚昊(11072107) 组员: 安然(11072109)完成日期:2013年4月题目1:分支程序设计【题目要求】编写程序,键入学生成绩(百分制),按A、B、C、D显示在屏幕上。【编程思路】输入并存储一个INT的赋值,比较一个数值在其中的哪个分支,并现实成绩的显示(ABCDE)【程序流程图】开始 一个INT的赋值比较成绩属于哪一个档数值在90-100数值在80-90数值在70-80数值在60-70数值在1-60 输出结果 【源代码】一、 dsegsegmentMsgInputdb0ah, 0dh, Input a score: , $MsgErrordbInvalid Input!, $BufInputdb5, ?, 5 dup( ? )GradedbEDCBA, $dsegendscsegsegmentassume ds:dseg, cs:csegBEGIN:movax,dsegmovds,axInit:leadx,MsgInputmovah,9int21hleadx,BufInputmovah,0ahint21hmovdl,0ahmovah,2int21hmovax,0leabx,BufInput + 2LoopCalc:cmpbyte ptrbx,0dhjeComparecmpbyte ptrbx,0jbErrorcmpbyte ptrbx,9jaErrorsubbyte ptrbx,0movcx,10mulcxmovcx,0movcl,bxadd ax,cxincbxjmpLoopCalcCompare:cmpax,100jaErrormovcl,10divclcmpal,9jbeNext1moval,9Next1:cmpal,5jaeNext2moval,5Next2:subal,5leabx,Gradexlatmovdl,almovah,2int21hjmpInitError:leadx,MsgErrormovah,9int21hjmpInitmovah,04chint21hcsegendsendBEGIN【程序测试与实现】题目2:循环程序设计【题目要求】设有一段文字,编写一段程序查找字母a出现的次数,并显示在屏幕上。【编程思路】 输入并存储一个字符串,将字符串长度存入CL。设置计数器AX并清零,顺序遍历字符串,如果字符与A相同,计数器+1,循环遍历CL次。显示AX中内容,就可以显示A出现的次数。 【程序流程图】开始输入字符串存储字符串比较指针指向字符N计数器AX=0长度存入CL指针初始化首址指针SI+1CL=CL-1计数器AX/10,AL=AL+30HAH=AH+30H不是AAX=AX+1指针SI+1CL=CL-1是ACL=0CL=0?YY输出个数 结束【源代码】 STACKS SEGMENT STACK ;堆栈段 DW 128 DUP(?) ;注意这里只有128个字节 STACKS ENDS DATA SEGMENT BUF DB 30H DB ? DB 20H DUP(0) COUNT EQU BUF+1 STRING1 DB Count the num of A$ STRING2 DB Please input a string:$ DATA ENDS ENT MACRO ;宏汇编 定义换行 MOV DL,0DH MOV AH,2 INT 21H MOV DL,0AH INT 21H ENDM CODE SEGMENT ASSUME DS:DATA,CS:CODE START: MOV AX,DATA MOV DS,AX MOV DX,OFFSET STRING1 ;显示标题 MOV AH,09H INT 21H ENT MOV AH,09H ;显示 * MOV AL,* MOV BL,0C1H MOV CX,20 INT 10H ENT START2: MOV DX,OFFSET STRING2 ;显示“PLEASE INPUT A STRING” MOV AH,09H INT 21H ENT MOV DX,OFFSET BUF ;存储输入字符串 MOV AH,0AH INT 21H CMP BUF+2,0 JE EXIT CMP BUF+1,20 JG ERROR ENT XOR AX,AX ;AX作为A的计数器,清零 MOV CH,0 MOV CL,COUNT ;循环次数存入CL,表示字符串长度 MOV SI,2 AGAIN: MOV BL,BUFSI CMP BL,a JE SAME JNE NOTSAME MOV AH,4CH INT 21H NOTSAME: INC SI LOOP AGAIN JMP PRINT SAME: INC AX ;A计数器+1,表示A出现次数 INC SI ;指针+1 LOOP AGAIN JMP PRINT PRINT: MOV DL,10 ;10给除数 DIV DL ;AX内容除10 ADD AL,30H ;将存储在主存单元中的商数值转换为ASCII ADD AH,30H ;将存储在主存单元中的余数数值转换为ASCII MOV BH,AH MOV DL,AL ;屏幕输出商 MOV AH,02H INT 21H MOV DL,BH ;屏幕输出余数 MOV AH,02H INT 21H ENT ENT JMP START2 ;跳转重新运行程序 MOV AH,4CH INT 21H EXIT: ENT MOV AH,4CH INT 21H ERROR: ENT ENT MOV DL,E ;字符串过长越界,显示E MOV AH,02H INT 21H ENT JMP START2 MOV AH,4CH INT 21H CODE ENDS ;代码段结束 END START ;汇编完成,跳START运行程序【程序测试与实现】题目3 :子程序设计 【题目要求】给定一个数组存放5个小写字母,用地址表传递方法编写子程序,将其转换成大写字母,并显示在屏幕上。【编程思路】分别将每个字符的ascii码值减32,然后显示在屏幕上。【程序流程图】输入子程序调用读取数据并储存将每个字母的ascii码值减32输出【源代码】 STACKS SEGMENT STACK ;堆栈段 DW 128 DUP(?) ;注意这里只有128个字节 STACKS ENDS DATA SEGMENT ;数据段 ARRAY DW 5 DUP(0) COUNT DW 5 RESULT DW 5 DUP(0) ADDRESS DW 3 DUP(0) ;定义地址表 STRING1 DB Transport letters $ STRING2 DB Please input 5 small letters,(0)to exit:$ STRING3 DB Result is:$ ATTENTION1 DB Can not input this letter $ DATA ENDS ENT MACRO ;宏定义 定义换行 MOV DL,0DH MOV AH,2 INT 21H MOV DL,0AH INT 21H ENDM STACK1 SEGMENT PARA STACK ;堆栈段 DW 40H DUP(0) STACK1 ENDS CODE SEGMENT ;代码段 ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV DX,OFFSET STRING1 MOV AH,09H INT 21H ENT MOV AH,09H ;显示 * MOV AL,* MOV BL,0C1H MOV CX,20 INT 10H ENT START2: MOV DX,OFFSET STRING2 ;显示请输入5个字符 MOV AH,09H INT 21H XOR DX,DX MOV SI,0 LP: MOV AH,1 ;输入一个字符 INT 21H CMP AL,0 JE EXIT CMP AL,a ;判断输入字符的大小写,如果是大写,跳转到ATTENTION JB ATTENTION CMP AL,z JA ATTENTION MOV BYTE PTR ARRAYSI,AL INC SI CMP SI,5 ;比较SI,5 JNE LP ;如果不相等,表明未输入满5个数,继续输入 MOV ADDRESS,OFFSET ARRAY ;ARRAY地址存入地址表 MOV ADDRESS+2,OFFSET COUNT ;COUNT地址存入地址表 MOV ADDRESS+4,OFFSET RESULT ;RESULT地址存入地址表 MOV BX,OFFSET ADDRESS ;地址表 装入BX CALL TRANSPORT ;调用子程序(大小写转换) ENT ENT JMP START2 MOV AH,4CH INT 21H EXIT: ENT MOV AH,4CH INT 21H ATTENTION: ENT ;异常输入,提示用户 LEA DX,ATTENTION1 MOV AH,9 INT 21H ENT ENT JMP START2 TRANSPORT PROC MOV SI,BX ;ARRAY地址存入SI MOV DI,BX+2 ;COUNT地址存入DI MOV CX,DI ;COUNT 内容取出,存入cx作为计数器 MOV DI,BX+4 ;RESULT地址存入DI XOR AX,AX ;初始化AX LOP: MOV AX,SI ;小写字母变大写 SUB AX,20H MOV DI,AX ;结果存入RESULT中 ADD SI,1 ADD DI,1 ;指向数组下一单元 LOOP LOP ENT ;MOV DI,$ ENT MOV DX,OFFSET STRING3 ;显示STRING3 MOV AH,09H INT 21H MOV DX,OFFSET RESULT ;显示result 的内容 MOV AH,9 INT 21H RET TRANSPORT ENDP CODE ENDS END START ;汇编完成,跳START运行程序【程序测试与实现】题目4:DOS功能调用【题目要求】在图形方式下,在屏幕中央绘制一个用“*”表示的矩形。【编程思路】使用指针的定位,考虑到指针初始化在最右的最上面,于是输出回车和换行可以将指针换行到中间左右,然后输出空格顶到正中间.先输入两条变长(上下)再输入左右两条变长【程序流程图】将矩形的位置定位到中间输出一排星号字符串输出星号的边长【源代码】; ;这是自动生成的代码模板 STACKS SEGMENT STACK ;堆栈段 DW 128 DUP(?) ;注意这里只有128个字节 STACKS ENDS DATAS SEGMENT ;数据段;请在这里定义您的数据 DATAS ENDS CODES SEGMENT ;代码段 ASSUME CS:CODES,DS:DATAS START: MOV AX,DATAS ;初始化 MOV DS,AX PUSH CS POP DS MOV AX,12H INT 10H MOV SI ,OFFSET STRING0 CALL SHOW MOV SI ,OFFSET STRING1 CALL SHOW MOV SI ,OFFSET STRING2 MOV CX,5 NEXT: CALL SHOW LOOP NEXT MOV SI ,OFFSET STRING1 CALL SHOW MOV AH,7 INT 21H MOV AX,3 INT 10H MOV AH,4CH INT 21H SHOW: MOV DX,SI MOV AH,9 INT 21H RET STRING0 DB 10 DUP (13,10),$ STRING1 DB 13,10,4 DUP(9,20H),*$ STRING2 DB 13,10,4 DUP(9,20H),*,14 DUP(20H),*$ CODES ENDS END START MOV AX,4C00H ;退出程序 INT 21H CODES ENDS END START题目5 【题目要求】编写一个生成ASCII码表的程序,并显示在屏幕上。【编程思路】在内层循环写ascII码,内层从20H加至7EH,满16个换行,显示全部的ascII码【程序流程图】输出两位十六进制码低位的字符串为表头输出两位十六进制码高位,初始为2,然后递增输出20H的ascII码,依次递增,到7EH结束程序,每16个换行判断十六进制码高位是将到到8,没有返回上面的循环【源代码】 STACKS SEGMENT STACK ;堆栈段 DW 128 DUP(?) ;注意这里只有128个字节 STACKS ENDS DATA SEGMENT HEAD DB 0 1 2 3 4 5 6 7 8 9 A B C D E F$ DATA ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE ENT MACRO ;宏定义换行 MOV DL,0DH MOV AH,2 INT 21H MOV DL,0AH INT 21H ENDM START: MOV AX,DATA MOV DS,AX LEA DX,HEAD MOV AH,09H INT 21H XOR DX,DX ENT MOV DI,2 ;列标号 MOV BL, ;由空格开始 LOOP1: MOV SI,DI ADD SI,30H MOV DX,SI ;显示列标号 MOV AH,02H INT 21H MOV DL,20H ;空格 INT 21H MOV BH,0 ;BH为列控制器 LOOP2: MOV DL,BL ;BL 存储ASCII码 MOV AH,02H ;输出当前ASCII码 INT 21H MOV DL,20H INT 21H INC BL ;ASCII码+1 CMP BL,7FH JE EXIT INC BH ;列控制计数器,达到16换行 CMP BH,16 JNE LOOP2 ENT INC DI CMP DI,8 JNE LOOP1 EXIT: MOV AH,4CH INT 21H CODE ENDS END START【程序测试与实现】题目6【题目要求】根据提示输入任意年份,编写判断闰年的程序,如果是闰年, 则在屏幕上显示“this is leap year”,否则显示“this is not a leap year”。【编程思路】首先判断位数,按位读取,错误就报错,否则转换为数字年,然后判断是否为100倍数,如果是100倍数则判断是否为400倍数,是则为闰年;若不是100倍数,就判断是否为4的倍数,是则为闰年。【程序流程图】按位读取,直接判断位数,转换为数字年,若年数不合规范报错判断是否为100倍数判断是否为400倍数判断是否为4倍数 是则为闰年,不是不为闰年。【源代码】DATA SEGMENT TITL DB Determine leap year$ STRING1 DB Please input a year:(1-9999),0AH,0DH,$ STRINGY DB 0DH,0AH,It is a leap year,$ STRINGN DB 0DH,0AH,It is not a leap year,$ BUF DB 5;缓冲区长度 DB 0 DB 5 DUP(0) ;存储空间 YEAR DW 0 DATA ENDSENTER1 MACRO ;宏汇编 定义换行 MOV DL,0DH MOV AH,2 INT 21H MOV DL,0AH INT 21H ENDM CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV DX,OFFSET TITL ;显示标题 MOV AH,09H INT 21H ENTER1 START2: MOV DX,OFFSET STRING1 MOV AH,09H INT 21H ;提示输入 MOV DX,OFFSET BUF MOV AH,0AH INT 21H ;输入字符串 MOV SI,OFFSET BUF+2 ;第一个输入的字符的地址给SI XOR CX,CX MOV CL,BUF+1 ;CX存放输入字符的个数;判断输入了几位数字 CMP CX,4 JE Qian CMP CX,3 JE Bai CMP CX,2 JE Shi CMP CX,1 JE Ge1 Qian: XOR AX,AX ;处理千位数 MOV AL,SI ;把千位数字给AL SUB AL,30H ;ASC转数字 MOV BX,1000 MUL BX ;各位数字乘以位权,结果存放在AX ADD YEAR,AX ;YEAR以数字形式存放用户输入的年份 INC SI Bai: XOR AX,AX ;处理百位数 MOV AL,SI SUB AL,30H MOV BX,100 MUL BX ADD YEAR,AX INC SI Shi: XOR AX,AX ;处理十位数 MOV AL,SI SUB AL,30H MOV
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年学历类自考新闻学概论-学前特殊儿童教育参考题库含答案解析(5套试卷)
- 2025年学历类自考教育学(一)-中国古代文学作品选(二)参考题库含答案解析(5套试卷)
- 2025年学历类自考政治经济学(财经类)-中国税制参考题库含答案解析(5套试卷)
- 2025年学历类自考当代中国政治制度-财务报表分析(一)参考题库含答案解析(5套试卷)
- 眼睛保健知识培训课件
- 2025年学历类自考国际商务英语-企业管理概论参考题库含答案解析(5套试卷)
- 2025年学历类自考古代汉语-学前儿童音乐教育参考题库含答案解析(5套试卷)
- 航空航天设备高性能复合材料年度供应合同及法务合规支持服务
- 2025年度特色房产租赁增值服务专项协议
- 二零二五年度绿色住宅小区建设营销方案与推广服务合同
- 勉县一中小升初数学试卷
- 2025年消毒供应室业务学习考试试题(附答案)
- 2025一建《建设工程经济》计算、时间、数字考点笔记
- 校园基孔肯雅热防控措施课件
- 第1课 中国古代政治制度的形成与发展 课件 统编版高中历史选择性必修1
- 劳技自制收纳盒课件
- 《管理学基础与实务》 课件全套 曾宪达 第1-11章 管理与管理者- 管理创新
- 药师考试历年真题综合测试试卷(含答案)
- 2025年村级防疫员考试模拟试题及答案
- 生猪屠宰兽医卫生检验人员理论考试题库及答案
- 老年人睡眠障碍护理
评论
0/150
提交评论