微机原理实验程序-中国石油大学(华东)
微机原理实验参考答案(航大)
《微机原理》实验参考答案实验1 汇编基本指令及顺序程序设计实验实验2 分支与DOS中断功能调用程序设计实验实验3 循环结构程序设计实验实验4 存储器扩展实验实验5 8259应用编程实验实验1汇编基本指令及顺序程序设计实验一、实验目的1、掌握汇编语言的开发环境和上机过程;2、掌握DEBUG命令;3、掌握顺序程序设计方法;4、掌握寻址方式;5、理解和掌握汇编基本指令的功能。
二、实验内容1、设堆栈指针SP=2000H,AX=3000H,BX=5000H;请编一程序段将AX和BX的内容进行交换。
要求:用3种方法实现。
答:方法一CODE SEGMENTASSUME CS:CODESTART: MOV AX,3000HMOV BX,5000HMOV CX,AXMOV AX,BXMOV BX,CXCODE ENDSEND START方法二CODE SEGMENTASSUME CS:CODESTART: MOV AX,3000HMOV BX,5000HXCHG AX,BXCODE ENDSEND START方法三CODE SEGMENTASSUME CS:CODESTART: MOV AX,3000HMOV BX,5000HPUSH AXPUSH BXPOP AXPOP BXCODE ENDSEND START2、分别执行以下指令,比较寄存器寻址,寄存器间接寻址和相对寄存器寻址间的区别。
MOV AX,BX 寄存器寻址,将BX内容送AXMOV AX,[BX] 寄存器间接寻址,将DS:BX内存单元内容送AXMOV AX,10[BX] 寄存器相对寻址,将DS:BX+10内存单元内容送AX 在DEBUG调试模式,用A命令直接编辑相应指令并用T命令单步执行,执行后查询相应寄存器的值并用D命令查内存。
3、已知有如下程序段:MOV AX,1234HMOV CL,4在以上程序段的基础上,分别执行以下指令:ROL AX,CL AX=2341HROR AX,CL AX=4123HSHL AX,CL AX=2340HSHR AX,CL AX=0123HSAR AX,CL AX=0123HRCL AX,CL 带进位标志位的循环左移RCR AX,CL 带进位标志的循环右移4、设有以下部分程序段:TABLE DW 10H,20H,30H,40H,50HENTRY DW 3┇LEA BX,TABLEADD BX,ENTRYMOV AX,[BX]┇要求:(1)将以上程序段补充成为一个完整的汇编程序。
华工微机实验报告-实验三-分支和循环设计实验
实验报告课程名称微型计算机原理及其应用实验项目分支和循环设计实验学生姓名朱轲信学生学号201530281598专业/班级信息工程冯秉铨实验班实验成绩电子与信息学院实验中心制二〇一七年版预习报告一、实验目的1.掌握分支程序的结构。
2掌握分支程序的设计、调试方法。
3加深对循环结构的理解。
4掌握循环结构程序设计的方法。
5熟练掌握调试循环程序的方法。
二、实验设备微机一台、TDS-MD微机一台三、实验内容及步骤1.设计一数据块间的搬移程序设计思想:程序要求把内存中一数据区(称为源数据块)传送到另一存贮区(称为目的数据块)。
源数据块和目的数据块在存贮中可能有三种情况。
对于两个数据块分离的情况,数据的传送从数据块的首址开始,或者从数据块的末址开始均可,但对于有部分重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭破坏。
可以得出以下结论:当源数据块首址〉目的块首址时,从数据块首址开始传送数据。
当源数据块首址〈目的块首址时,从数据块末地址开始传送数据。
代码:STACK SEGMENT STACK'STACK'DB 50 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,SS:STACKSTART:MOV CX,0AHMOV BX,3500HMOV SI,[BX]MOV DI,[BX+2]CMP SI,DIJA A1MOV AX,SIADD AX,CXMOV SI,AXMOV AX,DIADD AX,CXMOV DI,AXDEC SIDEC DISTDREP MOVSBJMP EXITA1: CLDREP MOVSBEXIT:MOV AX,4C00HINT 21HCODE ENDSEND START流程图:结果:在源数据块中存入6个数,分别使SI大于、等于、小于DI均发觉数据正确传送。
可见程序正确。
2. (1)编制程序使S=1+2*3+3*4+4*5+……N(N+1),直到N(N+1)项大于200为止。
微机原理(山东联盟)智慧树知到课后章节答案2023年下中国石油大学(华东)
微机原理(山东联盟)智慧树知到课后章节答案2023年下中国石油大学(华东)中国石油大学(华东)绪论单元测试1.在洗衣机的控制系统中,仅需要硬件设备,无需软件程序即可完成洗衣机的全自动操作。
答案:错2.计算机硬件系统必须在软件系统的配合下,才能完成数据采集、信息处理和控制等功能。
答案:对第一章测试1.内存单元的地址编号是以字节为单位的答案:对2.CPU是计算机的控制中心,除了可以提供运算能力外,还可以直接与外设连接。
答案:错3.CPU字长表示的是一个字的长度,即2个字节。
答案:错4.一个字在内存单元中的存储形式通常有两种:小地址格式和大地址格式,Intel家族的CPU通常使用的是大地址格式。
答案:错5.机器数就是指连同符号位一起数值化了的数。
答案:对6.两个无符号数相加不可能溢出。
答案:错7.任何一个数的补码可以通过它的反码计算,计算方式是反码加1。
答案:错8.平常使用的数制形式有二进制、十进制以及十六进制等,这些进制在形式上仅仅是后缀不同。
答案:错9.冯·诺依曼结构计算机中的核心是运算器。
答案:对10.元件级总线是CPU和存储器、I/O接口之间传递信息的通路。
根据传送信息的类型不同分为三种,分别是数据总线、控制总线和状态总线。
答案:错11.下列选项中不能正确表示字符‘a’的ASCII码的是。
答案:01100011B12.将十进制数35.25转换为十六进制数为。
答案:23.4H13.微型计算机系统的三个层次分别是、微型计算机和微型计算机系统。
答案:微处理器14.某补码表示的8位二进制整数由5个1和3个0组成,则其可表示的最小值是。
答案:-11315.微型计算机中主要包括有。
答案:微处理器、存储器和I/O接口16.一个完整的计算机系统通常应包括。
答案:硬件系统和软件系统17.在计算机中:1Byte= bit。
答案:818.据你所学,在计算机中,表示法简化了负数表示和加减法统一运算。
答案:补码19.若一字长为8的补码形式机器数为01111110B,则其真值是。
华电微机原理与接口实验实验(完整可用程序)
TPC-1实验系统的结构及使用说明1. 结构TPC—l实验系统不能单独使用,它必须和PC机相连才能工作。
系统由一块PCI总线驱动卡和一个实验台构成,实验台上有8251A、8255A、8253、DAC0832、ADC0809等芯片和小键盘、数码管、8MHz晶振等器件。
实验台的结构如图1所示。
图1 TPC—1实验台主要部件分布图为了实验方便,在每一部分实验电路附近都预留有单线信号插孔,实验时只要将相应插孔用单股导线相连即可。
2. 安装安装时请按下述步骤进行。
(1)用60芯扁平电缆线连接总线驱动卡和实验台。
(2)连接实验台电源。
(3)启动计算机。
(4)打开实验台电源开关,实验台上的指示灯亮即可进行实验。
注意:在进行线路的连接过程中,必须关闭实验台的电源,在断电条件下进行操作,否则可能会引起实验台的损坏。
3. 实验台上的I/O地址实验台上的I/O地址为200~23F共64个,分8个插孔引出,它们分别是200~207;208~20F;210~217;218~21F;220~227;228~22F;230~237;238~23F;实验时只要用导线将任一插孔信号引到相应电路的CS 端即可。
图2是I/O地址译码电路。
1图2 I/O译码电路4. 编写汇编程序时使用的I/O地址因为PCI总线结构支持P&P即插即用功能,所以微机分配给PCI扩展板的资源也是动态浮动的,而不是固定不变的,因此分配给设备的I/O地址、内存储器MEM地址以及中断INT号会随着微机不同而有所变化,所以在实验前必须确定当前微机中PCI卡的资源分配,从而确定实验台上的实际I/O地址和内存储器MEM地址,并在程序中使用该地址。
操作步骤如下:(1)打开“控制面板”中“系统”对话框,找到并打开“设备管理器”,可以看到“微机原理教学实验装置”,如图3所示。
(2)查看TPC的属性,如图4所示。
可以看到两个输入/输出范围(具体数值不同计算机可能不同),其中一个范围大小是0FFH的是PCI接口芯片占用的I/O地址空间,另一个一个范围大小是07FH的是TPC 设备占用的I/O地址空间;两个内存范围,一个范围大小是0FFH的是PCI接口芯片占用的内存储器MEM 地址空间,另一个范围大小是0FFFFFH的是TPC设备占用的内存储器MEM地址空间。
中国石油大学2016年微机原理实验程序(最新)终稿
实验一寻址方式和汇编语言程序上机调试步骤2、在数据段X单元存放有数据42,Y单元存放有数据-43,编程求这两数之和,并把结果存放到S单元。
data segmentx db 42y db -43s db 0data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov al,xadd al,ymov s,alloop: jmp loopcode endsend start3、已知数据段X单元存放的数据为10H,编程将该数据左移四位后存放到Y单元。
data segmentx db 10hy db 0hdata endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov cl,4hmov al,xrol ax,clmov y,alloop: jmp loopcode endsend start实验二循环程序设计1、编程将数据段从00H单元起始的十个单元赋值,值为00H~09H。
DATA SEGMENT DAT DB 10 DUP(?)DATA ENDSCODE SEGMENTASSUME DS:DATA,CS:CODESTART:MOV AX,DATAMOV DS,AXMOV CX,10MOV BX,0LOOPER: MOV DAT[BX],BLINC BXLOOP LOOPERLOOP:JMP LOOPCODE ENDSEND START2、现有两组数,X= -78, 127,-128, -125,88,Y=32, -43, 76, 95, 1。
编程求两个数组之和,并将结果传送到S数组内,S (i)= X(i)+ Y(i)。
DATA SEGMENTORG 0000HX DB -78,127,-128,-125,88Y DB 32,-43,76,95,1S DB 5 DUP(?)DATA ENDSCODE SEGMENTASSUME DS:DATA,CS:CODESTART:MOV AX,DATAMOV DS,AXMOV CX,5MOV BX,0LOOPER :MOV AL,X[BX]MOV DL,Y[BX]ADD AL,DLMOV S[BX],ALINC BXLOOP LOOPERLOOP: JMP LOOPCODE ENDSEND START3、现有两个多位十进制数,X=5790123467,Y=1357902468。
微机原理实验报告
微机原理实验报告实验⼀DEBUG 调试实验类型:实验课时:指导教师:时间:2013 年⽉⽇课次:第节教学周次:第周实验分室:实验台号:实验员:⼀、实验⽬的1.练习使⽤DEBUG,调试简单汇编程序。
⼆、实验要求1.掌握DEBUG的使⽤,调试程序。
2.读懂程序中各条指令,说明程序功能。
三、实验内容1.启动DEBUG,⽤A命令输⼊并汇编下列程序段。
100 MOV SI,200103 MOV CX,10106 MOV AL,0108 MOV [SI ],AL10A INC SI10B INC AL10D DEC CX10E JNZ 108110 INT 3四、实验结果及分析实验⼆简单汇编语⾔设计实验类型:实验课时:指导教师:时间: 2012 年⽉⽇课次:第节教学周次:第周实验分室:实验台号:实验员:⼀、实验⽬的1.巩固DEBUG及宏汇编的使⽤。
2.加深对指令的理解。
⼆、实验要求1.设堆栈指针SP=2000H,(AX)=3000H,(BX)=5000H。
请编⼀程序将AX的内容和BX的内容进⾏交换。
请⽤堆栈作为两寄存器交换内容的中间存储单元,⽤DEBUG调试程序进⾏汇编与调试。
2.设DS=当前段指地址,(BX)=0300H,(SI)=0002H,请⽤DEBUG的命令将存储器偏移地址300H~304H连续单元顺序装⼊0AH、0BH、0CH、0DH、0EH。
在DEBUG状态下送⼊下⾯程序,并⽤单步执⾏的⽅法,分析每条指令源地址的形成过程?当数据传送完毕时,AX中的内容是什么?程序清单如下:MOV AX,BXMOV AX,0304HMOV AX,[0304H]MOV AX,[BX]MOV AX,0001[BX]MOV AX,[BX][SI]MOV AX,0001[BX][SI]HLT3.设(AX)=0002H,编⼀个程序段将AX的内容乘10,要求⽤移位的⽅法完成。
三、思想描述实验内容1将两个寄存器的内容进⾏交换时,必须有⼀个中间寄存器才能进⾏内容的交换,如果⽤堆栈做为中间存储单元,必须遵循先进后出的原则。
中国石油大学微机原理 实验一 DEBUG的使用
试验一寻址方式和DEBUG的使用什么是DEBUG?DEBUG是DOS提供的用于调试可执行程序的工具软件,是汇编语言程序设计常用的调试工具。
在DEBUG环境下,可直接检查和修改寄存器和内存的值,调试和运行程序,使用户进一步了解CPU内部的环境。
DEBUG程序的启动:在DOS的提示符下直接键入命令C:\>DEBUG ↙,进入DEBUG调试程序后,会出现DEBUG提示符“-”,此时就可以使用DEBUG命令了。
在XP环境下,用鼠标点击“开始”→“所有程序”→“附件”→“命令提示符”。
出现:C:\ Document and Setting \ Administrator >_>CD C:\ ↙C:\>在C:盘的根目录下C:\>debug ↙进入DEBUG调试程序后,会出现DEBUG提示符“-”,此时就可以使用DEBUG命令了。
XP环境下Dos窗口大小的切换用 Alt +↙熟悉DEBUG几个常用命令的功能及使用方法:(8个)1、R命令 (Register)。
功能:查看和修改寄存器的值。
格式:-R↙在R命令后面直接打回车,显示当前CPU 内部所有寄存器的值、标志位状态及将要执行的下一条指令。
若要显示修改某个寄存器的值,直接在R 后面输入该寄存器的名,然后回车,这时会显示该寄存器的当前值,新值直接输入即可。
注意:-R F慎用!无目的修改标志位状态会造成CPU状态混乱,不建议用。
-R 寄存器↙如:-R AX ↙AX 0000 ( 0000 当前值 ):1234 ↙( 1234 新值)讲义第44页,用R命令修改实验内容第一部分12个寄存器的值AX=1020H BX=5060H CX=A0B0H DX=E0F0H SP=FFFFH BP=0200H SI=3040H DI=7080H DS=1200H ES=1300H SS=1400H CS=1100H 2、D命令 (Dump)。
功能:显示存储器单元的值。
格式:-D 段寄存器名:起始地址在使用D命令之前,首先要明白,内存已经被划分为4个段,即:代码段CS、数据段DS、堆栈段SS和附加段ES。
中国石油大学操作系统课程设计
中国石油大学(华东)操作系统课程设计设计报告中国石油大学(华东)计算机科学与技术学院要求(本页打印):1、双面打印,内容篇幅不要过长(每个实验不要超过3页),禁止贴全部程序,只贴关键代码即可。
2、禁止抄袭3、4、实验1:螺旋矩阵实验——Linux下的C编程一、实验情景描述完成一个程序,要求输入两个数字即可形成相应的字母螺旋矩阵。
例如输入5,6,则程序会生成如下5行6列的矩阵,Z之后循环至A:A B C D E FR S T U V GQ B C D W HP A Z Y X IO N M L K J二、实验原理完成程序ju.c,并用Makefile完成编译。
三、关键代码Makefile如下CC=gccOBJS=ju.oEXEC=juall:$(EXEC)$(EXEC):$(OBJS)$(CC) -o $@ $(OBJS)clean:rm -f $(OBJS) $(EXEC)ju.c部分代码如下int total = 1;char digit = 65;x = 0, y = 0;a[x][y] = 65;while(total < m*n){while(y+1<n&&!a[x][y+1]){if(digit>=90){digit = 64;}a[x][++y] = ++digit;++total;}while(x+1<m&&!a[x+1][y]){if(digit>=90){digit = 64;}a[++x][y] = ++digit;++total;}while(y-1>=0&&!a[x][y-1]){if(digit>=90){digit = 64;}a[x][--y] = ++digit;++total;}while(x-1>=0&&!a[x-1][y]){if(digit>=90){ digit = 64;}a[--x][y] = ++digit;++total; }}四、实验结果实验2:字符串对比实验——Linux下的C编程一、实验情景描述完成一个程序,输入两个字符串,判断其中一个字符串是否是另一个的子串,如果是则输出true,否则输出false。
微机原理实验
试验一存储器读写实验一、存储器读写实验目的1、熟悉静态RAM的使用方法,掌握8088微机系统扩展RAM的方法。
2、掌握静态RAM读写数据编程方法。
二、实验内容对指定地址区间的RAM(2000H~27FDH)先进行写数据55AAH,然后将其内容读出再写到3000H~33FEH中。
三、实验步骤(运行实验程序)1、运行实验程序;2、稍后按RESET键退出,用存贮器读方法检查2000H~27FDH中的内容和3000~33FF中的内容应都是55AA。
四、实验程序CODE SEGMENTASSUME CS:CODESTART: MOV AX,0HMOV DS,AXMOV BX,2000HMOV AX,55AAHMOV CX,03FFHRAMW1: MOV DS:[BX],AXADD BX,0002HLOOP RAMW1MOV AX,2000HMOV SI,AXMOV AX,3000HMOV DI,AXMOV CX,03FFHCLDREP MOVSBRAMW2: JMP RAMW2CODE ENDSEND START实验二继电器控制实验一、实验目的:掌握用继电器控制的基本方法和编程。
二、实验内容1、利用8255A PB0输出高低电平,控制继电器的开合,以实现对外部装置的控制。
2、硬件线路原理如图5-23所示3、实验预备知识:现代自动化控制设备中都存在一个电子与电气电路的互相联结问题,一方面要使电子电路的控制信号能够控制电气电路的执行元件(电动机、电磁铁、电灯等);一方面又要为电子电路的电气提供良好的电隔离,以保护电子电路和人身的安全,电子继电器便能完成这一桥梁作用。
三、连线方法1、8255A的PB0连JIN插孔。
2、将CS-8255连到Y6。
四、实验步骤1、按图连好实验线路图。
2、运行实验程序,继电器应循环吸合,L-13和L-14交替亮灭。
五、硬件线路接线图六、试验程序CODE SEGMENTASSUME CS:CODEIOCONPT EQU 0063HIOCPT EQU 0061HSTART: MOV AL,80HMOV DX,IOCONPTOUT DX,ALNOPNOPNOPIOLED1: MOV DX,IOCPTIODE2: MOV AL,01HOUT DX,ALCALL DELAYMOV AL,00HOUT DX,ALCALL DELAYJMP IODE2DELAY: MOV CX,0FFFFHDELY: LOOP DELYRETCODE ENDSEND START实验三小直流电机调速实验一、实验目的1、掌握直流电机的驱动原理。
2023年微机原理实验指导书
2.1系统生疏试验【试验目的】把握TD 系列微机原理及接口技术教学试验系统的操作,生疏Wmd86 联机集成开发调试软件的调试环境。
【试验设备】PC 机一台,TD-PITE 试验装置一套。
【试验内容】编写试验程序,将00H~0FH 共16 个数写入到内存3000H 开头的连续16 个存储单元中。
【试验步骤】1.运行Wmd86 软件,进入Wmd86 集成开发环境。
2.在设置菜单中选择“汇编语言”和“16 位存放器”。
3.单击文集菜单的建命令,建一个文档,默认文件名为Wmd861。
4.编写试验程序,并保存,此时系统会提示输入的文件名,输完后点击保存。
5.单击编译文件,假设程序编译无误,则科技连续单击进展链接,链接无误前方可以加载程序。
6.连接PC 与试验系统的通讯电缆,翻开试验系统电源。
7.编译、链接都正确并且上下机通讯成功后,就可以下载程序,联机调试了。
可以通过端口列表中的“端口测试”来检查通讯是否正常。
点击下载程序。
为编译、链接、下载组合按钮,通过该按钮可以将编译、链接、下载一次完成。
下载成功后,在输出区的结果窗中会显示“加载成功!”,表示程序已正确下载。
起始运行语句下会有一条绿色的背景。
8.将输出区切换到调试窗口,试验命令D0000:3000 查看内存3000H 起始地址的数据。
9.点击按钮运行程序,等待程序运行停顿后,通过命令来观看程序结果。
10.也可以设置端点,要修改内存中的数据可以使用命令E,如E0000:3000 可以修改地址0000:3000 处的数据,修改完一个后,可按“空格”键连续输入下一个数。
输入完成后按“回车”键退出。
2.2数制转换试验【试验目的】1 把握不同进制数及编码相互转换的程序设计方法,加深对数值转换的理解。
2.生疏程序调试的方法。
【试验设备】PC 机一台,TD-PITE 试验装置一套。
【试验内容】编写程序,将ASCII 码表示的十进制数转换为二进制数。
【试验步骤】1.依据程序流程图编写程序。
微机原理实验程序 中国石油大学(华东)
实验3 循环程序设计实验内容:1.数组X,Y,Z,。
X=32,-43,76,95,-1;Y=-78,127,-128,-125,88。
计算两数之和,送入数组S。
DATA SEGMENTX DB 32,-43,76,95,-1Y DB -78,127,-128,-125,88S DB 5 DUP(0)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX ,DATAMOV DS,AXMOV CX,5MOV SI,0FOR:MOV AL,X[SI]ADD AL,Y[SI]MOV S[SI],ALINC SILOOP FORCODE ENDSEND START2.两个多位十进制数,X=1357902468,Y=5790123467。
计算两数之和(BCD码)。
DATA SEGMENTX DB 68H,24H,90H,57H,13HY DB 67H,34H,12H,90H,57HS DB 5 DUP(0)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX ,DATAMOV DS,AXMOV CX,5MOV SI,0CLCFOR:MOV AL,X[SI]ADD AL,Y[SI]DAAMOV S[SI],ALINC SILOOP FORCODE ENDSEND START实验4 子程序调用变成设计实验内容:用子程序调用方法,现有数组X=32,-43,76,95,-1,-78,127,-128,-125,88 编程按递增顺序排序输出。
DATA SEGMENTX DB 32,-43,76,95,-1,-78,127,-128,-125,88ENDS SEGMENTCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX ,DATAMOV DS,AXCALL SUB1MOV AH,4CHINT 21HSUB1 PROC NEARMOV CX,9LP1:MOV BX,0MOV DX,CXLP2;MOV AL,X[BX]CMP AL,X[BX+1]JLE NEXTXCHG AL,X[BX+1]NEXT:INC BXDEC DXJNE LP2LOOP LP1RETSUB1 ENDPCODE ENDSEND START实验5 DOS功能调用实验内容:1.从键盘连续输入五个单个字符,然后再反向输出这5个字符。
微机原理实验
实验一、DEBUG 调试软件的使用一、实验目的1.熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。
2.了解数据在存储器中的存取方法以及堆栈中数据的压入与弹出。
3.掌握各种寻址方式以及简单指令的执行过程。
4.掌握变量和标号的处理,数值的默认进位制。
二、实验内容1.设堆栈指针SP=2000H,AX=3000H,BX=5000H;利用堆栈实现将AX,BX的内容交换。
用DEBUG 进行汇编和调试。
1.1 DEBUG的主要命令DEBUG是为汇编语言设计的一种调试工具,它通过单步、设置断点等方式为汇编语言程序员提供了非常有效的调试手段。
一.进入DEBUG状态二.DEBUG的命令1.汇编命令A该命令允许键入汇编语言语句,并能把它们汇编成机器代码,相继地存放在从指定地址开始的存储区中。
注意:汇编程序默认的数据是十进制,而DEBUG默认的数据是16进制,即DEBUG中没有二进制、八进制及十进制,只有16进制。
汇编命令格式为:-A? [段地址]:[偏移地址] 说明:[ ]表示可选项,若未指定地址,则默认地址为CS:0100H。
例:用汇编语言编写一个简单的加法程序。
输入的汇编指令有语法错误的,将提示“error”,再重新输入正确指令即可。
若程序输入完毕,发现某条指令输入错误,比如第三条语句输入有误,就从该指令的偏移地址开始汇编(即-A 106)。
如果新输入的指令所占用的内存空间跟旧指令一样,修改完回车退出汇编即可;如果新输入的指令所占用的内存空间比旧指令少,可在多余的内存空间输入“NOP(空操作,占一字节)”指令;如果新输入的指令所占用的内存空间比旧指令多,就必须将后面的所有指令重新输入。
思考:汇编程序时,偏移地址为何不是连续的,它是如何变化的?(参考第6小点)2.命名命令N读(L)/写(W)程序前,必须先命名,即该命令结合读(L)/写(W)命令使用。
(参阅4、5)例:-N EX1;给程序文件命名为EX1。
3.检查和修改寄存器命令R4.写盘命令WW命令没有任何参数时,与命令N配合使用进行写操作,使用W命令前在BX:CX中应写入文件的字节数。
中国石油大学(华东)计算方法上机实验程序
1.二分法#include <iostream.h>double f(double x);void main(){double a,b,x,ep;a=0;b=5;ep=0.000001;while(b-a>=ep){x=(a+b)/2;if(f(a)*f(x)>0) a=x;else b=x;}x=(a+b)/2;cout<<"the root of f(x) is"<<" "<<x<<endl; }double f(double x){double f1;f1=x*x*x-6*x-1;return f1;}2.牛顿迭代法#include <iostream.h>#include <math.h>double f1(double x);double f2(double x);void main(){int flag,nmax,k;double x,ep,x0;x=2;ep=000001;nmax=200;flag=1;k=1;while(fabs(x-x0)>ep&&(k<nmax)){x0=x;if(fabs(f2(x0))<ep){flag=0;break;}x=x0-f1(x0)/f2(x0);k=k+1;}if(k>=nmax) flag=0;if(flag==0)cout<<"the newton method is failure"<<endl; elsecout<<"the root of f(x) is"<<" "<<x<<endl;}double f1(double x){double f1;f1=x*x*x-3*x-1;return f1;}double f2(double x){double f1;f1=3*x*x-3;return f1;}3.列主元消去法#include<iostream.h>#include<math.h>void main(){static double a[3][3]={{7,8,11},{5,1,-3},{1,2,3}};static double b[3]={-3,-4,1};double ep=0.001;int ip=1;int n=3;double dmax,temp,s;int m,i,j,k;for(k=0;k<=n-2;k++){dmax=fabs(a[k][k]);m=k;for(i=k+1;i<=n-1;i++){if(fabs(a[i][k])>dmax){dmax=fabs(a[i][k]);m=i;}}if(dmax<ep){ip=-1;break;}if(m!=k){for(j=k;j<=n-1;j++){temp=a[k][j];a[k][j]=a[m][j];a[m][j]=temp;}temp=b[k];b[k]=b[m];b[m]=temp;}for(i=k+1;i<=n-1;i++){a[i][k]=a[i][k]/a[k][k];for(j=k+1;j<=n-1;j++){a[i][j]=a[i][j]-a[i][k]*a[k][j];}b[i]=b[i]-a[i][k]*b[k];}}b[n-1]=b[n-1]/a[n-1][n-1];for(i=n-2;i>=0;i--){s=0;for(j=i+1;j<=n-1;j++){s=s+a[i][j]*b[j];}b[i]=(b[i]-s)/a[i][i];}if(ip==-1)cout<<"gauss method is failure"<<endl;elsecout<<"the solution of eqution is "<<b[0]<<","<<b[1]<<","<<b[2]<<endl; }4.LU分解法#include <iostream>#include <fstream>using namespace std;#define N 3int main(){float A[N][N],U[N][N],L[N][N],X[N],Y[N],B[N];float s=0;int i,j,k;cout<<"请输入将要分解的矩阵:"<<endl;for(i=0;i<N;i++) //输入待分解的矩阵for(j=0;j<N;j++)cin>>A[i][j];for(i=0;i<N;i++) //初始化for(j=0;j<N;j++){L[i][j]=0;U[i][j]=0;if(i==j)L[i][j]=1;}for(j=0;j<N;j++) //求U矩阵第一行U[0][j]=A[0][j];for(i=1;i<N;i++)L[i][0]=A[i][0]/U[0][0]; //求L矩阵的第一列for(k=1;k<N;k++) //用k记录化解的行列数,在行和列分解都完成时再进行下一行列的分解{for(j=k;j<N;j++) //本循环将完成行分解的工作{for(int u=0;u<=k-1;u++){s=s+L[k][u]*U[u][j];}U[k][j]=A[k][j]-s;s=0; //每行的和不一致,一行使用完后要置0}for(i=k+1;i<N;i++) //在行分解完成后进行列分解{for(int l=0;l<=k-1;l++){s=s+L[i][l]*U[l][k];}L[i][k]=(A[i][k]-s)/U[k][k];s=0; //每列的和不一致,一行使用完后要置0 }}cout<<endl<<"L"<<endl;for(i=0;i<N;i++){ //输出L Ufor(j=0;j<N;j++)cout<<L[i][j]<<"\t";cout<<endl;}cout<<endl<<"U"<<endl;for(i=0;i<N;i++){for(j=0;j<N;j++)cout<<U[i][j]<<"\t";cout<<endl;}cout<<"请输入矩阵B"<<endl;cout<<endl;for(i=0;i<N;i++)cin>>B[i];Y[0]=B[0]; //求Yfor(k=1;k<N;k++){for(j=0;j<k;j++){s=s+L[k][j]*Y[j];}Y[k]=B[k]-s;s=0;}cout<<endl<<"Y:"<<endl; //输出Yfor(i=0;i<N;i++)cout<<Y[i]<<"\t";cout<<endl;X[N-1]=Y[N-1]/U[N-1][N-1]; //求Xfor(k=N-2;k>=0;k--){for(j=k+1;j<N;j++){s=s+U[k][j]*X[j];}X[k]=(Y[k]-s)/U[k][k];s=0;}cout<<endl<<"X:"<<endl; //输出Xfor(i=0;i<N;i++)cout<<X[i]<<"\t";cout<<endl;system("pause");return 0;}5.追赶法#include <iostream>using namespace std;int main(){double a[15],b[15],c[15],d[15];double t;int i,n;cout<<"请输入 n= ";cin>>n;cout<<endl;cout<<"请输入 b[1],c[1],d[1]:"<<endl;cin>>b[1]>>c[1]>>d[1];cout<<endl;cout<<"输入2行到n-1行 :"<<endl;for(i=2;i<=n-1;i++){cin>>a[i]>>b[i]>>c[i]>>d[i];}cout<<endl;cout<<"请输入 a[n],b[n],d[n]:"<<endl;cin>>a[n]>>b[n]>>d[n];c[1]=c[1]/b[1];d[1]=d[1]/b[1];for(i=2;i<=n-1;i++){t=b[i]-c[i-1]*a[i];c[i]=c[i]/t;d[i]=(d[i]-d[i-1]*a[i])/t;}d[n]=(d[n]-d[n-1]*a[n])/(b[n]-c[n-1]*a[n]);for(i=n-1;i>=1;i--) d[i]=d[i]-c[i]*d[i+1];for(i=1;i<=n;i++)cout<<endl<<"x["<<i<<"]="<<d[i];cout<<endl;return 0;}6.平方根法#include <stdio.h>#include <stdlib.h>#include <math.h>#define EPS 1.0e-8#define N 20double a[N][N], b[N], x[N];int n;int zhuyuan(int row); /* 选主元*/void hangjiaohuan(int row1, int row2); /* 行交换*/ void xiaoyuan(int row); /*消元*/void huidai(); /* 回代*/void main(){printf("请输入方程的维数n!\n n = ");scanf("%d", &n);getchar();printf("\n输入%d行%d列矩阵\n", n, n);for (int i=0; i<n; i++){for (int j=0; j<n; j++)scanf("%lf", &a[i][j]);getchar();}printf("\n输入线性方程组右端项b[%d]: ", n); for (i=0; i<n; i++){scanf("%lf", &b[i]);}getchar();for (i=0; i<n-1; i++){double rowmark = zhuyuan(i); if (rowmark == -1){printf("多解!");system("pause");return;}if (rowmark != i){hangjiaohuan(i, rowmark);}xiaoyuan(i);}huidai();printf("\n线性方程组的解为: "); for (i=0; i<n; i++){printf("x%d=%lf ", i+1, x[i]); }printf("\n");system("pause");}int zhuyuan(int row){double elem = a[row][row];int rowmark = row;for (int i=row+1; i<n; i++){if (elem<a[i][row]){elem = a[i][row];rowmark = i;}}if(fabs(elem) <= EPS){return -1;return rowmark;}void hangjiaohuan(int row1, int row2) {double tmp;tmp = b[row1];b[row1] = b[row2];b[row2] = tmp;for (int j=0; j<n; j++){tmp = a[row1][j];a[row1][j] = a[row2][j];a[row2][j] = tmp;}}void xiaoyuan(int row){for (int i=row+1; i<n; i++){int j=row;double tmp = a[i][j]/a[row][row]; b[i] -= tmp*b[row];for (a[i][j++] = 0; j<n; j++){a[i][j] -= tmp*a[row][j];}}}void huidai(){x[n-1] = b[n-1]/a[n-1][n-1];for (int i=n-2; i>=0; i--){double sum = 0.0;for (int j=i+1; j<n; j++){sum -= a[i][j]*x[j];}x[i] = (b[i]+sum)/a[i][i];}7.G-S迭代法#include<iostream>#include<math.h>void main(){double ep=0.000001;int n=3,ip=1,nmax=200;double c[3][3]={{0,0.2,0.1},{0.2,0,0.1},{0.2,0.4,0}};static double d[3]={0.3,1.5,2};static double x[3]={0.3,1.5,2};int i,j,k;double emax,s;k=0;do{emax=0;for(i=0;i<n;i++){s=d[i];for(j=0;j<n;j++){s=s+c[i][j]*x[j];}if(fabs(s-x[i])>emax)emax=fabs(s-x[i]);x[i]=s;}k=k+1;}while((emax>ep)&&(k<nmax));if(k>=nmax)ip=-1;elseip=1;if(ip==1)printf("the soulation of eqution is %1.10f,%1.10f,%1.10f",x[0],x[1],x[2]);else printf("failure");}8.曲线拟合法#include <iostream>#include <cmath>#define gasvoid main(){static double x[10]={1.36,1.49,1.73,1.81,1.95,2.16,2.28,2.48};static double y[10]={14.094,15.069,16.844,17.378,18.435,19.949,20.963,22.495};int n=8;int m=2;double a[10][10],b[10],z[30];int i,j,k,ip;double s;z[0]=n;for(i=0;i<=2*m-1;i++){s=0;for(k=0;k<=n-1;k++){s=s+pow(x[k],(i+1));}z[i+1]=s;}for(i=0;i<=m;i++){s=0;for(k=0;k<=n-1;k++){s=s+y[k]*pow(x[k],(i));}b[i]=s;}for(i=0;i<=m;i++){for(j=0;j<=m;j++){a[i][j]=z[i+j];}}gas(a,b,m+1,ip,0.000001);if(ip!=-1)printf("%f+%fx+%fx*x",b[0],b[1],b[2]);elseprintf("failure"); }。
微机原理实验指导书 (1)
实验一系统操作及程序调试举例1.实验目的学习并掌握实验系统的基本操作,为以后的实验打下基础。
2.实验设备DICE-8086B实验系统一台3.实验准备工作系统一经连好,检查无误后,就可以通电运行。
系统提供两种启动方式,即:系统自动完成后,显示器上会显示“>”提示符,等待键入操作命令。
4.实验内容及步骤(1)系统操作练习(一)要求:从3500内存单元开始建立0~15共16个数据。
程序流程图如下:实验步骤①输入与修改:在“﹥”提示符下键入A2000,此时显示器上将会显示程序的段地址CS和偏移地址IP(=2000H),接着就可以在光标处输入程序。
注:在输入过程中,若发现本行有错误,则可以按“ ”键删除并重新输入;若回车后系统提示“ERROR!”,则要在原地址指针处重新正确输入。
输入程序后可通过反汇编查看程序。
(U操作)②程序运行:在DICE-8086B实验系统上,程序的运行方式有单步、连续和断点运行几种方式。
可参考(T操作,G操作,GB操作等)③内存单元的修改与显示:用(D操作)可显示内存单元的内容,用(E操作)可修改内存单元的内容。
(分别参考前)。
④运行程序观察从3500H单元开始连续存放的16个数据为多少?任意修改AX的值,再运行程序,显示运行结果是否正确?流程图及参考程序如下:地址机器码助记符注释2000 BF 3500 MOV DI,3500 ;设数据区首址2003 B9 0010 MOV CX,0010 ;字节数送CX2006 B8 0000 MOV AX,00002009 9E SAHF200A 88 05 MOV B[DI],AL ;写入一字节200C 47 INC DI ;修改地址指针200D 40 INC AX ;修改数据200E 27 DAA ;十进制调整200F E2 F9 LOOP 200A ;未填完转移2011 CD 00 INT(2)系统操作练习(二)要求:将内存3500单元开始的0~15共16个数传递到3600单元开始的数据区中。
微机原理实验指导书
微机原理实验指导书实验一数据传送实验目的 :1. 熟悉 8086 指令系统的数据传送指令及 8086 的寻址方式。
2. 利用 Turbo Debugger 调试工具来调试汇编语言程序。
实验任务 :1.通过下述程序段的输入和执行来熟悉Turbo Debugger 的使用,并通过显示器屏幕观察程序的执行情况。
练习程序段如下:MOV BL , 08HMOV CL , BLMOV AX , 03FFHMOV BX , AXMOV DS : [0020H] , BX2.用以下程序段将一组数据压入( PUSH )堆栈区,然后通过不同的出栈顺序出栈,观察出栈后数据的变化情况。
压栈程序段如下:MOV AX , 0102HMOV BX , 0304HMOV CX , 0506HMOV DX , 0708HPUSH AXPUSH BXPUSH CXPUSH DX出栈程序段请自行编写(用不同的出栈顺序)。
.3. 指出下列指令的错误并加以改正,上机验证之。
(1) MOV [BX] , [SI](2) MOV AH , BX(3) MOV AX , [SI][DI](4) MOV BYTE PTR[BX] , 2000H(5) MOV CS , AX(6) MOV DS , 2000H4. 设置各寄存器及存储单元的内容如下:(BX) = 0010H , (SI) = 0001H(10010H) = 12H , (10011H) = 34H , (10012H) = 56H ,(10013H) =78H (10120H) =0ABH ,(10121H) =0CDH ,(10122H) = 0EFH说明下列各条指令执行完后 AX 寄存器中的内容,并上机验证。
(1) MOV AX , 1200H(2) MOV AX , BX(3) MOV AX , [0120H](4) MOV AX , [BX](5) MOV AX , 0110H[BX](6) MOV AX , [BX][SI](7) MOV AX , 0110H[BX][SI]5. 将 DS : 1000H 字节存储单元中的内容送到 DS : 2020H 单元中存放。
中国石油大学(华东)机械原理课程设计程序
中国石油大学(华东)机械原理课程设计程序#include#includemain(){FILE *fp;inti,j,k,p;double w1,PIB,ab,G1,G2,G3;doublel1=0.063,l2=0.333,lk=0.111,PI=3.1415926,m1=40,m2=26,m3=1 5.6,g=9.80665,J2=0.25; double Q1[37],Q2[37],w2[37],sc[37],vc[37],aa2[37],ac[37];doublea2x[37],a2y[37],a2[37],pi2x[37],pi2y[37],MI2[37],pi3[37],pi1x[ 37],pi1y[37],R43[37],Mb[37],Mbz[37],mr z[37],mr[37];double R12[37],R12x[37],R12y[37],a12[37],b12[37];double R23[37],R23x[37],R23y[37],a23[37],b23[37];double R41[37],R41x[37],R41y[37],a41[37],b41[37];doubleWr[37],Wd[37],WW[37];doubleMd,WWmax,WWmin,EEmax,JF;doubledt=0.2;w1=2*150*PI/60;/*--转速150转/分--*/ab=-l1*w1*w1; /*--切向加速度--*/PIB=-m1*ab; /*--求惯性力Pib--*/G1=m1*g; G2=m2*g; G3=m3*g;if ((fp=fopen("d:\\sb.txt","w"))==NULL){printf ("cannot open file.\n");}for(i=0;i<37;i++){/*--运动分析--*/Q1[i]=i*PI/18;/*--每次增加10度--*/Q2[i]=asin(-l1*sin(Q1[i])/l2);/*--l2sin(Q2[i])=-l1*sin(Q1[i])--*/sc[i]=l1+l2-l1*cos(Q1[i])-l2*cos(Q2[i]);w2[i]=(-l1*cos(Q1[i])*w1)/(l2*cos(Q2[i]));vc[i]=-l1*sin(Q1[i])*w1-l2*sin(Q2[i])*w2[i];aa2[i]=(l1*sin(Q1[i])*w1*w1+l2*sin(Q2[i])*w2[i]*w2[i])/(l2*co s(Q2[i]));/*--求阿尔法2--*/ac[i]=-l1*cos(Q1[i])*w1*w1-l2*cos(Q2[i])*w2[i]*w2[i]-l2*sin(Q2[i])*aa2[i];/*--动力分析--*/if(Q1[i]>=0&&Q1[i]<=PI) p=0;/*--吸入冲程受力为0--*/else p=3500;/*--压缩冲程受力3500--*/a2x[i]=l1*w1*w1*cos(PI+Q1[i])+lk*(ac[i]-l1*w1*w1*cos(PI+Q1[i]))/l2;a2y[i]=l1*w1*w1*sin(PI+Q1[i])+lk*(-l1*w1*w1*sin(PI+Q1[i]))/l2;a2[i]=sqrt(a2x[i]*a2x[i]+a2y[i]*a2y[i]);pi2x[i]=-m2*a2x[i];pi2y[i]=-m2*a2y[i];MI2[i]=-J2*aa2[i];pi3[i]=-m3*ac[i];pi1x[i]=PIB*cos(Q1[i]);pi1y[i]=PIB*sin(Q1[i]);R43[i]=((pi3[i]-p)*l2*sin(Q2[i])+pi2x[i]*lk*sin(Q2[i])-(pi2y[i]-G2)*lk*cos(Q2[i])-MI2[i])/(l2*cos(Q2[i]))+G3 ;/*--R12大小以及方向的确定--*/R12x[i]=p-pi3[i]-pi2x[i];R12y[i]=G3+G2-pi2y[i]-R43[i];R12[i]=sqrt(R12x[i]*R12x[i]+R12y[i]*R12y[i]);{if(R12x[i]>=0&&R12y[i]>=0) a12[i]=atan(R12y[i]/R12x[i]);if(R12x[i]<=0) a12[i]=atan(R12y[i]/R12x[i])+PI;if(R12x[i]>=0&&R12y[i]<=0)a12[i]=atan(R12y[i]/R12x[i])+2*PI;}b12[i]=a12[i]*180/PI;/*--R23大小以及方向的确定--*/R23x[i]=p-pi3[i]; R23y[i]=G3-R43[i];R23[i]=sqrt(R23x[i]*R23x[i]+R23y[i]*R23y[i]);{if(R23x[i]>=0&&R23y[i]>=0) a23[i]=atan(R23y[i]/R23x[i])-PI;if(R23x[i]<=0) a23[i]=atan(R23y[i]/R23x[i]);if(R23x[i]>=0&&R23y[i]<=0) a23[i]=atan(R23y[i]/R23x[i])+PI;}b23[i]=a23[i]*180/PI;/*--R41大小以及方向的确定--*/R41x[i]=R12x[i]-pi1x[i]; R41y[i]=R12y[i]+G1-pi1y[i];R41[i]=sqrt(R41x[i]*R41x[i]+R41y[i]*R41y[i]);{if(R41x[i]>=0&&R41y[i]>=0) a41[i]=atan(R41y[i]/R41x[i]);if(R41x[i]<=0) a41[i]=atan(R41y[i]/R41x[i])+PI;if(R41x[i]>=0&&R41y[i]<=0)a41[i]=atan(R41y[i]/R41x[i])+2*PI;}b41[i]=a41[i]*180/PI;Mb[i]=sin(Q1[i])*(pi1x[i]-R12x[i])*l1-cos(Q1[i])*(pi1y[i]-R12y[i]-G1)*l1;}for(i=19;i<37;i++){mr[i]=3500*vc[i]/w1;for(i=0;i<19;i++){mr[i]=0;}for(i=0;i<=12;i++){j=i+12;k=i+24;Mbz[i]=Mb[i]+Mb[j]+Mb[k];Mbz[j]=Mbz[i];Mbz[k]=Mbz[i];mrz[i]=mr[i]+mr[j]+mr[k];mrz[j]=mrz[i];mrz[k]=mrz[i];}/*--飞轮的分析--*/Wr[0]=0;for(i=0;i<37;i++)Wr[i+1]=Wr[i]+0.5*(mrz[i]+mrz[i+1])*(Q1[i+1]-Q1[i]);Md=Wr[36]/(2*PI);for(i=0;i<37;i++){Wd[i]=Md*i*PI/18;WW[i]=Wd[i]-Wr[i];}WWmax=WW[0];WWmin=WW[0];for(i=0;i<37;i++){if(WW[i]>WWmax) WWmax=WW[i];if(WW[i]}EEmax=WWmax-WWmin;/*--求最大盈亏功--*/JF=900*EEmax/(PI*PI*150*150*dt);fputs("以下为运动分析结果:\n",fp);printf("以下为运动分析结果:\n");fputs("φ1 φ2 Sc ω2 Vc α2 ac\n",fp);printf("φ1 φ2 Sc ω2 Vc α2 ac\n");for(i=0;i<37;i++){fprintf(fp,"%-3d %-8.3f %-8.3f %-8.3f %-8.3f %-8.3f %-8.3f\n",10*i,Q2[i]*180/PI,sc[i],w2[i],vc[i],aa2[i],ac[printf("%-3d %-8.3f %-8.3f %-8.3f %-8.3f %-8.3f %-8.3f\n",10*i,Q2[i]*180/PI,sc[i],w2[i],vc[i],aa2[i],ac[i]); }fputs("\n以下为动力分析结果:\n\n",fp);printf("\n以下为动力分析结果:\n\n");fputs("φ1 R43 R12 R23 R41 Mb mr \n",fp);printf("φ1 R43 R12 R23 R41 Mb mr \n");for(i=0;i<37;i++){fprintf(fp,"%3d %8.3f %8.3f %8.3f %8.3f %8.3f %8.3f\n",10*i, R43[i],R12[i],R23[i],R41[i],Mb[i],mr[i]);printf("%3d %8.3f %8.3f %8.3f %8.3f %8.3f %8.3f\n",10*i,R43[i],R 12[i],R23[i],R41[i],Mb[i],mr[i]);}fputs("\n以下为飞轮设计结果:\n\n",fp);printf("\n以下为飞轮设计结果:\n\n");fprintf(fp,"动力矩Md=%.3f\n平均功率为%.3f\n最大盈亏功为%.3f\n飞轮转动惯量JF=%.3f\n飞轮矩=%.3f\n\n",Md,Md*w1,EEmax,JF,4*g*JF);printf("动力矩Md=%.3f\n平均功率为%.3f\n最大盈亏功为%.3f\n飞轮转动惯量JF=%.3f\n飞轮矩=%.3f\n\n",Md,Md*w1,EEmax,JF,4*g*JF);fputs("φ1 mrzmbzWrWd ΔW\n",fp);printf("φ1 mrzmbzWrWd ΔW\n");for(i=0;i<37;i++){fprintf(fp,"%-3d %-9.3f %-9.3f %-9.3f %-9.3f %-9.3f\n",10*i,mrz[i],Mbz[i],Wr[i],Wd[i],WW[i]);printf("%-3d %-9.3f %-9.3f %-9.3f %-9.3f %-9.3f\n",10*i,mrz[i],Mbz[i],Wr[i],Wd[i],WW[i]);}fclose(fp);}。
微机原理实验指导书
湖北工业大学
图 2-1
12 电类 3 班
(2)CZ4:打印接口;
图 2-2 (3)JX0,JX17 为系统提供的数据总线接口;
图 2-7 (3)单脉冲电路:实验台上单脉冲产生电路如图 2-8,标有
“
”和“
”的两个引线插孔为正负单脉冲输出端。
AN 为单脉冲产生开关,每拨动一次产生一个单脉冲。
图 2-3 (4)CZ7:系统提供的扩展接口;
12 电类 3 班
⒋4 总操作过程 8088 十六位微机实验系统上电总清以后,显示器上显示监控提 示符“P.”,各寄存器的初始化值如下: SP=0683H,CS=0000H,DS=0000H,SS=0000H,ES=0000H, IP=l000H,FL=0000H 注意:·所有命令均在提示符“P.”状态输入。
(8)数码管显示电路
图 2-12
(9)键盘电路
图 2-13
湖北工业大学
图 2-14(2)
第三章 系统安装与使用 1、把系统开关设置为出厂模式。 (1)SW3、SW4、SW5:为键盘/显示选择开关,开关置 ON(出 厂模式),键盘/显示控制选择系统配置的 8155 接口芯片,反之由用 户选择自定义的 I/O 接口芯片控制,在本机实验中,除 8279 实验外, 键盘/显示为出厂模式。 (2)KB6:通讯选择开关,KB6->SYS-C 为系统通讯(出厂模 式),KB6->EXT-C 为扩展通讯。 2、将随机配送的串行通讯线,一端与实验仪的 RS232D 型插座 CZ1 相连,另一端与 PC 机 COM1 或 COM2 串行口相连。 3、接通实验系统电源,+5V LED 指示灯应正常发光,实验仪 数码管应显示闪动 P.,说明实验仪初始化成功,处于待命状态。(否 则应及时关闭电源,待修正常后使用) 4、打开 PC 机电源,执行 8086K 的集成调试软件,关于该软件 的详细说明请参阅《第五章 8086K 实验系统与 PC 机联机操作》。
华电保定微机原理汇编实验
实验一、数据块传送1.将数据段中2000H单元开始存放的10个数(8位数)传送到3000H开始的10个字节中。
源程序:DATAS SEGMENT;此处输入数据段代码ORG 2000HDATA1 DB 1,2,3,4,5,6,7,8,9,10ORG 3000HDATA2 DB 10 DUP(0)DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AX;此处输入代码段代码MOV SI,2000HMOV DI,3000HMOV CX,10NEXT:MOV AL,[SI]MOV [DI],ALINC SIINC DIDEC CXJNZ NEXTMOV AH,4CHINT 21HCODES ENDSEND START运行结果:2.将数据段中2000H单元开始存放的10个数(16位数)传送到3000H开始的10个字中。
源程序:DATAS SEGMENT;此处输入数据段代码ORG 2000HDATA1 DW 1,2,3,4,5,6,7,8,9,10ORG 3000HDATA2 DW 10 DUP(0)DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATASMOV DS,AX;此处输入代码段代码MOV SI,2000HMOV DI,3000HMOV CX,10NEXT:MOV AX,[SI]MOV [DI],AXADD SI,2ADD DI,2DEC CXJNZ NEXTMOV AH,4CHINT 21HCODES ENDSEND START运行后:3.将数据DATA1中的10个字节数据传送到数据段DATA2中源数据:DATAS SEGMENT;此处输入数据段代码DATA1 DB 1,2,3,4,5,6,7,8,9,10ORG 1000HDATA2 DB 10 DUP(0)DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATASMOV DS,AX;此处输入代码段代码LEA SI,DATA1LEA DI,DATA2MOV CX,10NEXT:MOV AL,[SI]MOV [DI],ALINC SIINC DIDEC CXJNZ NEXTMOV AH,4CHINT 21HCODES ENDSEND START初始值:运行后:4.将数据段中2000H开始的20个数据传送到2010H开始的20个单元中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验3 循环程序设计实验内容:1.数组X,Y,Z,。
X=32,-43,76,95,-1;Y=-78,127,-128,-125,88。
计算两数之和,送入数组S。
DATA SEGMENTX DB 32,-43,76,95,-1Y DB -78,127,-128,-125,88S DB 5 DUP(0)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX ,DATAMOV DS,AXMOV CX,5MOV SI,0FOR:MOV AL,X[SI]ADD AL,Y[SI]MOV S[SI],ALINC SILOOP FORCODE ENDSEND START2.两个多位十进制数,X=1357902468,Y=5790123467。
计算两数之和(BCD码)。
DATA SEGMENTX DB 68H,24H,90H,57H,13HY DB 67H,34H,12H,90H,57HS DB 5 DUP(0)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX ,DATAMOV DS,AXMOV CX,5MOV SI,0CLCFOR:MOV AL,X[SI]ADD AL,Y[SI]DAAMOV S[SI],ALINC SILOOP FORCODE ENDSEND START实验4 子程序调用变成设计实验内容:用子程序调用方法,现有数组X=32,-43,76,95,-1,-78,127,-128,-125,88 编程按递增顺序排序输出。
DATA SEGMENTX DB 32,-43,76,95,-1,-78,127,-128,-125,88ENDS SEGMENTCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX ,DATAMOV DS,AXCALL SUB1MOV AH,4CHINT 21HSUB1 PROC NEARMOV CX,9LP1:MOV BX,0MOV DX,CXLP2;MOV AL,X[BX]CMP AL,X[BX+1]JLE NEXTXCHG AL,X[BX+1]NEXT:INC BXDEC DXJNE LP2LOOP LP1RETSUB1 ENDPCODE ENDSEND START实验5 DOS功能调用实验内容:1.从键盘连续输入五个单个字符,然后再反向输出这5个字符。
输入:12345输出:54321CODE SEGMENTASSUME CS:CODESTART:MOV CX,5LP1:MOV AH,01INT 21HPUSH AXLOOP LP1MOV DL,0AHMOV AH,02INT 21HMOV DL,0DHMOV AH,02INT 21HMOV CX,5LP2:POP DXMOV AH,02INT 21HLOOP LP2MOV AH,4CHINT 21HCODE ENDSEND START2.从键盘输入一串字符“abcde”,然后输出3次。
DATA SEGMENTMAX DB 10STR DB 10 DUP(‘S’)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXLEA DX,MAXMOV AH,10INT 21HMOV CX,3LP:LEA DX,STRMOV AH,9INT 21HMOV DL,0DHMOV AH,02HINT 21HMOV DL,0AHMOV AH,2INT 21HLOOP LPMOV AH,4CHINT 21HCODE ENDSEND START实验10 简单的输出接口实验实验内容;1.利用74LS75设计一个接口电路,使4个LED同时亮,同时灭,中间间隔1秒,共循环5次。
CODE SEGMENTASSUME CS:CODESTART:MOV CX,5LP;MOV DX,280HMOV AL,0FHOUT DX,ALCALL DELAYMOV DX,280HMOV AL,0HOUT DX,ALCALL DELAYLOOP LPMOV AH,4CHINT 21HDELAY PROC NEARPUSH CXMOV BX,03FFHFOR1:MOV CX,0FFFFHFOR2;LOOP FOR2DEC BXJNZ FOR1POP CXRETDELAY ENDPCODE ENDSEND START2.利用74LS75设计一个接口电路,使8个LED循环点亮,中间间隔1秒,共循环3次CODE SEGMENTASSUME CS:CODESTART:MOV CX,3MOV SI,8LP1:MOV DX,280HMOV AL,01HLP2:OUT DX,ALCALL DELAYSHL AL,1DEC SIJNZ LP2LOOP LP1MOV AH,4CHINT 21HDELAY PROC NEARPUSH CXMOV BX,03FFHFOR1:MOV CX,0FFFFHFOR2;LOOP FOR2DEC BXJNZ FOR1POP CXRETDELAY ENDPCODE ENDSEND START实验11 简单的输入接口实验实验内容:1.设计一个接口电路,当开关来回搬动1次后,在屏幕上输出‘1’,再来回搬动1次,输出‘2’,共搬动5次。
利用硬件消抖。
(D1)CODE SEGMENTASSUME CS:CODESTART:MOV DL,31HMOV CX,5L1:PUSH DXMOV DX,280HIN AL,DXAND AL,01HMOV AH,ALL2:IN AL,DXAND AL,01HCMP AH,ALJZ L2L3:IN AL,DXAND AL,01HCMP AH,ALJNZ L3POP DXMOV AH,02HINT 21HINC DLLOOP L1MOV AH,4CHINT 21HCODE ENDSEND START2.设计一个接口电路,当开关来回搬动1次后,在屏幕上输出‘1’,再来回搬动1次,输出‘2’,共搬动5次。
利用软件消抖。
(D1).CODE SEGMENTASSUME CS:CODE. START:MOV DL,31HMOV CX,5L1:PUSH DXMOV DX,280HIN AL,DXAND AL,01HMOV AH,ALL2:IN AL,DXAND AL,01HCMP AH,ALJZ L2CALL DELAYL3:IN AL,DXAND AL,01HCMP AH,ALJNZ L3CALL DELAYPOP DXMOV AH,02HINT 21HINC DLLOOP L1MOV AH,4CHINT 21HDELAY PROC NEARPUSH CXMOV BX,03FHFOR1:MOV CX,0FHFOR2:LOOP FOR2DEC BXJNZ FOR1POP CXRETDELAY ENDPCODE ENDSEND START3. 设计一个接口电路,当开关搬动1次后,在屏幕上输出‘1’,再搬动1次,输出‘2’,共搬动5次。
(D4)CODE SEGMENTASSUME CS:CODESTART:MOV DL,31HMOV CX,5L1:PUSH DXMOV DX,284HIN AX,DXAND AX,10HMOV SI,AXL2:IN AX,DXAND AX,10HCMP SI,AXJZ L2POP DXMOV AH,02HINT 21HINC DLLOOP L1MOV AH,4CHINT 21HCODE ENDSEND START实验12 数码管显示实验1. 使2个七段显示管分别显示HP,字符保持5秒钟。
CODE SEGMENTASSUME CS:CODESTART:MOV CX,03FFHL1: MOV DX,280HMOV AL,00HOUT DX,ALMOV DX,290HMOV AL,76H ;HOUT DX,ALMOV DX,282HMOV AL,02HOUT DX,ALCALL DONGMOV DX,282HMOV AL,00HOUT DX,ALMOV DX,290H.MOV AL,73H;POUT DX,ALMOV DX,280HMOV AL,01HOUT DX,ALCALL DONGLOOP L1MOV DX,280HMOV AL,00HOUT DX,ALMOV AH,4CHINT 21HDONG PROC NEARPUSH CXPUSH BXMOV BX,0100HFOR1: MOV CX,0100HFOR2: LOOP FOR2DEC BXJNZ FOR1POP BXPOP CX.RETDONG ENDPCODE ENDSEND START2.使2个七段显示管分别显示01,23,45,67,89,每两个字符保持2秒钟。
CODE SEGMENTASSUME CS:CODESTART:MOV CX,01FFHL1: MOV DX,280HMOV AL,00HOUT DX,ALMOV DX,290HMOV AL,3FH ;0OUT DX,ALMOV DX,282HMOV AL,02HOUT DX,ALCALL DONGMOV DX,282HMOV AL,00HMOV DX,290HMOV AL,06H;1OUT DX,ALMOV DX,280HMOV AL,01HOUT DX,ALCALL DONGLOOP L1MOV CX,01FFHL2: MOV DX,280HMOV AL,00HOUT DX,ALMOV DX,290HMOV AL,5BH ;2OUT DX,ALMOV DX,282HMOV AL,02HOUT DX,ALCALL DONGMOV AL,00HOUT DX,ALMOV DX,290HMOV AL,4FH;3OUT DX,ALMOV DX,280HMOV AL,01HOUT DX,ALCALL DONGLOOP L2MOV CX,010FHL3: MOV DX,280HMOV AL,00HOUT DX,ALMOV DX,290HMOV AL,66H ;4OUT DX,ALMOV DX,282HMOV AL,02HOUT DX,AL.CALL DONGMOV DX,282HMOV AL,00HOUT DX,ALMOV DX,290HMOV AL,6DH;5OUT DX,ALMOV DX,280HMOV AL,01HOUT DX,ALCALL DONGLOOP L3MOV CX,010FHL4: MOV DX,280HMOV AL,00HOUT DX,ALMOV DX,290HMOV AL,7DH ;6OUT DX,ALMOV DX,282HOUT DX,ALCALL DONGMOV DX,282HMOV AL,00HOUT DX,ALMOV DX,290HMOV AL,07H;7OUT DX,ALMOV DX,280HMOV AL,01HOUT DX,ALCALL DONGLOOP L4MOV CX,010FHL5: MOV DX,280HMOV AL,00HOUT DX,ALMOV DX,290HMOV AL,7FH ;8MOV DX,282HMOV AL,02HOUT DX,ALCALL DONGMOV DX,282HMOV AL,00HOUT DX,ALMOV DX,290HMOV AL,6FH;9OUT DX,ALMOV DX,280HMOV AL,01HOUT DX,ALCALL DONGLOOP L5MOV DX,280HMOV AL,00HOUT DX,ALMOV AH,4CH.INT 21HDONG PROC NEARPUSH CXPUSH BXMOV BX,0100HFOR1: MOV CX,0100HFOR2: LOOP FOR2DEC BXJNZ FOR1POP BXPOP CXRETDONG ENDPCODE ENDSEND START实验13 可编程并行接口8255A芯片实验实验内容:1.由8255A方式0的A口输出数据,驱动2个LED,循环点亮5次,每个状态保留1秒。