




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机组成与汇编语言(实验报告)内容: 实验一、六、七、八 院系专业: 计算机学院 计算机科学与技术 姓 名: xxxxxxxxx 学 号: 2011004xxxxx 完成时间:2012年 12月 1日 计算机组成与汇编语言实验报告姓名xxxx学号2011004xxxxx计分专业软件工程班级xxxx实验日期2012年 12 月 1日实验名称实验一 数制转换实验目的 熟悉各种进制数据之间的相互转换方法。 掌握二-十进制数据的相互转换程序设计。实验内容1将编写好的程序1输入、编译、连接并运行。程序1清单#include<stdio.h>#include<string.h>#
2、include<stdlib.h>void main()int i,l,s0=0,s=0;char a17;while(l!=16)printf("请输入一个16位的二进制数:n");gets(a);l=strlen(a);for(i=0;i<16;i+)if(ai!='0'&&ai!='1')printf("输入的二进制数不正确!");break;if(a15='1')s+;for(i=1;i<16;i+)if(a15-i='1')s+=(1<
3、<i);printf("二进制: ");puts(a);printf("对应的十进制为: ");printf("%dn",s);程序1运行结果:说明:如果不是16位二进制则会提示错误。2将编写好的程序2输入、编译、连接并运行。程序2清单#include<stdio.h>#include<math.h>void main()int t0,t1,t2,t3,i,j;int a16;printf("请输入一个十进制数:");scanf("%d",&t0);t1=t
4、0;for(i=0;i<16;i+)t2=t1/2;if(t2>1)ai=t1%2;else if(t1=1)a0=1;for(i=1;i<16;i+)ai=0;else if(t1=2)ai=0;ai+1=1;for(j=i+2;j<16;j+)aj=0;break;else if(t1=3)ai=1;ai+1=1;for(j=i+2;j<16;j+)aj=0;break;elseai=0;t1=t2;for(i=0;i<8;i+)t3=ai;ai=a15-i;a15-i=t3;printf("十进制数: %dn",t0);printf
5、("对应的二进制数是: ");for(i=0;i<16;i+)printf("%d",ai);printf("n");程序2运行结果:实验情况与体会:运行过程中出现过不能判断是否输错的情况以及权位判断有误等情况,经过思考和修改后修改正确,说明理解好二进制与十进制之间的转换过程很重要。编程过程中主要碰到的问题是,不够十六位的时候要在前面补零。转换方法主要是除二求余的方法。注:篇幅不够,可以另外附页。计算机组成与汇编语言实验报告姓名xxxx学号2011004xxxx计分专业软件工程班级xxxxx实验日期2012年 12 月 1日实验
6、名称实验六 分支结构程序设计实验目的 熟悉有符号定点数的表示。 掌握原码、补码、反码之间的相互转换程序设计。 实验内容1调试程序1:求无符号字节变量X,Y之差的绝对值,存储于字节变量A中。源程序如下:DATASEGMENT X DB 23Y DB 45 A DB ?DATAENDSCODESEGMENTASSUMECS:CODE, DS:DATASTART:MOV AX, DATA MOV DS, AX MOV AL, X MOV BL, Y CMP AL, BL JAE BIGSUB BL, AL MOV A, BL JMP EXITBIG:SUB AL, BLMOV A, ALEXIT:M
7、OV AX, 4C00HINT 21HCODEENDSEND START上机运行该程序并检查运行结果是否正确。上机实验过程:说明:该程序中X=23,Y=45,他们之差的绝对值为22,用16进制表示为0016H,即图中显示的结果2调试程序2:DATASEGMENTBUFDB38H,73H,1FH MAXDB?DATAENDSCODESEGMENTASSUMECS:CODE, DS:DATASTART:MOVAX, DATAMOVDS, AXMOVAL, BUF ;取BUF中的第一个数,同第二个数相比较,若大于则CMPAL, BUF+1 ;跳转到LP1JNBLP1MOVAL, BUF+1 ;小于则
8、取出第二个数继续比较LP1: CMPAL, BUF+2 ;若BUF大于BUF+1,则与BUF+2比较JAELP2 ;大于等于则跳转到LP2MOVAL, BUF+2LP2: MOV MAX,AL ;将最大的数转存到MAX中MOVBL, ALMOVCL, 04SHRAL, CLCMPAL, 0AH ;将最大数的高四位和0AH比较JBLP3ADDAL, 07HLP3: ADDAL, 30H ;将高四位转化为相应的ASCII码并以字符形式输出MOVDL ,ALMOVAH, 2INT21HMOVAL, BLANDAL, 0FH ;屏蔽高四位CMPAL, 0AH ;将低四位与0AH比较JBLP4ADDAL
9、, 07HLP4: ADD AL, 30H ;将低四位转化为相应的ASCII码并以字符形式输MOVDL, ALMOVAH, 2INT21HMOVAH, 4CHINT21HCODEENDS END START上机运行该程序并检查运行结果是否正确。上机实验过程:说明:求出三个数里面的最大数73;3. 编写程序1:编程实现从键盘输入一位数字,判断其奇偶性,并在屏幕上输出一个标志,若为奇数,则输出1,否则输出0。程序源代码:code segment assume cs:codestart:mov ah,01h ;调用dos中断1#子功能输入字
10、符 int 21h ;al<-输入一位数字 clc ;cf清0 rcr al,1 al最低位移入cf jnc evn ;最后一位是0说明是偶
11、数 mov al,31h 奇数al=1的ascii 码 jmp dispevn: mov al,30h 偶数,al<- 1的ascii码disp: mov ah,02h ;dos 中断的2#子功能,输出字符 ;mov dl,0ah output n
12、;int 21h ;mov dl,0dh output enter ;int 21h mov dl,al out flag word int 21h mov ah,4ch ;return dos int 21hcode
13、endsend start 说明:输入4,为偶数则输出0,即上图的40.输入5,为奇数则输出1即上图的51;4. 编写程序2:编程实现任意给定X值(-128<=X<=127),求符号函数Y的值,存放于内存单元。 5X-3 当X>0 Y= 0 当X=0 2X 当X<0源程序如下:DATA SEGMENT X DB ? Y DB ? INPUT DB 'INPUT A NUMBER:','$'DATA ENDSCODE SEGMENT ASSUME CS: CODE, DS: DATASTART: MOV AX, DATA MOV DS, A
14、X MOV DX, OFFSET INPUT;取INPUT的首地址 MOV AH, 9 ;实现键盘的输出 INT 21H MOV AH, 1 ;实现键盘的输入 INT 21H AND AL, 0FH ;将ASCII码转化为真值 MOV X, AL CMP X, 0;与0比较,大于则跳到NT1,小于则跳到NT2 JNL NT1 CMP X, 0 JL NT2 JMP EXITNT1: MOV DL, AL ;将X转存到DL,AL=DL=X ADC DL, DL;DL=2X ADC DL, DL;DL=4X ADC AL, DL;AL=5X MOV BL, 3 SBB AL, BL;BL=5X-3
15、 JMP EXITNT2: SHL AL, 1 ;AL=2X JMP EXITEXIT: MOV Y, AL ;结果存放于Y中 MOV AH, 4CH INT 21HCODE ENDS END START说明:输入9,则输出2A(十六进制)即4*9-3=42(十进制);5. 将编写好的程序3输入、编译、连接并运行。程序3清单DATASEGMENT ADW 03H B DW 03HDATA ENDSCODE SEGMENT ASSUMECS: CODE,DS: DATASTART: MOVAX,DATA MOV DS,AXMOV AX,A MOV BX,B AND AX,01H;判断A、B是否为
16、奇数 AND BX,01H CMP AX,BX;若A<B,则跳转到NT1,表明A为奇数,B为偶数 JNE NT1 CMP AX,1;若A=1,说明A、B同为奇数 JE NT2 CMP AX,0;若A=0,说明A、B同为偶数 JE NT3 JMP EXITNT1: MOV AX,A;若A为偶数,B为奇数,则交换 MOV BX,B XCHG AX,BX MOV A,AX MOV B,BX JMP EXITNT2: MOV AX,A;若A、B同为奇数,则每个变量加1 MOV BX,B INC AX INC BX MOV A,AX MOV B,BX JMP EXITNT3: MOV AX,A;若
17、A、B同为偶数,则不变 MOV BX,B MOV A,AX MOV B,BXEXIT: MOV AH,4CH INT 21HCODEENDS END START程序3运行结果:说明:A,B两个数都为3,都为奇数,故加1.成4,结果如上图。实验情况与体会:在此次实验中,可以说是我第一次接触到真正编写汇编实验,尽管刚开始写程序时会有指令不熟悉的情况或者指令运用不灵活的情况虽然程序的算法不难,但对于初学者来说,把思路理得顺畅还得花点时间好好琢磨。这让我觉得汇编是一门新的计算机语言,要想更好地掌握,还得自己多补不足,多花时间学习。注:篇幅不够,可以另外附页。计算机组成与汇编语言实验报告姓名xxxxx学
18、号2011004xxxxx计分专业软件工程班级xxxxx实验日期2012年 12 月 1日实验名称实验七 循环结程序设计实验目的 加深对循环结构的理解。 掌握循环程序的设计方法。 进一步熟悉汇编语言程序的汇编、连接及调试技术。实验内容1调试程序1:统计字型变量X中1的个数,存储于字节变量Y中。源程序如下:DATA SEGMENT X DW 63H Y DB ?DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS:DATA START: MOV AX, DATA MOV DS, AX MOV AX, X MOV BL, 0 MOV CX, 16 AGAIN: RO
19、L AX, 1 JNC NEXT INC BLNEXT: LOOP AGAIN MOV Y, BL EXIT: MOV AX, 4C00H INT 21H CODE ENDS END START上机运行该程序并检查运行结果是否正确。上机实验过程:通过实验测试,程序一运行结果为4,正确。2. 调试程序2: DATA SEGMENT ARRAY DB 34,56,0,58,79,0,0,28,98H COUNT EQU $-ARRAYDATA ENDS CODE SEGMENT ASSUME CS: CODE, DS:DATA START: MOV AX, DATA MOV DS, AX MOV
20、CX, COUNTMOV BX, -1 AGAIN: INC BXCMP ARRAYBX, 0 LOOPNZ AGAIN JE OK MOV DL, N JMP SHOW OK: MOV DL, BL OR DL, 30H CMP DL, 39H JBE SHOW ADD DL, 7 SHOW: MOV AH, 2 INT 21H EXIT: MOV AX, 4C00H INT 21H CODE ENDS END START上机运行该程序,查看其显示结果,并说明程序实现什么功能。上机运行该程序,查看运行结果为2,程序实现:查找数组中值为0的位置。3. 编写程序1:编程计算从1到100的和。 将
21、编写好的程序输入、汇编、连接并运行。源程序为:DATA SEGMENT X DW 0DATA ENDSCODE SEGMENT ASSUME CS: CODE, DS:DATASTART: MOV AX,DATA MOV DS,AX MOV CX,100 MOV BX,0BEGIN: INC BX ADD X,BX LOOP BEGIN MOV AH,4CH INT 21HCODE ENDS END START程序结果如上图:13BA(十六进制)=5050(十进制);4. 设内存中以BUFFER为首地址的缓冲区中有若干个以非压缩BCD码形式存放的十进制数,并以符号$结束。它的值可能是09中的任
22、意一个。编程将这些十进制数顺序显示在屏幕上。源程序为:DATA SEGMENTBUFFER DB 1,2,3,4,5,6,7,8,9,'$'DATA ENDSSTACK SEGMENT STACKSKTOP DB 40H DUP(?)SKSIZE EQU $-OFFSET SKTOPSTACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKBEGIN: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV SP,SKSIZE LEA SI,BUFFER CALL BCDDSP MOV
23、AX,4C00H INT 21HBCDDSP PROC PUSH AX PUSH DX PUSH SI MOV AH,2STATS: MOV AL,SI CMP AL,'$' JE STATRE SUB AL,9 JA CONTN ADD AL,9 JS CONTN ADD AL,30H MOV DL,AL INT 21HCONTN: INC SI JMP STATSSTATRE: POP SI POP DX POP AX RETBCDDSP ENDPCODE ENDS END BEGIN结果如上图;5.编写程序3:画出流程图,并编程计算S=1+2×3+3×
24、4+4×5+N×(N+1),直到N大于200为止,并将结果由屏幕上显示出来。将编写好的程序输入、汇编、连接并运行。开始流程图: 循环初始化:,BX=2 条件 >200 循环体:MOV AX,BX INC BX MUL BX ADD S,AX结束 源程序:DATA SEGMENT S DW 0DATA ENDSCODE SEGMENT ASSUME CS: CODE, DS:DATASTART: MOV AX,DATA MOV DS,AX MOV S,1 MOV BX,2BEGIN: CMP BX,200 JA NEXT MOV AX,BX INC BX MUL BX
25、ADD S,AX JMP BEGINNEXT: MOV AH,4CH INT 21HCODE ENDS END START程序结果如上图:4D6F(十六进制)=19823(十进制);实验情况与体会:本次实验过程依然遇到很多问题,比如输入程序时,单引号必须用英文状态下的单引号,根据提示修改即可解决。有时候是语句的类型不匹配等等。当循环次数确定时用计数循环,次数不确定时用条件控制循环。计数控制循环程序要注意循环次数的设置;控制循环程序要设置一个变量,使变量在一个状态下时进行循环,而在另一个状态下时则跳出循环。注:篇幅不够,可以另外附页。计算机组成与汇编语言实验报告姓名xxxx学号2011004xx
26、xxx计分专业软件工程班级xxxxx实验日期2012年 12 月 1日实验名称实验八 语言子程序设计实验目的 学习子程序的定义和调用方法,加深对子程序的理解。 熟悉子程序设计、编写及调试方法。 掌握子程序、嵌套子程序、递归子程序的结构。实验内容1.调试程序1:编写一个有主程序和子程序结构的程序模块,要求子程序在N字节数组中统计指定字符CHAR出现的次数。主程序则要求从键盘接收一串字符以建立字节数组TABLE(按Enter键结束),从键盘输入字符CHAR,并显示它在TABLE数组中出现的次数,直到输入回车符退出程序。(假设出现次数15,可以用一位十六进制数显示出来。)源程序如下:DSEGSEGM
27、ENT TABLEDB255 DPU (?) NDW255 CHARDB? CRLFDB0DH, 0AH, '$'DSEGENDSSTACKSEGMENT DW100DPU (?)STACKENDSCSEGSEGMENTMAINPROCFAR ASSUMECS:CSEG,DS:DSEG,SS:STACKSTART:PUSHDS;设置返回DOS SUB AX,AX PUSH AX MOV AX,DSEG MOV DS, AX;给DS赋值BEGIN:MOV BX, 0 MOV CX, 255;最多输入255个字符INPUT:MOV AH, 1 ;从键盘接收一个字符的DOS功能调用
28、INT 21H CMP AL,0DH;输入回车符结束输入 JZ IN_N MOV TABLEBX,AL INC BX LOOP INPUTIN_N:MOV N,BX CALL DISP_CRLFIN_CHAR:MOV AH, 1 ;从键盘接收一个字符并回显得DOS功能调用 INT 21H CMP AL, 0DH;输入回车符结束 JZ EXIT MOV CHAR,AL MOV DL,':'显示“:”,在字符CHAR(输入时回显)的后面 MOV AH,2;显示一个字符 INT 21H MOV AL,CHAR MOV CX,N;TABLE数组中的字符个数送CX LEA BX,TABL
29、E CALL SEARCH;调搜索字符子程序 AND DL,0FH ADD DL,30H CMP DL,39H JBE NEXT1;是0-9 ADD DL,07H;是A-FNEXT1:MOV AH, 2;显示一个字符 INT 21H CALLDISP_CRLF JMP SHORT IN_CHAREXIT:RETMAINENDP ;子程序名:SEARCH ;功能:统计指定字符在字符串中出现的次数 ;入口参数:BX=字符串地址;CX=字符串长度;AL=指定字符ASCII码 ;出口参数:DL=字符出现次数SEARCH PROCNEAR MOVDL, 0ROTATE: CMPAL, BX JNZNEX
30、T2 INCDL;搜索到字符,则出现次数+1NEXT2: INCBX LOOPROTATE RETSEARCH ENDP;SEARCH子程序结束 ;子程序名:DISP_CRLF ;功能:显示回车换行符DISP_CRLF PROCNEAR LEADX, CRLF MOVAH, 09H INT21H RETDISP_CRLFENDPCSEGENDS ENDSTART运行结果:说明:如图输入123后,显示出1232、编写8_1_1源程序如下:DATA SEGMENT ARRAY DB 34H,26H,0FAH,0A5H,8,72H,65H,0C1H,0FEH,70H COUNT EQU $-ARRA
31、Y RESULT DB ? DATA ENDSCODE SEGMENT ASSUME CS: CODE, DS: DATASTART: MOV AX, DATA MOV DS, AX MOV BX, OFFSET ARRAY ;BX数组的偏移地址 MOV CX, COUNT ;CX数组的元素个数 CALL CHECKSUM ;调用求和过程 MOV RESULT, AL ;处理出口参数 MOV AH, 4CH INT 21H ;子程序 CHECKSUM ;功能:求数组元素的校验和 ;入口:BX数组元素的偏移地址 ;出口: 校验和运算结果CHECKSUM PROC XOR AL, AL ;累加器清
32、0SUM: ADD AL, BX ;求和 INC BX ;指向下一个字节 LOOP SUM ;循环求和 RETCHECKSUM ENDPCODE ENDS END START运行结果:结果说明(校验和):07H3.编写8_1_2源程序如下:DATA SEGMENT ARRAY DB 34H,26H,0FAH,0A5H,8,72H,65H,0C1H,0FEH,70H COUNT EQU $-ARRAY LEN DB ? AA DW ? RESULT DB ? DATA ENDSCODE SEGMENT ASSUME CS: CODE, DS: DATASTART: MOV AX, DATA MO
33、V DS, AX MOV LEN, BYTE PTR COUNT ;LEN数组的元素个数 LEA BX, ARRAY ;AA数组的偏移地址 MOV AA, BX CALL CHECKSUM ;调用求和过程 MOV AH, 4CH INT 21H ;子程序 CHECKSUM ;功能:求数组元素的校验和 ;入口:数组的偏移地址及数组元素个数存放于变量AA 和LEN中 ;出口: 校验和运算结果CHECKSUM PROC PUSH AX 保护现场 PUSH BX PUSH CX XOR AL, AL ;累加器清0 MOV BX, AA ;BX数组的偏移地址 MOV CX, WORD PTR LEN ;
34、CX数组的元素个数SUM: ADD AL, BX ;求和 INC BX ;指向下一个字节 LOOP SUM ;循环求和 MOV RESULT, AL ;保存校验和 POP CX ;恢复现场 POP BX POP AX RETCHECKSUM ENDPCODE ENDS END START运行结果:结果说明:数组长度0AH,数组偏移地址:00,数组校验和:07H4.编写8_1_3源程序如下:STACK SEGMENTSTACKDB 100 DUP(0)STACK ENDSDATA SEGMENT ARRAY DB 34H,26H,0FAH,0A5H,8,72H,65H,0C1H,0FEH,70H
35、 COUNT EQU $-ARRAY RESULT DB ? DATA ENDSCODE SEGMENT ASSUME CS: CODE, DS: DATA,SS:STACKSTART: MOV AX, DATA MOV DS, AX MOV AX, OFFSET ARRAY ;取AX数组的偏移地址 PUSH AX ;压入数组的偏移地址 MOV AX, COUNT ;取AX数组的元素个数 PUSH AX ;压入数组的元素个数 CALL CHECKSUM ;调用求和过程 ADD SP, 4 ;主程序平衡堆栈 MOV RESULT, AL ;保存校验和 MOV AH, 4CH INT 21H ;子
36、程序 CHECKSUM ;功能:求数组元素的校验和 ;入口:数组首地址及数组元素个数存放于堆栈中 ;出口: 校验和运算结果CHECKSUM PROC PUSH BP ;保护使用的BP寄存器 PUSH BX ;保护使用的BX寄存器 PUSH CX ;保护使用的CX寄存器 MOV BP, SP ;BP指向当前栈顶,用于取出入口参数 MOV BX, BP+10 ;BXSS:BP+10(数组的偏移地址) MOV CX, BP+8 ;CXSS:BP+8(数组的元素个数) XOR AL, AL ;累加器清0SUM: ADD AL, BX ;求和:ALAL+DS:BX INC BX ;指向下一个字节 LOOP SUM ;循环求和 POP CX ;恢复寄存器 POP BX POP BP RETCHECKSUM ENDPCODE ENDS END START运行结果:结果说明:07H5. 将编写好的程序2输入、汇编、连接并运行。源程序如下: DATA SEGMENT TAB DB 0,1,4,9,16,25,36,49 SUM DW ?DATA ENDSCODE SEGMENT ASSUME CS:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论