为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

80X86汇编语言程序设计课内实验报告2

2019-04-20 20页 doc 49KB 5阅读

用户头像

is_314871

暂无简介

举报
80X86汇编语言程序设计课内实验报告280X86汇编语言程序设计课内实验报告 班级 计算机84 实验时间 2010/6/17 姓名 陈聪 学号 08055081 实验内容概述 实验一 子程序及 DOS/BIOS 调用程序设计 题6.9 设有10 个学生的成绩分别是76,69,84,90,73,88,99,63,100 和80 分。 试编制一个子程序统计60~69 分,70~79 分,80~89 分,90~99 分和100 分的人数并分别存放到S6, S7, S8, S9 和S10 单元中。 实验二 高级汇编语言技术 题7.11 ...
80X86汇编语言程序设计课内实验报告2
80X86汇编语言程序课内实验 班级 计算机84 实验时间 2010/6/17 姓名 陈聪 学号 08055081 实验内容概述 实验一 子程序及 DOS/BIOS 调用程序设计 6.9 设有10 个学生的成绩分别是76,69,84,90,73,88,99,63,100 和80 分。 试编制一个子程序统计60~69 分,70~79 分,80~89 分,90~99 分和100 分的人数并分别存放到S6, S7, S8, S9 和S10 单元中。 实验二 高级汇编语言技术 题7.11 试编写一段程序,完成以下功能:若给定名为X 的字符串长度大于5 时,下列指令将汇编10 次。 ADD AX, AX (要求:使用条件汇编,编译过程中生成LST 文件,查看宏展开情况) 实验三 输入输出程序设计 编写程序,使类型1CH 的中断向量指向中断处理程序COUNT,COUNT 统计1CH 中断次数并存入单元M 中。 实验四 BIOS 和DOS 中断 题9.2 编写一个程序,接收从键盘输入的10 个十进制数字,输入回车符则停止输入,然后将这些数字加密后(用XLAT 指令变换)存入内存缓冲区BUFFER。 加密表为: 输入数字: 0,1,2,3,4,5,6,7,8,9 密码数字: 7,5,9,1,3,6,8,0,2,4 实验步骤 第一题: 在主程序中调用子函数count,完成将每个在数组mark里的成绩一一取出,分别判定其大小而放入统计60~69 分,70~79 分,80~89 分,90~99 分和100 分的人数的S6, S7, S8, S9 和S10 单元中,在屏幕上依次显示出S6, S7, S8, S9 和S10中的数。 第二题: 使用条件汇编和重复汇编。判断当给定名为X 的字符串长度大于5 时,重复 ADD AX, AX 10 次。 第三题: 使类型1CH 的中断向量指向中断处理程序COUNT,COUNT中 1CH 中断每调用一次则给num加一,计算出num最后的值后存入单元M 中。 第四题: 接收从键盘输入的10 个十进制数字,输入回车符则停止输入, 在bx里存入数组7,5,9,1,3,6,8,0,2,4的符号地址,每键入一个数后都存入al,调用xlat使得(al)<—((al)+(bx)) al中为译码后的数,存入String并一次输出所有的数。 实验中遇到的问题及其解决 1、 问题 在调用DOS/BIOS时将16进制数后没有加H,造成程序报错。 解决方法:仔细读程序,多注重编程细节,努力养成好的编程习惯。……….. 2、 问题 刚开始编第二题时没有用到重复汇编,对学过去的知识没能及时使用。 解决方法:以后要多实践,多思考。 3、 对符号地址的理解不清晰,在编写用xlat时出现了错误。 解决方法:经过老师的讲解和自己看思考,终于弄清楚了。 ………… 实验结果 见下页 2010年6 月17 日 建议 无 备注 源代码和截图见下页         程序一 程序代码: SSEG SEGMENT PARA STACK 'stack' ary  dw 100h dup(0) ;初始化堆栈大小为100 SSEG ENDS DATA SEGMENT sum dw 10 mark dw 76,69,84,90,73,88,99,63,100,80 S6 db 0 S7 db 0 S8 db 0 S9 db 0 S10 db 0 ;数据段:在此处添加程序所需的数据 DATA ENDS CODE SEGMENT assume  cs:CODE, ds:DATA, ss:SSEG MAIN PROC FAR      ;主程序入口 push ds sub ax,ax push ax mov ax, data mov ds, ax call near ptr count mov ah,1;按任意键退出 int 21h mov ax, 4c00h  ;程序结束,返回到操作系统系统 int 21h MAIN ENDP    count proc near push ax push cx push bx push si    lea si, mark mov  cx,sum xor ax,ax MOV BX,SI COMPARE:  MOV AX,[BX] CMP AX,60    ;与60比较 JL EXIT      ;小于就跳到EXIT CMP AX,70    ;与70比较 JL  SIX      ;小于就跳到SIX CMP AX,80    ;与80比较 JL  SEVEN    ;小于就跳到SEVEN CMP AX,90    ;与90比较 JL  EIGHT    ;小于就跳到EIGHT CMP AX,100    ;与100比较 JNE  NINE    ;不为0就是90到99 INC S10      ;100时【S10+1】 JMP NEWDATA  ;跳到NEWDATA SIX:          INC S6        ;大于等于60小于70时【S6+1】 JMP NEWDATA  ;跳到NEWDATA SEVEN:    INC S7        ;大于等于70小于80时【S7+1】 JMP NEWDATA  ;跳到NEWDATA EIGHT:    INC S8        ;大于等于80小于90时【S8+1】 JMP NEWDATA  ;跳到NEWDATA NINE:    INC S9        ;大于等于90小于100时【S9+1】 NEWDATA:  ADD BX,2      ;取下个数 LOOP COMPARE  ;循环COMPARE MOV AL,S6 ADD AL,30H PRINT:     MOV DL,AL MOV AH,2 INT 21H    MOV AL,S7 ADD AL,30H MOV DL,AL MOV AH,2 INT 21H    MOV AL,S8 ADD AL,30H MOV DL,AL MOV AH,2 INT 21H    MOV AL,S9 ADD AL,30H MOV DL,AL MOV AH,2 INT 21H    MOV AL,S10 ADD AL,30H MOV DL,AL MOV AH,2 INT 21H EXIT:mov ax, 4c00h  ;程序结束,返回到操作系统系统 int 21h POP SI pop bx pop cx pop ax count endp CODE ENDS END MAIN 截图: 程序二 程序代码: SSEG SEGMENT PARA STACK 'stack' ary dw 100h dup(0) ;初始化堆栈大小为100 SSEG ENDS DSEG SEGMENT a dw ? ;数据段:在此处添加程序所需的数据 DSEG ENDS CSEG SEGMENT assume  cs:CSEG, ds:DSEG, ss:SSEG MAIN PROC FAR      ;主程序入口 push ds push ax mov ax, dseg mov ds, ax mov ax,1 x db 'asjfdddkahd' cnt equ $-x if cnt gt 5 rept 10 add ax,ax endm ;lall endif ;此处添加主程序代码 ;按任意键退出 mov ah,1 int 21h mov ax, 4c00h  ;程序结束,返回到操作系统系统 int 21h MAIN ENDP CSEG ENDS END MAIN 截图: 程序三 程序代码: DATAS SEGMENT NUM  Db 0 M  Db  0 ;此处输入数据段代码  DATAS ENDS STACKS SEGMENT stack db 100 dup(?) ;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS ;MAIN PROC FAR    START: MOV AX,DATAS MOV DS,AX MOV  AL,1CH MOV  AH,35 INT  21H PUSH ES PUSH BX PUSH DS MOV AX, SEG COUNT MOV DS, AX MOV DX, OFFSET COUNT MOV AL, 1CH MOV AH,25 INT 21H ;POP DS mov dl,M POP DX POP DS MOV AH,1CH MOV AH,25 INT 21H MOV AX,4C00H INT 21H ;MAIN ENDP      COUNT PROC NEAR PUSH  CX push  ds push  ax mov  ax,datas mov  ds,ax INC NUM mov al,num mov M,al POP CX pop  ax pop  ds IRET COUNT ENDP CODES ENDS END START 截图: 程序四 程序代码: Code  Segment Assume CS:Code,DS:Code Output  MACRO Str_Addr lea  dx,Str_Addr mov  ah,9 int  21h EndM Enter_CTLF proc Near push  ax push  dx mov  ah,02h mov  dl,0dh int  21h mov  dl,0ah int  21h pop  dx pop  ax ret Enter_CTLF endp Encode  db  '7591368024' Prompt_Str1 db  'Please input the orical code: $' Prompt_Str2 db  'The encode: $' Start:  push cs pop  ds push cs pop  es ;使数据段、附加段与代码段同段 Output Prompt_Str1 ;提示输入明码 cld lea  di,String mov  cx,20 Read_Encode: mov  ah,1 int  21h cmp  al,13 ;回车? jz  Disp_Encode cmp  al,'0' jb  Read_Encode cmp  al,'9' ja  Read_Encode stosb loop Read_Encode Disp_Encode: mov  cx,di sub  cx,offset String ;实际输入的数字个数 lea  si,String lea  bx,Encode Encoding: lodsb and  al,0fh xlat ;查表,取得对应的密码 mov  [si-1],al loop Encoding mov  byte ptr [si],'$' call Enter_CTLF call Enter_CTLF Output Prompt_Str2 Output String Exit_Proc: mov  ah,4ch int  21h String  db  ? Code  ENDS END  Start 截图:
/
本文档为【80X86汇编语言程序设计课内实验报告2】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索