计算机原理与汇编语言—实验报告1,2,3
- 格式:pdf
- 大小:443.88 KB
- 文档页数:14
计算机组成原理与汇编实验报告姓名:学号:学院:信息科学与工程学院班级:实验1 存储器实验实验目的⏹掌握静态存储随机存储器RAM的工作特性⏹掌握静态存储随机存储器RAM的读写方法实验设备74LS273(一片),静态存储器MEMORY 6116(一片),与门(一片),与非门(一片),单脉冲(一片),开关若干,灯泡若干实验原理在微机系统中,常用的静态RAM 有6116、6264、62256 等。
在本实验中使用的是6116。
6116 为2K╳8 位的静态RAM,其逻辑图3.1如下:图3.1 6116逻辑图其中A0~10 为11 根地址线,I/O0~7 为8 根数据线,CS 为片选端,OE 为数据输出选通端,WR 为写信号端。
其工作方式见下表3-1:表3-1工作方式表实验所用的半导体静态存储器电路原理如图3.2 所示,实验中的静态存储器一片6116(2K×8)构成,其数据线接至数据总线,地址线由地址锁存器(74LS273)给出。
地址灯AD0—AD7 与地址线相连,显示地址线内容。
数据开关经一三态门(74LS245)连至数据总线,分时给出地址和数据。
图3.2 存储器实验原理图因地址寄存器为8 位,接入6116 的地址A7—A0,而高三位A8—A10 接地,所以其实际容量为256 字节。
6116 有三个控制线:CE(片选线)、OE(读线)、WE(写线)。
当片选有效(CE=0)时,OE=0时进行读操作,WE=0时进行写操作。
本实验中将OE 常接地,在此情况下,当CE=0、WE=0 时进行读操作,CE=0、WE=1 时进行写操作,其写时间与T3 脉冲宽度一致。
控制信号SW-B 为低电平有效,控制信号LDAR 为高电平有效。
实验步骤1. 选择实验设备:根据实验原理图,将所需要的组件从组件列表中拖到实验设计流程栏中。
搭建实验流程:将已选择的组件进行连线(鼠标从一个引脚的端点拖动到另一组件的引脚端,即完成连线)。
微机原理与汇编语言实验报告学号:********班级:*****姓名:*****指导教师:*****一.实验目的1.通过上机实验进一步熟悉并掌握汇编语言的指令系统和寻址方式;2.熟悉汇编语言程序上机的流程,以及与实验有关的系统软件(如编辑程序、汇编程序、连接程序和调试程序等)3.学习汇编程序设计的基本方法和技能,熟练掌握用汇编语言设计、编写、调试和运行程序的方法4.能够独自编写,调试,并成功运行一个完整的程序。
二.实验内容与步骤1.掌握汇编语言程序上机过程首先,新建文本文档后将扩展名改为.ASM,这是汇编语言源程序的文件格式,以记事本形式打开后在其中键入所编写的程序。
第一次题目是在屏幕上显示一串字符串,在老师的指导下,编写的程序如下:data segmentnote db 'hello','$'data endscode segmentmain proc farassume cs:code,ds:data,es:datastart:push dssub ax,axpush axmov ax,datamov ds,axmov es,axmov ah,09hlea dx,noteint 21hmain endpcode endsend start之后,要进行编译和运行。
源程序经过翻译程序成为机器能够识别的目标程序,目标程序再经过连接程序连接后转换成在机器上可执行的程序。
基本流程图如下:在编译的过程中,程序查出的主要是语法上的错误,如果有错,则不能通过汇编,要纠错后重新汇编直到无错为止。
最后,生成的.EXE文件即为可执行文件,从磁盘调入内存运行,得到运行结果。
上述程序的运行结果为在屏幕上显示出“hello”。
2.编程完成任意两个两位数的加法运算编程任务的基本要求为:从键盘输入任意两个两位数相加,将结果显示在屏幕上。
刚开始拿到题目后,头脑里是比较混乱的。
经过与同学的探讨之后,我们大概确定出要完成整个功能,需经过以下过程:将输入的ASCII码与十进制数值进行转换,并保存在寄存器中;通过调用程序将两个数相加,并将结果保存;将结果显示在屏幕上。
汇编语言课程设计学院:专业:姓名:学号:汇编语言是计算机专业的一门重要的专业基础课,主要介绍汇编语言程序设计的基本原理和方法。
汇编语言是一门理论性和实践性较强的课程,辅助课堂教学的实验有助于帮助学生理解汇编语言的基本原理,锻炼学生的动手能力,提高学生的综合应用知识的能力。
目录1 利用DEBUG调试汇编语言程序段………………………………………2 初级程序的编写与调试实验(一).................................................................................3 初级程序的编写与调试实验(二)………………………………………...4 汇编语言程序上机过程 .......................................................................................................... 5分支程序实验……………………………………………………………6 循环程序实验……………………………………………………………..1 利用DEBUG调试汇编语言程序段一.课程目的1.熟悉DEBUG有关命令的使用方法;2.利用DEBUG掌握有关指令的功能;3.利用DEBUG运行简单的程序段。
二.课程内容1.进入和退出DEBUG程序;2.学会DEBUG中的1)D命令(显示内存数据D 段地址:偏移地址)例1:-D1002)E命令(修改指定内存)例1:-E100 41 42 43 44 48 47 46 45-D 100,L08结果:08F1:0100 41 42 43 44 48 47 46 45例2:-E 100:08F1:0100 76 42 :42是操作员键入此命令是将原100号内存内容76修改为42,用D命令可察看。
3)R命令(显示当前寄存器的内容)4)T命令(设置陷井,单步执行)5)A命令(将指令直接汇编成机器码输入到内存中。
汇编语言课程设计学院:专业:姓名:学号:汇编语言是计算机专业的一门重要的专业基础课,主要介绍汇编语言程序设计的基本原理和方法.汇编语言是一门理论性和实践性较强的课程,辅助课堂教学的实验有助于帮助学生理解汇编语言的基本原理,锻炼学生的动手能力,提高学生的综合应用知识的能力。
目录1 利用DEBUG调试汇编语言程序段………………………………………2 初级程序的编写与调试实验(一) .................................................................................3 初级程序的编写与调试实验(二)………………………………………...4 汇编语言程序上机过程 .......................................................................................................... 5分支程序实验……………………………………………………………6 循环程序实验…………………………………………………………….。
1 利用DEBUG调试汇编语言程序段一.课程目的1.熟悉DEBUG有关命令的使用方法;2.利用DEBUG掌握有关指令的功能;3.利用DEBUG运行简单的程序段.二.课程内容1.进入和退出DEBUG程序;2.学会DEBUG中的1)D命令(显示内存数据D 段地址:偏移地址)例1:-D1002)E命令(修改指定内存)例1:—E100 41 42 43 44 48 47 46 45-D 100,L08结果:08F1:0100 41 42 43 44 48 47 46 45例2:—E 100:08F1:0100 76 42 :42是操作员键入此命令是将原100号内存内容76修改为42,用D命令可察看。
3)R命令(显示当前寄存器的内容)4)T命令(设置陷井,单步执行)5)A命令(将指令直接汇编成机器码输入到内存中。
合肥工业大学计算机与信息学院实验报告课程:汇编语言程序设计专业班级:学号:姓名:实验一Debug程序的使用一.实验目的1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。
2、掌握8086/8088的寻址方式及多字节数据的处理方法。
二.实验内容1、利用DEBUG程序中的“E”命令,将两个多字节数“003F1AE7H”和“006BE5C4H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。
2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H 单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。
要求:本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。
三.实验过程和程序1.e ds:0200 78 56 34 12e ds:0204 98 BA DC FE2.直接寻址:mov ax,[0200]mov bx,[0202]add ax,[0204]adc bx,[0206]mov [0208 ],axmov [020a],bx间接寻址:mov si,[0200]mov di,[0204]mov bx,[0208]mov ax,[si]mov dx,[si+2]add ax,[di]adc dx,[di+2]mov [bx],axmov [bx+2],dx附加题1e ds:0000 1c 02e ds:0002 01 00e ds:0004 FF FFe ds:0006 38 04e ds:0008 00 00Microsoft Windows [???? 6.1.7600]???????? (c) 2009 Microsoft Corporation????????????????C:\Users\Administrator>debug-e ds:0000 1c 02-e ds:0002 01 00-e ds:0004 FF FF-e ds:0006 38 04-e ds:0008 00 00-a13B3:0100 mov ax,[0000]13B3:0103 mov bx,[0002]13B3:0107 imul bx13B3:0109 mov cx,ax13B3:010B mov bx,dx13B3:010D mov ax,[0004]13B3:0110 cwd13B3:0111 add cx,ax13B3:0113 adc bx,dx13B3:0115 sub cx,21c13B3:0119 sbb bx,013B3:011C mov ax,[0006]13B3:011F cwd13B3:0120 sub ax,cx13B3:0122 sbb dx,bx13B3:0124 mov bx,[0000]13B3:0128 idiv bx13B3:012A mov [0008],ax13B3:012D-g =0100 012dAX=0002 BX=021C CX=FFFF DX=0001 SP=FFEE BP=0000 SI=0000 DI=0000DS=13B3 ES=13B3 SS=13B3 CS=13B3 IP=012D NV UP EI PL ZR AC PE CY13B3:012D 0000ADD [BX+SI],AL DS:021C=00-四.实验结果1.利用DEBUG程序中的“E”命令,将两个多字节数“003F1AE7H”和“006BE5C4H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。
微处理器与接口技术实验指导实验一监控程序与汇编语言程序设计实验一、实验要求1、实验之前认真预习,明确实验的目的和具体实验内容,设计好主要的待实验的程序,做好实验之前的必要准备。
2、想好实验的操作步骤,明确通过实验到底可以学习哪些知识,想一想怎么样有意识地提高教学实验的真正效果。
3、在教学实验过程中,要爱护教学实验设备,认真记录和仔细分析遇到的现象与问题,找出解决问题的办法,有意识地提高自己创新思维能力。
4、实验之后认真写出实验报告,重点在于预习时准备的内容,实验数据,实验过程、遇到的现象和解决问题的办法,自己的收获体会,对改进教学实验安排的建议等。
善于总结和发现问题,写好实验报告是培养实际工作能力非常重要的一个环节,应给以足够的重视。
二、实验目的【1】学习和了解TEC-XP16教学实验系统监控命令的用法;【2】学习和了解TEC-XP16教学实验系统的指令系统;【3】学习简单的TEC-XP16教学实验系统汇编程序设计。
三、实验注意事项(一)实验箱检查【1】连接电源线和通讯线前TEC-XP16实验系统的电源开关一定要处于断开状态,否则可能会对TEC-XP16实验系统上的芯片和PC机的串口造成损害。
【2】五位控制开关的功能示意图如下:【3】几种常用的工作方式【开关拨到上方表示为1,拨到下方为0】(二)软件操作注意事项【1】用户在选择串口时,选定的是PC机的串口1或串口2,而不是TEC-XP16实验系统上的串口。
即选定的是用户实验时通讯线接的PC机的端口;【2】如果在运行到第五步时没有出现应该出现的界面,用户需要检查是不是打开了两个软件界面,若是,关掉其中一个再试;【3】有时若TEC-XP16实验系统不通讯,也可以重新启动软件或是重新启动PC再试;【4】在打开该应用软件时,其它的同样会用到该串口的应用软件要先关掉。
(三)联机通讯失败自检如果上述的硬件和软件的操作都正确,联机却依旧失败,可以进行如下测试:【1】测试PC机的串口是否能正常工作,或是换一台PC或换同一台PC的另一个串口再试,在换串口时要将TEC-XP16实验系统断电,换完后重新启动实验系统和软件;【2】检查机器上的元器件插接是否正确(建议用户对照能够正常通讯的实验系统进行详细检查),有没有被学生动过,尤其是扩展内存和扩展I/O接口时,芯片方向是否插对,片选信号有没有连接;【3】检查相应的短路子是否连接正确;【4】建议教师预留一台运行正常的TEC-XP16实验系统备用,机器出问题后可以对照检查。
计算机组成原理与汇编实验报告.计算机组成原理与汇编课程设计实验报告⽬录⼀、课程设计⽬标 (3)⼆、课程设计基本要求 (3)三、课程设计的内容 (3)四、课程设计的要求 (5)五、实验详细设计 (5)1.统计⽂件中各字母出现的频率 (5)2.⽤递归计算50以内Fibonacci 数, 以⼗进制数输出 (9)3.虚拟平台模拟机实验 (11)六、使⽤说明 (19)七、总结与⼼得体会 (19)⼋、参考⽂献 (20)九、附录 (20)1.字符统计.asm (20)2.斐波那契数(⼩于50).asm (29)⼀、课程设计⽬标通过课程设计使学⽣综合运⽤所学过的计算机原理与汇编知识,增强解决实际问题的能⼒,加深对所学知识的理解与掌握,提⾼软硬件开发⽔平,为今后打下基础。
课程设计的⽬的和要求:1、使学⽣巩固和加强《计算机原理与汇编语⾔》课程的基本理论知识。
2、使学⽣掌握汇编语⾔程序设计的⽅法及编程技巧,正确编写程序。
3、使学⽣养成良好的编程习惯并掌握调试程序的基本⽅法。
4、使学⽣养成规范书写报告⽂档的能⼒,撰写课程设计总结报告。
5、通过查阅⼿册和⽂献资料,培养学⽣独⽴分析问题和解决问题的能⼒。
⼆、课程设计的基本要求1、认真查阅资料,独⽴完成设计任务,每道题都必须上机通过。
2、编写预习报告,写好代码,上机调试。
3、独⽴思考,培养综合分析问题解决问题和调试程序的能⼒。
4、按时完成课程设计,写出课程设计报告。
三、课程设计的内容1、给定⼀个英⽂ASCII码⽂件,统计⽂件中英⽂字母的频率,以⼗进制形式输出。
2、⽤递归计算50以内Fibonacci 数, 以⼗进制数输出.3、虚拟平台的模型机实验,具体要求如下:1)选择实验设备,将所需要的组件从组件列表中拖到实验设计流程栏中2)搭建实验流程:根据原理图1和电路图(见附件),将已选择的组件进⾏连线。
3)输⼊机器指令:选择菜单中的“⼯具”,再选择“模型机调试”,在指令输⼊窗⼝中输⼊如下指令:00000000000100000000100100100000000010110011000000001011010000000000000000000001本实验设计机器指令程序如下:4)这⾥做的是个加法运算,第⼀个加数已经存⼊到内存的0000 1010单元中,第⼆个加数是需要⼿⼯输⼊的。
计算机组成原理和汇编语言实验报告专业班级:计算机0801班实验一、汇编:冒泡排序1、实验内容:定义一个字数组序列:1567,25,46,4560,678,1234,32540。
用冒泡排序对该数组由小到大排序,并将排序结果以十进制数字的形式在屏幕上显示出来。
2、实验原理:程序首先定义了要排序的数组,然后对其在原数组内进行冒泡排序。
冒泡排序是基于交换排序的一种算法,它依次两两比较待排序的元素,若为逆序则进行交换。
每趟冒泡都将待排元素序列中的最大量交换到最后位置。
冒泡过程共需进行n(n-1)/2次比较,直到全部元素有序为止。
数组有序以后,进行输出的工作。
依次从小到大,将元素转换为十进制数的ASCII码值来输出,并在输出每个数时,增加输出回车换行来使输出结果清晰。
3、实验代码:;-------------------------PROGRAM BEGINS---------------------------;----------------------------DEFINE DS-------------------------------DATA SEGMENTTIME DW 0 ;THE LOOP TIME OF THE OUTER LOOPCHU DW 10 ;USED TO CONVERT THE NUM TO DECIMAL DTY DW 1567,25,46,4560,678,1234,32540 ,'$' ;DEFINE THE ARRARYRESULT DB ?DATA ENDS;-----------------------------DEFINE CS-----------------------------CODE SEGMENT "CODE"ASSUME CS:CODE ,DS:DATASTART:MOV AX,DATAMOV DS,AXAGAIN:MOV CX, 6 ;THE LOOP NUM OF THE INER LOOP MOV BP,12 ;NUM OF THE BYTESAGAIN1:MOV AX,DTY[BP]CMP DTY[BP-2],AX ;CMP WITH THE FORMER BYTEJBE NEXT ;JMP IF BELOW OR EQUALXCHG AX,DTY[BP-2] ;IF ABOVE,THEN CHANGEXCHG AX,DTY[BP]NEXT:SUB BP,2 ;POINT TO THE FORMER ONEDEC CXCMP CX,TIME ;IS IT DONE?JE NEXT1 ;DONEJMP AGAIN1 ;NOT DONE YETNEXT1:INC TIMECMP TIME,6 ;IS IT DONE?JE NEXT3 ;DONEJMP AGAIN ;NOT DONE YETNEXT3:MOV TIME,0 ;RENEW THE DATAMOV BP,0CHANGE:MOV RESULT[5],13 ;FINISH OF THE NUMMOV RESULT[6],10MOV RESULT[7],'$'MOV AX,WORD PTR DTY[BP] ;THE DW TO OUTPUTMOV CX,5 ;LOOP NUMMOV BX,4 ;TWO BITS * 4 =WORD CHANGE1:MOV DX,0DIV CHU ;DX:AX/CHUMOV RESULT[BX],DL ;THE REMAINDERADD RESULT[BX],30H ;TO DECIMALDEC BX ;POINT TO THE FORMER TWO BITS LOOP CHANGE1MOV CX,4MOV BX,0FIND0:CMP RESULT[BX], '0' ;IS IT ZERO?JNE FINAL ;NOT ZEROADD BX,1 ;ZEROLOOP FIND0FINAL:LEA DX, RESULT[BX] ;OUTPUTMOV AH,09HINT 21HADD BP, 2 ;POINT TO NEXT WORDINC TIMECMP TIME,7 ;IS IT DONE?JNE CHANGE ;NOT NONEMOV AH,4CHINT 21HCODE ENDSEND START;--------------------PROGRAM ENDS--------------------实验二算术逻辑运算实验一、实验目的1.掌握简单运算器的组成以及数据传送通路。
汇编语言实验报告学院:计算机学院专业:网络工程指导老师:纪平实验一汇编语言程序调试方法一、实验目的,1,熟悉汇编语言运行环境和方法2,了解如何使用汇编语言编制程序3,熟悉debug有关命令的使用方法4,利用debug掌握有关指令的功能5,利用debug运行简单的程序段二、实验内容1,学会输入、编辑汇编语言程序2,学会对汇编语言程序进行汇编、连接和运行3,进入和退出debug程序4,学会debug中的D命令、E命令、R命令、T命令、A命令、G命令等的使用。
对于U命令、N命令、W命令等,也应试一下。
三、实验准备1,仔细阅读有关汇编语言环境的内容,事先准备好使用的例子。
2,准备好程序清单、设计好调试步骤、测试方法、对运行结果的分析3,编写一个程序:比较2个字符串所含的字符是否相同。
若相同则显示’Match.’,否则显示’No match!’。
4,仔细阅读有关debug命令的内容,对有关命令,都要事先准备好使用的例子。
四、实验步骤1,在DOS提示符下,进入masm目录。
2,在MASM目录下启动edit编辑程序,输入源程序,并对其进行汇编、连接和运行。
(1)调用edit输入、编辑源程序并保存在指定的目录中。
例:edit abc.asm(2)用汇编程序masm对源程序汇编产生目标文件obj。
例:masm abc(3)用连接程序link产生执行文件exe。
例:link abc(4)执行程序3,详细记录每一步所用的命令,以及查看结果的方法和具体结果。
五、实验结果1,输入sample.asm的源码;PROGRAM TITLE GOES HERE--Compare string;************************************************************************** **datarea segment ;define data segmentstring1 db 'Move the cursor backward.'string2 db 'Move the cursor backward.';mess1 db 'Match',13,10,'$'mess2 db 'No match!',13,10,'$'datarea ends;************************************************************************** **program segment ;define code segment;----------------------------------------------------------------------------main proc farassume cs:program,ds:datarea,es:datareastart: ;starting execution address;set up stack for returnpush ds ;save old data segmentsub ax,ax ;put zero in AXpush ax ;save it on stack;set DS register to current data segmentmov ax,datarea ;datarea segment addrmov ds,ax ;into DS registermov es,ax ;into ES register;MAIN PART OF PROGRAM GOES HERElea si,string1lea di,string2cldmov cx,25repz cmpsbjz matchlea dx,mess2jmp short dispmatch:lea dx,mess1disp:mov ah,09int 21hret ;return to DOSmain endp ;end of main part of program;--------------------------------------------------------------------program ends ;end of code segment;****************************************************************** **end start ;end assembly2,汇编生成目标文件3,连接生成exe文件4,执行程序5,调试程序-g命令在debug环境下运行该文件-d0(-d ds:ea)命令显示指定数据段地址中的内容-u命令显示汇编源程序-e ds:ea更改指定位置的内容实验二用DEBUG编程使用堆栈段AX和BX的内容进行交换等一、实验目的:1、熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。
汇编语言实验报告一、实验目的本次汇编语言实验的主要目的是通过实际操作和编程实践,深入理解汇编语言的基本概念、指令系统和编程方法,提高对计算机底层硬件操作的认识和编程能力。
二、实验环境1、操作系统:Windows 102、编程工具:MASM(Microsoft Macro Assembler)三、实验内容1、数据传送与算术运算实现两个 16 位整数的加法和减法运算,并将结果存储在指定的内存单元中。
使用不同的数据传送指令,如 MOV、PUSH、POP 等,将数据在寄存器和内存之间进行传输。
2、逻辑运算与移位操作对给定的 8 位二进制数据进行逻辑与、或、异或运算,并观察结果。
执行移位操作,包括逻辑移位(SHL、SHR)和算术移位(SAL、SAR),理解移位对数据的影响。
3、分支与循环结构使用条件跳转指令(如 JZ、JE、JC 等)实现根据不同条件执行不同代码段的功能。
编写循环结构程序,如使用 LOOP 指令实现对数组元素的求和操作。
4、子程序调用定义一个子程序,实现特定的功能,如计算一个数的阶乘。
在主程序中调用子程序,并传递参数和获取返回值。
四、实验步骤1、数据传送与算术运算实验首先,在代码编辑器中编写汇编代码,定义数据段和代码段。
在数据段中初始化两个 16 位整数,例如 MOV WORD PTR DATA1, 1000H 和 MOV WORD PTR DATA2, 2000H 。
在代码段中使用 ADD 和 SUB 指令进行加法和减法运算,如 ADD WORD PTR RESULT_ADD, DATA1 和 SUB WORD PTRRESULT_SUB, DATA2 。
编译和链接代码,生成可执行文件。
运行程序,查看内存中存储的运算结果。
2、逻辑运算与移位操作实验类似地,定义数据段和代码段。
在数据段中初始化 8 位二进制数据,如 MOV AL, 01010101B 。
在代码段中使用AND、OR、XOR 指令进行逻辑运算,以及SHL、SHR、SAL、SAR 指令进行移位操作。
实验报告一:汇编语言实验基础一.实验目的:1. 熟悉汇编语言程序的开发过程以及汇编语言常用软件的使用方法2. 掌握DEBUG常用命令的使用方法二、实验内容:1.DEBUG 命令使用2.8088常用指令练习三、实验步骤:(一)DEBUG 命令使用:1、打 DEBUG 进入 DEBUG 控制,显示提示符'_ '。
2、用命令 F 100 10F 'A' 将'A'的ASCII码填入内存。
3、用命令 D 100 10F 观察内存中的16进制码及屏幕右边的ASCII字符。
4、用命令 F 110 11F 41 重复上二项实验,观察结果并比较。
5、用命令 E 100 30 31 32 …… 3F将30H-3FH写入地址为100开始的内存单元中,再用D命令观察结果,看键入的16进制数是什么字符的ASCII码? 6、用H命令检查下列各组16进制数加减结果并和你的手算结果比较:(1)34H,22H (2)56H,78H (3)A5,79H (4)1284H,5678H(5)A758,347FH7、用R 命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF 和AF的内容。
8、用R命令将AX,BX内容改写为1050H及23A8H。
(二)8088常用指令练习1、传送指令1)用A命令在内存100H处键入下列内容:MOV AX,1234MOV BX,5678XCHG AX,BXMOV AH,35MOV AL,48MOV DX,75ABXCHG AX,DX2)用U命令检查键入的程序,特别注意左边的机器码。
3)用T命令逐条运行这些指令,注意有关寄存器及IP的变化情况。
并注意标志位有无变化。
2、加减法指令:1)用A命令在内存100H处键入下列内容:MOV AH,34MOV AL,22ADD AL,AHSUB AL,78MOV CX,1284MOV DX,5678ADD CX,DXSUB CX,AXSUB CX,CX2)用U命令检查键入的程序及对应的机器码。
实验1:循环接收用户按键输入,将用户输入的大字母原样输出,将用户输入的小写字母转换为小写字母再输出,用户若输入数字0则退出程序,其它情况输出“error!”data segmentstr db 'error!$'data endsstack segment para stack 'stack'db 100 dup(?)stack endscode segmentassume ds:data,cs:code,ss:stackstart:mov ax,datamov ds,axagain:mov ah,01hint 21hcmp al,'0'je nextcmp al,'A'jb error ;小于A的出错cmp al,'Z'jbe print1 ;在A,Z之间的输出print1cmp al,'a'jb error ;在Z(41hH)和a(61H)之间的出错cmp al,'z'jbe print2 ;在a,z之间的输出print2jmp errorprint1: mov dl,almov ah,02hint 21hjmp again ;循环输入,againprint2:mov dl,alsub dl,20hmov ah,02hint 21hjmp again ;循环输入,againerror :mov dx,offset strmov ah,09hint 21hnext:mov ah,4chint 21hcode endsend start这个实验比较简单,花费的时间也少,将我们学习的理论知识用于实践。
第一次真实的体会到汇编语言的特点,以及和C++语言的区别。
实验2:从键盘接收用户输入的一个正整数(0-32767之间),输出该数字的所有因子。
data segmentstr db 'input data 0-32767:$'num dw 0string db 5 dup(0)data endsstack segment para stack 'stack'db 1000 dup(?)stack endscode segmentassume ds:data,cs:codestart:mov ax,datamov ds,axmov dx,offset strmov ah,09hint 21h ;显示标题mov si,0mov di,0rein:mov ah,01hint 21hcmp al,20hjz inte ;输入空格表示输入结束cmp al,30hjb exit ;不在0-9之间的退出cmp al,39hja exitsub al,30h ;不在0-9之间的退出mov string[si],alinc sicmp si,6jz exit ;输入位数超过5位的退出jmp rein;*******************以下整和整数dec si ;到达这一步时,si比输入的位数大1,所以要减1 inte:mov bx,nummov ax,10mul bxadd al,string[di]adc ah,00hmov num,axinc dicmp di,sijb inte ;得出的整数放置于变量num中;********************以下求因子,输出mov bx,0again:mov ax,nummov dx,0inc bxcmp bx,numja exitdiv bxcmp dx,0je tcalljmp againtcall:call tprintjmp againtprint proc near ;print子程序打印输出bxmov cx,10mov si,4mov ax,bxboa1:cmp ax,10jb boa2xor dx,dxdiv cxor dl,30hmov string[si],dldec sijmp boa1boa2:or al,30hmov string[si],alg:mov dl,string[si] ;打出输出ASCIImov ah,2int 21hinc sicmp si,5jne gmov dl,20hmov ah,2int 21h ;空格隔开每个因子rettprint endpexit: mov ah,4chint 21hcode endsend start注释1:以上为编译连接运行的结果,其中,输入的,12,120,1310,6789,12345,8等均能给出因子。
汇编语言编程实验报告汇编语言编程实验报告学号:姓名:成绩:目录一、实验一: ......................................................错误!未定义书签。
二、实验二: (4)三、实验三: (8)四、实验四: (10)五、实验五: ......................................................错误!未定义书签。
六、实验六: (19)七、汇编实验总结 (23)实验一一.实验题目【汇编语言补充作业T20】编写完整程序,利用DOS系统功能调用,从键盘输入一个字符串,并将该字符串从屏幕上换行后并输出。
二.程序流程及思路实现字符串输入,需要分成三个步骤:1、在数据段中定义一个缓存区为存放字符串做准备;2、DOS系统功能调用0AH号子功能,(DS:DX)= 输入缓冲区首址;3、在输入的字符串尾加上‘$’字符,以作为输出结束条件。
实现字符串输出,则需要注意的问题是:1、缓冲区第三个字节才开始存放输入的字符,前两个字节分别存放缓冲区长度和字符串实际字符数;2、输出回车换行可利用字符串:CR DB 0AH,0DH,’$’。
三.源程序清单DATA SEGMENTN EQU 50MAXLEN DB N ;缓冲区字符的最大长度ACTLEN DB ? ;实际字符个数STRING DB N DUP(?) ;字符空间CR DB 0AH,0DH,'$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATAMOV DS,AXLEA DX,MAXLENMOV AH,0AHINT 21H ;字符串输入MOV AH,09HLEA DX,CRINT 21H ;回车换行MOV BL,MAXLEN+1 ;取实际的字符长度MOV BH,0LEA SI,MAXLEN+2 ;取字符开始的首地址MOV BYTE PTR [SI+BX],'$' ;输出结尾要加上$ MOV DX,SI ;把开始存放字符的首地址赋给DX MOV AH,09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START四.结果拷屏实验二一. 实验题目【汇编语言补充作业T23】假设CX:BX中存放了4为非压缩的BCD码表示的十进制数4386,请编写完整程序将这个数转化成2进制数并存放到DI寄存器中。
汇编语言编程实验报告汇编语言程序设计实验报告(一)汇编语言程序设计实验报告(一)一、预备知识汇编语言程序设计是一门实践性很强的课程。
编写程序、上机调试、运行程序是进一步学习和掌握汇编语言程序设计的必要手段。
二、实验目的1、掌握实验运行汇编语言所用的计算机机型2、熟悉常用编辑程序(行编辑程序EDLIN、全屏幕编辑程序QE及其它用于文件编辑的应用程序。
)3、掌握汇编程序ASM、宏汇编程序MASM1.0以上。
4、LINK连接程序5、DEBUG调试程序三、汇编语言源程序上机操作过程2、编辑源文件根据给定的任务,可编写程序。
如果经过检查认为所编程序无错时,就可在计算机上通过编辑程序建立源程序文件了。
一般在编辑过程中总会有错误产生,因此还要进行人工检查、修改以致重新编辑,直到所编辑的源程序无误为止,然后以一个源程序文件(ASM文件)存盘。
将包含QE文件的工作磁盘插入驱动器A:。
进入QEA\QE进入全屏幕后可以开始编程。
文件名取为Myprog。
asm;Ddisplystring (09H)CODESEGMENTPUBLICASSUME CS:CODE,DS:CODEORG 100HSTART:JMP BEGINMSG DB‘Hi ! This ia a dollar sign terminated string.’,’$’BEGIN:MOV AX,CS ;set up to display messageMOV DS,AXMOV DX,OFFSET,SG ;set up to display messageMOV AH,09H;display string function requestINT 21H ;call DOSMOV AH ,4CH ;terminate propram funct requestINT 21H ;Call DOSCODE ENDS;end of code segmentEND START;strat is the entry point输入完毕后,按ALT---X,存盘返回DOS3、汇编源程序文件(ASM,MASM)由编辑程序所建立的ASM文件只是个文本文件,计算机无法执行。
常熟理工学院
计算机科学与工程学院实验报告 2013-2014学年第 2 学期
课程名称汇编语言与微机原理
专业计算机科学与技术
班级计科121
学号090312115
姓名王海波
实验地点N6-106
指导老师张雪伍
实验报告要求
1.在实验课前要认真预习实验内容,熟习实验的原理、方法及算法等。
2.根据实验指导书要求,认真完成实验内容;实验结束后,按照实验报告的要求认真填写相关内容。
3.实验时要带好实验指导书、实验报告本。
4.实验时要严肃认真,不得互相抄袭。
5.实验课的成绩由实验预习、实验过程、实验结果和实验报告四部分构成。
用Debug进行实验的示例实验报告必须包含内容说明:。
汇编实验报告一实验总结汇编实验报告一实验总结实验背景汇编语言是一种低级语言,用于编写计算机程序。
在汇编实验一中,我们学习了基本的汇编指令和程序结构,并通过实践掌握了如何编写简单的汇编程序。
本文将对实验过程和结果进行总结和分析。
实验过程在实验一中,我们首先了解了汇编语言的基本概念和特点。
然后,我们使用汇编语言编写了一个简单的程序,目的是将两个数相加并输出结果。
在编写程序的过程中,我们学习了如何使用汇编指令进行算术运算、内存操作和输出。
我们还学习了如何使用调试器来调试和测试我们的程序。
实验结果经过编写和调试,我们成功地完成了实验一的目标。
我们的程序可以正确地将两个数相加并输出结果。
这个结果验证了我们对汇编语言和指令的理解和掌握。
通过这个实验,我们不仅学会了如何编写简单的汇编程序,还加深了对计算机底层运行原理的理解。
实验收获通过实验一,我们深刻认识到汇编语言的重要性和应用价值。
汇编语言虽然比高级语言更加底层和繁琐,但它可以直接操作计算机的硬件,提高程序的执行效率。
同时,学习汇编语言也有助于我们更好地理解计算机的工作原理和内部结构。
此外,实验一还培养了我们的逻辑思维和问题解决能力。
在编写程序的过程中,我们需要仔细思考每一条指令的含义和作用,并保证程序的正确性和效率。
通过调试和测试,我们学会了如何发现和解决程序中的错误和问题。
总结通过实验一,我们不仅掌握了汇编语言的基本知识和技巧,还提高了我们的编程能力和计算机思维。
汇编语言作为一种底层语言,虽然在现代编程中使用较少,但它对于理解计算机底层原理和优化程序仍然具有重要意义。
在今后的学习和工作中,我们将继续深入学习汇编语言,并将其应用于更复杂和实际的问题中。
我们相信,通过不断学习和实践,我们的汇编编程能力将不断提高,为我们的学术和职业发展打下坚实的基础。
总之,实验一是我们学习汇编语言的第一步,通过这个实验,我们对汇编语言有了更深入的了解和认识。
我们相信,在今后的学习和实践中,我们将能够更好地应用汇编语言,并取得更大的成果。
xxxxxxx学院计算机工程系《汇编语言》·实验报告
实验一、查看CPU和内存,用机器指令和汇编指令编程2014.09.24实验二、用机器指令和汇编指令编程2014.10.08
实验三、编程、编译、连接、跟踪2014.10.15
实验四、[bx]和loop的使用2014.10.22
实验五、编写、调试具有多个段的程序(一)2014.10.29
实验六、编写、调试具有多个段的程序(二)2014.11.05
实验七、实践课程中的程序2014.11.12
实验八、寻址方式在结构化数据访问中的应用2014.11.19
实验九、分析一个奇怪的程序2014.11.26
实验十、根据材料编程2014.12.3
实验十一、编写子程序2014.12.10
实验十二、综合练习:求无符号字节序列中的最大值和最小值,设有一个字节序列,其存储首地址为3000H,字节数为008H,利用学过的方法编程,求出该序列中的最大值和最小值2014.12.17。
实验报告实验名称:微机计算机原理及应用实验班级:计算机1101班姓名:李静学号:112013520一、实验目的学习程序设计的基本方法和技能,熟练掌握用汇编语言设计、编写、调试和运行程序的方法。
为后续课程打下坚实的基础。
二、实验要求1.上机前做好充分的准备,包括程序框图、源程序清单、调试步骤、测试方法,对运行结果的分析等。
2.上机时要遵守实验室的规章制度,爱护实验设备。
要熟悉与实验有关的系统软件(编辑程序、汇编程序、连接程序和调试程序等)的使用方法。
在程序的调试过程中,有意识地学习及掌握debug程序的各种操作命令,以便掌握程序的调试方法及技巧。
三、实验过程1设计说明1.1程序名:prog1.asm与weiji.asm1.2功能:比较两个字符串STRING1和STRING2所含字符是相同,若相同刚在屏幕上显示‘MATCH’,否则,显示‘NOT MATCH’.1.3原理及算法说明:利用CMPSB对两个字符串STRING1和STRING2进行比较1.4程序:DATA SEGMENTSTRING1 DB 'Move the cursor backward'STRING2 DB 'Move the cursor backward'MESS1 DB 'Match.',13,10,'$'MESS2 DB 'No Match.',13,10,'$'DATA ENDSSTACK SEGMENT STACKDB 40 DUP (?)STACK ENDSPROGNAM SEGMENTASSUME CS:PROGNAM,DS:DATA,ES:DATA,SS:STACKMAIN PROC FARSTART: PUSH DSXOR AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV ES,AXMOV AX,STACKMOV SS,AXLEA SI,STRING1LEA DI,STRING2CLDMOV CX,25REPZ CMPSBJZ MATCHLEA DX,MESS2JMP SHORT DISPMATCH: LEA DX,MESS1DISP: MOV AH,09h;mov ah,4ch;INT 21HRETMAIN ENDPPROGNAM ENDSEND START1.5主要符号名的说明:a.DATA SEGMENT ;定义一个数据段b.DATA ENDS;数据段结束c.ASSUME CS:PROGNAM,DS:DATA,ES:DATA,SS:STACK;各个段寄存器与逻辑段的关系,并在程序起始处设置段寄存器的初值,除代码段以外。
实验1:循环接收用户按键输入,将用户输入的大字母原样输出,将用户输入的小写字母转换为小写字母再输出,用户若输入数字0则退出程序,其它情况输出“error!”实验程序代码str db 'error!$'data endsstack segment para stack 'stack'db 100 dup(?)stack endscode segmentassume ds:data,cs:code,ss:stackstart:mov ax,datamov ds,axagain:mov ah,01hint 21hcmp al,'0'je nextcmp al,'A'jb error ;小于A的出错cmp al,'Z'jbe print1 ;在A,Z之间的输出print1cmp al,'a'jb error ;在Z(41hH)和a(61H)之间的出错cmp al,'z'jbe print2 ;在a,z之间的输出print2jmp errorprint1: mov dl,almov ah,02hint 21hjmp again ;循环输入,againprint2:mov dl,alsub dl,20hmov ah,02hint 21hjmp again ;循环输入,againerror :mov dx,offset strmov ah,09hint 21hnext:mov ah,4chint 21hcode endsend start实验截图实验总结实践。
第一次真实的体会到汇编语言的特点,以及和C++语言的区别。
实验2:从键盘接收用户输入的一个正整数(0-32767之间),输出该数字的所有因子。
实验程序代码输入字符(0-9),判断合法性,减去30H,存入到数组string[]中将数组string[]里的数字,整合转换为正整数,存入变量num中求出num的因子,存入string[]中转换string[]中数据,加30H,输出ASCIIdata segmentstr db 'input data 0-32767:$'num dw 0string db 5 dup(0)data endsstack segment para stack 'stack'db 1000 dup(?)stack endscode segmentassume ds:data,cs:codestart:mov ax,datamov ds,axmov dx,offset strmov ah,09hint 21h ;显示标题mov si,0mov di,0rein:mov ah,01hint 21hcmp al,20hjz inte ;输入空格表示输入结束cmp al,30hjb exit ;不在0-9之间的退出cmp al,39hja exitsub al,30h ;不在0-9之间的退出mov string[si],alinc sicmp si,6jz exit ;输入位数超过5位的退出jmp rein;*******************以下整和整数dec si ;到达这一步时,si比输入的位数大1,所以要减1 inte:mov bx,nummov ax,10mul bxadd al,string[di]adc ah,00hmov num,axinc dicmp di,sijb inte ;得出的整数放置于变量num中;********************以下求因子,输出mov bx,0again:mov ax,nummov dx,0inc bxcmp bx,numja exitdiv bxcmp dx,0je tcalljmp againtcall:call tprintjmp againtprint proc near ;print子程序打印输出bxmov cx,10mov si,4mov ax,bxboa1:cmp ax,10jb boa2xor dx,dxdiv cxor dl,30hmov string[si],dldec sijmp boa1boa2:or al,30hmov string[si],alg:mov dl,string[si] ;打出输出ASCIImov ah,2int 21hinc sicmp si,5jne gmov dl,20hmov ah,2int 21h ;空格隔开每个因子rettprint endpexit: mov ah,4chint 21hcode endsend start实验截图注释1:以上为编译连接运行的结果,其中,输入的,12,120,1310,6789,12345,8等均能给出因子。
注释2:下图为,特殊的输入情况下,程序退出1,输入的字符不是0—9之间的字符,退出2,输入的位数超过范围(0—32767),退出输入字符‘r’,‘-’等退出程序输入的整数222222超过范围,自动退出程序实验总结本次实验花费了较长时间,其中在修改调试程序上花费时间占绝大部分。
在实验代码的一步步完善过程中,经历了一下步骤:1,程序编译出错这里的问题出现在语法错误上,不过这些错误很少,容易修改;不过有一个错误是提示:no end of file,造成的原因是由于我定义调用宏,编译时出现的一个不会修改的错误。
之后我去掉宏,然后把宏内的代码直接复制到相应的位置,之后再次编译,没有错误。
2,编译连接都没有错误,但在运行时出错修改运行,出现无限循环输出乱码情况,再次,修改后,出现一个更严重的情况,只要我一运行yinzi.exe程序,电脑就发出do的报警声,再次修改,……….,再后面,程序可以运行,并且可以输出一些正常的结果3,在根据输入的ASCII字符转换成整数时,如下代码inte:dec simov bx,nummov ax,10 此行代码错误mul bxadd al,string[di]adc ah,00hmov num,axinc dicmp di,sijb inte程序运行结果是:1,能正确求出两位数的因子,如12,为1,2,3,4,6,12等2,输入三位数120,结果是12的因子1,2,3,4,6,12输入四位数1230,结果是12的因子1,2,3,4,6,12输入五位数12100,结果是121的因子1,11,121……只需将上面inte:这个移到下一行即可解决问题;虽然,实验花了很长时间修改,克服种种错误终于能够输出正确结果,但我觉得不但的找出错误并修正错误这个过程更能锻炼人,学到的东西更多。
不过,我们在写程序时,一定要细心谨慎,因为如果写的时候不仔细,回头再次调试修改的话就得花更多的时间,不值得,这是我的一点心得体会。
实验3:从键盘接收用户输入的一个正整数(0-32767之间),输出该数字的所有因子。
1、 函数input:接收用户一个正整数,将数据保存到AX2、函数outpot:将AX中的数据在屏幕上显示出来3、函数sort:将BX所指向的一批数据进行排序,数据个数在AX中从键盘接收用户一批数据输入,对该批数据从小到大排序,将原数据和排序后的数据在屏幕上显示出来。
实验程序代码n dw 0000hdata dw 100 dup(?)num dw 0buffer db 5 dup(?) ;输入ASCII转换成整数的缓冲区string0 db 'how many datas: $'string1 db 'input data: $'string2 db 'order: $'data1 endsstack segment para stack 'stack'db 100 dup(?)stack endscode segmentassume ds:data1,cs:codestart:mov ax,data1mov ds,axmov dx,offset string0mov ah,9int 21h ;提示输入多少数据call inputmov n,ax ;数据个数存入到变量n中mov dl,0ahmov ah,2int 21h ;换行mov cx,nmov di,0datain:call inputmov data[di],axadd di,2loop datain ;循环输入几个数据打印出,并存入到data[]中 mov dl,0ahmov ah,2int 21h ;换行mov dx,offset string1mov ah,9int 21h ;提示输出排序前的mov si,0mov cx,nagain1:mov ax,data[si]call outputadd si,2loop again1mov dl,0ahmov ah,2int 21h ;换行mov dx,offset string2mov ah,9int 21h ;提示输出排序后的mov cx,ncall sort ;对data[]排序mov si,0mov cx,nagain2:mov ax,data[si]call outputadd si,2loop again2jmp nextinput proc near ;*****接收输入的整数存入AX中,参数buffer[],num********push dipush bxmov si,0mov di,0rein:mov ah,01hint 21hcmp al,20hje inte ;空格表示输入结束sub al,30hmov buffer[si],alinc sicmp si,5jb reindec siinte:mov bx,nummov ax,10mul bxadd al,buffer[di]adc ah,00hmov num,axmov buffer[di],00h ;清零inc dicmp di,sijb intemov ax,num ;将整理好的整数放到AX中mov num,0000h;用完num清0pop bxpop diretinput endp ;***** 用到的寄存器ax,si,di,bx****************output proc near ;*****打印出AX中的数据,传入参数AX即可******** push cxpush sipush dxmov cx,10mov si,4boa1:cmp ax,10jb boa2xor dx,dxdiv cxor dl,30hmov buffer[si],dldec sijmp boa1boa2:or al,30hmov buffer[si],alg:mov dl,buffer[si] ;打出输出ASCIImov ah,2int 21hmov buffer[si],0 ;打印完后清零,避免重叠inc sicmp si,4jbe gmov dl,20hmov ah,2int 21h ;空格隔开pop dxpop sipop cxretoutput endp ;***** 用到的寄存器ax,cx,si,dx**************sort proc near ;********* 字序列的冒泡排序子程序,参数data[],cx(元素个数) *********dec cx ;比较遍数loop1:mov di, cx ;比较次数mov bx, 0loop2:mov ax, data[bx] ;相邻两数cmp ax, data[bx+2] ;比较jbe continuexchg ax, data[bx+2] ;交换位置mov data[bx], axcontinue:add bx, 2loop loop2mov cx, diloop loop1retsort endp ; ************用到的寄存器ax,bx,di ************* next:mov ah,4chint 21hcode endsend start实验截图不断积累错误中产生的;由于我盲目的复制第二个实验里自己写的代码到第三个实验中,导致一系列错误,步步为营查找很就才查找到几个严重的错误:1,错误运行结果截图,‘*’测试用的2,不排序输出,也是这样,如错误原因:1,存入data[si]时,si是以inc si递增的;2,读取data[si]时,也是以1递增的由于data[]定义是dw,每个数据占两个字节,故导致以上错误;修改两处,用loop循环修改后:进一步完善即记得上图中的正确结果:。