计算机组成与汇编语言(实验报告)内容: 实验一、六、七、八院系专业:计算机学院计算机科学与技术姓名:xxxxxxxxx学号:*******xxxxx完成时间:2012年12月1日计算机组成与汇编语言实验报告printf("输入的二进制数不正确!!");break;}}}if(a[15]=='1')s++;for(i=1;i<16;i++){if(a[15-i]=='1')s+=(1<<i);}printf("二进制: ");puts(a);printf("对应的十进制为: ");printf("%d\n",s);}程序1运行结果:实验情况与体会:运行过程中出现过不能判断是否输错的情况以及权位判断有误等情况,经过思考和修改后修改正确,说明理解好二进制与十进制之间的转换过程很重要。
编程过程中主要碰到的问题是,不够十六位的时候要在前面补零。
转换方法主要是除二求余的方法。
注:篇幅不够,可以另外附页。
计算机组成与汇编语言实验报告姓名xxxx 学号2011004xxxx 计分专业软件工程班级xxxxx 实验日期2012年 12 月 1日实验名称实验六分支结构程序设计实验目的●熟悉有符号定点数的表示。
●掌握原码、补码、反码之间的相互转换程序设计。
实验内容说明:该程序中X=23,Y=45,他们之差的绝对值为22,用16进制表示为0016H,即图中显示的结果2.调试程序2:DATA SEGMENTADD AL, 07HLP4: ADD AL, 30H ;将低四位转化为相应的ASCII码并以字符形式输MOV DL, ALMOV AH, 2INT 21HMOV AH, 4CHINT 21HCODE ENDSEND START上机运行该程序并检查运行结果是否正确。
上机实验过程:说明:求出三个数里面的最大数73;3. 编写程序1:编程实现从键盘输入一位数字,判断其奇偶性,并在屏幕上输出一个标志,若为奇数,则输出1,否则输出0。
程序源代码:code segmentassume cs:codestart:mov ah,01h ;调用dos中断1#子功能输入字符int 21h ;al<-输入一位数字clc ;cf清0rcr al,1 ;al最低位移入cfjnc evn ;最后一位是0说明是偶数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;int 21h;mov dl,0dh ;output enter;int 21hmov dl,al ;out flag wordint 21hmov ah,4ch ;return dosint 21hcode endsend start说明:输入4,为偶数则输出0,即上图的40.输入5,为奇数则输出1即上图的51;4. 编写程序2:编程实现任意给定X值(-128<=X<=127),求符号函数Y的值,存放于内存单元。
5X-3 当X>0Y= 0 当X=02X 当X<0源程序如下:DATA SEGMENTX DB ?Y DB ?INPUT DB 'INPUT A NUMBER:','$'DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATASTART: MOV AX, DATAMOV DS, AXMOV DX, OFFSET INPUT;取INPUT的首地址MOV AH, 9 ;实现键盘的输出说明:输入9,则输出2A(十六进制)即4*9-3=42(十进制);5. 将编写好的程序3输入、编译、连接并运行。
程序3清单DATA SEGMENTJMP EXITNT3: MOV AX, A ;若A、B同为偶数,则不变 MOV BX, BMOV A, AXMOV B, BXEXIT: MOV AH, 4CHINT 21HCODE ENDSEND START程序3运行结果:说明:A,B两个数都为3,都为奇数,故加1.成4,结果如上图。
实验情况与体会:在此次实验中,可以说是我第一次接触到真正编写汇编实验,尽管刚开始写程序时会有指令不熟悉的情况或者指令运用不灵活的情况虽然程序的算法不难,但对于初学者来说,把思路理得顺畅还得花点时间好好琢磨。
这让我觉得汇编是一门新的计算机语言,要想更好地掌握,还得自己多补不足,多花时间学习。
计算机组成与汇编语言实验报告姓名xxxxx 学号2011004xxxxx 计分专业软件工程班级xxxxx 实验日期2012年 12 月 1日实验名称实验七循环结程序设计实验目的●加深对循环结构的理解。
●掌握循环程序的设计方法。
●进一步熟悉汇编语言程序的汇编、连接及调试技术。
实验内容1.调试程序1:统计字型变量X中1的个数,存储于字节变量Y中。
源程序如下:DATA SEGMENTX DW 63HY DB ?DATA ENDSCODE SEGMENTASSUME CS: CODE, DS:DATA START: MOV AX, DATAMOV DS, AXMOV AX, XMOV BL, 0MOV CX, 16AGAIN: ROL AX, 1JNC NEXTINC BLNEXT: LOOP AGAINMOV Y, BLEXIT: MOV AX, 4C00HINT 21HCODE ENDSEND START上机运行该程序并检查运行结果是否正确。
上机实验过程:通过实验测试,程序一运行结果为4,正确。
2. 调试程序2:DATA SEGMENTARRAY DB 34,56,0,58,79,0,0,28,98HCOUNT EQU $-ARRAYDATA ENDSCODE SEGMENTASSUME CS: CODE, DS:DATA START: MOV AX, DATAMOV DS, AXMOV CX, COUNTMOV BX, -1AGAIN: INC BXCMP ARRAY[BX], 0LOOPNZ AGAINJE OKMOV DL, ‘N’JMP SHOWOK: MOV DL, BLOR DL, 30HCMP DL, 39HJBE SHOWADD DL, 7SHOW: MOV AH, 2INT 21HEXIT: MOV AX, 4C00HINT 21HCODE ENDSEND START上机运行该程序,查看其显示结果,并说明程序实现什么功能。
上机运行该程序,查看运行结果为2,程序实现:查找数组中值为0的位置。
3.编写程序1:编程计算从1到100的和。
将编写好的程序输入、汇编、连接并运行。
源程序为:DATA SEGMENTX DW 0DATA ENDSCODE SEGMENTASSUME CS: CODE, DS:DATASTART: MOV AX,DATAMOV DS,AXMOV CX,100MOV BX,0BEGIN: INC BXADD X,BXLOOP BEGINMOV AH,4CHINT 21HCODE ENDSEND START程序结果如上图:13BA(十六进制)=5050(十进制);4.设内存中以BUFFER为首地址的缓冲区中有若干个以非压缩BCD码形式存放的十进制数,并以符号$结束。
它的值可能是0~9中的任意一个。
编程将这些十进制数顺序显示在屏幕上。
源程序为:DATA SEGMENTBUFFER DB 1,2,3,4,5,6,7,8,9,'$'DATA ENDSSTACK SEGMENT STACKSKTOP DB 40H DUP(?)SKSIZE EQU $-OFFSET SKTOPSTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKBEGIN: MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV SP,SKSIZE结果如上图;5.编写程序3:画出流程图,并编程计算S=1+2×3+3×4+4×5+……+N×(N+1),直到N大于200为止,并将结果由屏幕上显示出来。
将编写好的程序输入、汇编、连接并运行。
流程图:开始程序结果如上图:4D6F(十六进制)=19823(十进制);实验情况与体会:本次实验过程依然遇到很多问题,比如输入程序时,单引号必须用英文状态下的单引号,根据提示修改即可解决。
有时候是语句的类型不匹配等等。
当循环次数确定时用计数循环,次数不确定时用条件控制循环。
计数控制循环程序要注意循环次数的设置;控制循环程序要设置一个变量,使变量在一个状态下时进行循环,而在另一个状态下时则跳出循环。
注:篇幅不够,可以另外附页。
计算机组成与汇编语言实验报告RETDISP_CRLF ENDPCSEG ENDSEND START运行结果:说明:如图输入123后,显示出1232、编写8_1_1源程序如下:DATA SEGMENTARRAY DB 34H,26H,0FAH,0A5H,8,72H,65H,0C1H,0FEH,70HCOUNT EQU $-ARRAYRESULT DB ?DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATASTART: MOV AX, DATAMOV DS, AXMOV BX, OFFSET ARRAY ;BX←数组的偏移地址 MOV CX, COUNT ;CX←数组的元素个数CALL CHECKSUM ;调用求和过程MOV RESULT, AL ;处理出口参数MOV AH, 4CHINT 21H;子程序 CHECKSUM;功能:求数组元素的校验和;入口:BX←数组元素的偏移地址;出口: 校验和运算结果CHECKSUM PROCXOR AL, AL ;累加器清0SUM: ADD AL, [BX] ;求和INC BX ;指向下一个字节LOOP SUM ;循环求和RETCHECKSUM ENDPCODE ENDSEND START运行结果:结果说明(校验和):07H3.编写8_1_2源程序如下:DATA SEGMENTARRAY DB 34H,26H,0FAH,0A5H,8,72H,65H,0C1H,0FEH,70HCOUNT EQU $-ARRAYLEN DB ?POP BXPOP AXRETCHECKSUM ENDPCODE ENDSEND START运行结果:结果说明:数组长度0AH,数组偏移地址:00,数组校验和:07H4.编写8_1_3源程序如下:STACK SEGMENT STACKDB 100 DUP(0)STACK ENDSDATA SEGMENTARRAY DB 34H,26H,0FAH,0A5H,8,72H,65H,0C1H,0FEH,70HCOUNT EQU $-ARRAYRESULT DB ?DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATA,SS:STACKSTART: MOV AX, DATACHECKSUM ENDPCODE ENDSEND START运行结果:结果说明:07H5. 将编写好的程序2输入、汇编、连接并运行。