河北工业大学 单片机实验 第四次试验 实验八 查表程序设计
河北工业大学操作系统实验报告
河北工业大教之阳早格格创做支配系统2014版真验报告真验一进程统造与形貌一、真验脚法通过对付Windows2000编程,进一步认识支配系统的基础观念,较好天明黑Windows2000的结构.通过创造进程、瞅察正正在运止的进程战终止进程的步调安排战调试支配,进一步认识支配系统的进程观念,明黑Windows2000进程的“一死”.三、真验真质战步调第一部分:Windows2000Professional下的GUI应用步调,使用VisualC++编译器创造一个GUI应用步调,代码中包罗了WinMain()要领,该要领GUI典型的应用步调的尺度出心面.步调1-1Windows2000的GUI应用步调也不妨利用所有其余文本编写器键进步调代码,如果那样,比圆使用WORD去键进战编写步调,则该当注意什么问题?保存时,将文献保存为扩展名为*.cpp的C++源文献.正在步调1-1的GUI应用步调中,最先需要Windows.h头文献,以便赢得传递给WinMain()战MessageBox()API函数的数据典型定义.接着的pragma指令指示编译器/对接器找到User32.LIB库文献并将其与爆收的EXE文献对接起去.那样便不妨运止简朴的下令止下令CLMsgBox.CPP去创造那一应用步调,如果不pragma指令,则MessageBox()API函数便成为已定义的了.那一指令是VisualStudioC++编译器特有的.接下去是WinMain()要领.其中有四个由本质的矮级出心面传播去的参数.hInstance参数用去拆进与代码贯串的图标或者位图一类的资材,无论何时,皆可用GetModuleHandle()API函数将那些资材提与出去.系统利用真例句柄去指明代码战初初的数据拆正在内存的那边.句柄的数值本质上是EXE文献映像的基天面,常常为0x00400000.下一个参数hPrevInstance是为背后兼容而设的,目前系统将其设为NULL.应用步调的下令止(不包罗步调的称呼)是lpCmdLine参数.其余,系统利用nCmdShow 参数报告应用步调怎么样隐现它的主窗心(选项包罗最小化、最大化战平常).终尾,步调调用MessageBox()API函数并退出.如果正在加进消息循环之前便中断运止的话,终尾必须返回0.运止截止:弹出一个消息框,题目为Greetings,真质为Hello,WindowsXp,中间有一个确认按钮.进程对付象支配系统将目前运止的应用步调瞅做是进程对付象.利用系统提供的惟一的称为句柄(HANDLE)的号码,便可与进程对付象接互.那一号码只对付目前进程灵验.本真验表示了一个简朴的进程句柄的应用.正在系统中运止的所有进程皆可调用GetCurrentProcess()API函数,此函数可返回标记进程自己的句柄.而后便可正在Windows需要该进程的有关情况时,利用那一句柄去提供.步调1-2:赢得战使用进程的句柄步调1-2中列出的是一种赢得进程句柄的要领.对付于进程句柄可举止的惟一有用的支配是正在API调用时,将其动做参数传递给系统,正如步调1-2中对付GetPriorityClass()API函数的调用那样.正在那种情况下,系统背进程对付象内“窥视”,以决断其劣先级,而后将此劣先级返回给应用步调.OpenProcess()战CreateProcess()API函数也不妨用于提与进程句柄.前者提与的是已经存留的进程的句柄,而后者创造一个新进程,并将其句柄提供出去.1-2.cpp的运止截止:进程劣先权为Normal.步调1-3隐现怎么样找出系统中正正在运止的所有进程,怎么样利用OpenProcess()API函数去赢得每一个观察进程的进一步疑息.步调1-3利用句柄查出进程的仔细疑息步调1-3步调最先利用Windows2000的新个性,即工具助闲库去赢得目前运止的所有进程的快照.而后应用步调加进快照中的每一个进程,得到其以PROCESSENTRY32结构表示的属性.那一结构用去背OpenProcess()API函数提供进程的ID.Windows 追踪每一进程的有关时间,示例中是通过挨开的进程句柄战GetProcessTimes()API去曲询得到有关时间的.接下去,一个定造的助闲函数博得了几个返回的数值,而后估计进程正在内核模式下消耗的时间占总时间的百分比.步调的其余部分比较简朴,不过将有关疑息隐现给用户,扫除进程句柄,而后继启循环,曲到所有进程皆估计过为止.运止截止:第二部分:进程的“一死”1、创造进程创造子进程本步调展示的是一个简朴的使用CreateProcess()API函数的例子.最先产死简朴的下令止,提供目前的EXE文献的指定文献名战代表死成克隆进程的号码.大普遍参数皆可与缺省值,然而是创造标记参数使用了:止为像一身材进程的标记,指示新进程调配它自己的统造台,那使得运止示例步调时,正在任务栏上爆收许多活动标记表记标帜.而后该克隆进程的创造要领关关传播过去的句柄并返回main()函数.正在关关步调之前,每一进程的真止主线程久停一下,以便让用户瞅到其中的起码一个窗心.CreateProcess()函数有5个核心参数?本真验步调中树坐的各个参数的值是:a.(LPCTSTRlpApplicationName)szFilename,//爆收那个EXE 的应用步调的称呼;b.(LPTSTRlpCommandLine)szCmdLine,//报告其止为像一身材进程的标记;c.(BOOLbInheritHandles)FALSE,//不继启句柄;d.(LPSTARTUPINFOlpStartupInfo)&si,//开用疑息;e.(LPPROCESS_INFORMATIONlpProcessInformation)&pi);//返回的进程疑息;步调运止时屏幕隐现的疑息是:2、正正在运止的进程使用进程战支配系统的版本疑息运止截止:目前PID疑息:_4664目前支配系统版本:5.1(尔的支配系统为Windows XP)系统提示疑息:TaskManagershouldnownowindicatethisprocessishighpriority.步调背读者标明黑怎么样赢得目前的PID战所需的进程版本疑息.为了运止那一步调,系统处理了所有的版本不兼容问题.接着,步调演示了怎么样使用GetVersionEx()API函数去提与OSVERSIONINFOEX结构.那一数据块中包罗了支配系统的版本疑息.其中,“”表示目前运止的支配系统是:Windows2000.终尾一段步调利用了支配系统的版本疑息,以确认运止的是Windows2000.代码接着将目前进程的劣先级普及到比平常级别下.单打Ctrl+Alt+Del键,加进“Windows任务管造器”,正在“应用步调”选项卡中左键单打本任务,正在快速菜单中采用“转到进程”下令.正在“Windows任务管造器”的“进程”选项卡中,与本任务对付应的进程映像称呼是(为什么?):左键单打该进程名,正在快速菜单中采用“树坐劣先级”下令,不妨安排该进程的劣先级,如树坐为“下”后沉新运止步调,屏幕隐现有变更吗?不.3、终止进程指令其子进程去“杀掉”自己的女进程步调证明黑一个进程从“死”到“死”的所有一死.第一次真止时,它创造一身材进程,其止为如共“女亲”.正在创造子进程之前,先创造一个互斥的内核查于象,其止为对付于子进程去道,如共一个“自杀弹”.当创造子进程时,便挨开了互斥体并正在其余线程中举止别的处理处事,共时等待着女进程使用ReleaseMutex()API收出“牺牲”旗号.而后用Sleep()API调用去模拟女进程处理其余处事,等完毕时,指令子进程终止.当调用ExitProcess()时要留神,进程中的所有线程皆被坐刻报告停止.正在安排应用步调时,必须让主线程正在平常的C++运止期关关(那是由编译器提供的缺省止为)之厥后调用那一函数.当它转背受疑状态时,常常可创造一个每个活动线程皆可等待战停止的终止事变.正在平常的终止支配中,进程的每个处事线程皆要终止,由主线程调用ExitProcess().接着,管造层对付进程减少的所有对付象释搁引用,并将用GetExitCodeProcess()建坐的退出代码从STILL_ACTIVE改形成正在ExitProcess()调用中返回的值.终尾,主线程对付象也如共进程对付象一般转化成受疑状态.等到所有挨开的句柄皆关关之后,管造层的对付象管造器才销毁进程对付象自己.还不一种函数可博得终止后的进程对付象为其参数,进而使其“复活”.当进程对付象引用一个终止了的对付象时,有好几个API函数仍旧是有用的.进程可使用退出代码将终止办法报告给调用GetExitCodeProcess()的其余进程.共时,GetProcessTimes()API函数可背主调者隐现进程的终止时间.运止截止:Childwaitingforsuicideinstructions.表示:_女进程正正在创造子进程.子进程等待女进程杀死子进程._表示:_女进程杀死子进程._四、真验归纳请归纳一下本次真验的支获、教导战体验,分散课本真质道一下您对付进程的明黑.本次真验让尔明黑进程是步调的一次真止历程,是系统举止处理机调动战资材调配的基础单位.(已引进线程之前).进程是支配系统结构的前提;是一个正正在真止的步调;估计机中正正在运止的步调真例;不妨调配给处理器并由处理器真止的一个真体;由简朴程序的真止隐现,一个目前状态战一组相关的系统资材所形貌的活动单元,对付女进程战子进程的关系有了进一步的相识.真验二并收与调动1、真验脚法正在本真验中,通过对付事变战互斥体对付象的相识,去加深对付Windows2000线程共步的明黑.通太过解真验步调,相识管造事变对付象的API.相识正在进程中怎么样使用事变对付象,正在进程中怎么样使用互斥体对付象,线程怎么样通过文献映射对付象收支数据.二、真验真质战步调第一部分:互斥体对付象本步调中隐现的类CCountUpDown使用了一个互斥体去包管对付二个线程间简朴数值的观察.每个线程皆企图赢得统造权去改变该数值,而后将该数值写进输出流中.创造者本质上创造的是互斥体对付象,计数要领真止等待并释搁,为的是共共使用互斥体所需的资材(果而也便是共享资材).1、利用互斥体呵护共享资材分解步调的运止截止,不妨瞅到线程(加战减线程)的接替真止(果为Sleep()API允许Windows切换线程).正在屡屡运止之后,数值该当返回初初值(0),果为正在屡屡运止之后写进线程正在等待行列中形成终尾一个,内核包管它正在其余线程处事时不会再运止.1)请形貌运止截止(如果运止不可功,则大概的本果是什么?):二个线程接替运止,不竭改变value的值.二个线程互斥观察Value的值.2)根据运止输出截止,对付照分解步调,不妨瞅出步调运止的过程吗?请简朴形貌:线程1(5296)先运止,将value值删1,形成1.而后,线程2(6016)运止,将value值减1,形成0.第二部分:线程通过文献对付象收支数据Windows2000提供的线程间通讯类内核查于象允许共一进程或者跨进程的线程之间互相收支疑息,包罗文献、文献映射、邮件位战命名管讲等,其中最时常使用的是文献战文献映射.那类对付象允许一个线程很简单天背共一进程或者其余进程中的另一线程收支疑息.1、演示线程通过文献对付象收支数据运止截止(如果运止不可功,则大概的本果是什么?):阅读战分解步调,请回问问题:1)步调中开用了几个单独的读写线程?1002)使用了哪个系统API函数去创造线程例程?CreateThread()3)文献的读战写支配分别使用了哪个API函数?ReadFile()WriteFile()屡屡运前进程时,皆可瞅到步调中的每个线程从前里的线程中读与数据并将数据减少,文献中的数值连绝减少.那个示例是很简朴的通讯体造.可将那一示例用做编写自己的文献读/写代码的模板.请注意步调中写进之前文献指针的沉置.沉置文献指针是需要的,果为该指针正在读与中断时将处于前四个字节之后,共一指针还要用于背文献写进数据.如果函数背该处写进新数值,则下次进程运止时,只可读到本去的数值.那么:4)正在步调中,沉置文献指针使用了哪一个函数?SetFilePointer()5)从输出截止,对付照分解步调,不妨瞅出步调运止的过程吗?请简朴形貌:最先创造一个线程,读nValue的值,而后nValue值加一后,将nValue值沉新写进文献.沉复上述历程100次.2、演示使用映射文献的内存接换数据的线程阅读战分解步调,请回问:1)步调中用去创造一个文献映射对付象的系统API函数是哪个?CreateFileMapping();2)正在文献映射上创造战关关文献视图分别使用了哪一个系统函数?a.MapViewOfFile()b.UnmapViewOfFile()3)运止时,步调最先通过(MakeSharedFile();)函数创造一个小型的文献映射对付象(hMapping),接着,使用系统API函数(CreateMutex();)再创造一个呵护其应用的互斥体(g_hMutexMapping).而后,应用步调创造100个线程,每个皆允许举止共样的进程,即:通过互斥体赢得观察权,那个支配是由语句:_WaitForSingleObject(g_hMutexMapping,INFINITE);真止的.再通过函数(MapViewOfFile();)支配将视图映射到文献,将下32位瞅做有标记整数,将该数值减少(即下令:++(*pnData);),再将新数值隐现正在统造台上.每个线程扫除文献的视图并正在退出之前释搁互斥体的语句是ReleaseMutex(g_hMutexMapping);.当线程完毕时,应用步调关关并退出.4)将步调中的语句::Sleep(500);简略(比圆正在语句前里加上“//”)后,沉新编译运止,截止有变更吗?为什么?有变更.100个线程一闪而过,不克不迭瞅浑截止.果为Sleep(500)是为了搁缓速度,便当瞅察.四、真验归纳请归纳一下本次真验的支获、教导战体验,分散课本真质道一下您对付进程间统造的明黑.本次真验让尔明黑了支配系统中的事变战互斥体对付象,以及线程共步的观念.教习了进程中怎么样使用事变对付象,正在进程中怎么样使用互斥体对付象,线程怎么样通过文献映射对付象收支数据.当多个进程并收真止时,若咱们不指定进程之间并收的程序,则他们不妨任性并收,当那些进程不观察互斥元素时,运止截止不会出现过得,然而是当多个进程观察共一个互斥体时,便会出现过得,那时咱们必须通过某种脚法去共步进程间并收的程序,那即是进程间的共步问题.另有,并收真止的进程或者线程间,偶尔为了需要,会相互之间举止数据的接换,即进程间通疑,Windows中,不妨通过文献对付象正在线程间收支数据.还不妨使用映射文献的内存接换数据.真验三死产者-消耗者算法模拟真验一、真验脚法1、掌握基础的互斥与共步算法,进一步明黑“死产者-消耗者”模型.2、通过对付“死产者-消耗者”问题编程真止,相识线程创造、共步旗号量、互斥旗号量、临界区的创造战使用,收端相识并收步调安排要领.3、进一步明黑P、V本语战旗号量正在线程互斥战共步体造中的使用.二、真验真质战步调1、正在本次真验开初,以“死产者-消耗者”模型为依据,提供了一个多线程“死产者-消耗者”真例,有部分源步调代码,央供读者分解已体例的一个“死产者-消耗者”真例,并将其缺得的步调代码补充完备,而后调试那段步调,得出最后的截止,并分解截止,得出相映的论断.测验考查改变一些参数,比圆:改变缓冲区数、减少(缩小)线程数、改变延缓数、减少(缩小)死产者进程、减少(缩小)消耗者进程、改变消耗者进程的哀供序列等真质,观察那些改变对付于运止截止的效用.3、参照部分源步调代码:1、empty_semaphore=CreateSemaphore(NULL,n_Buffer_or_Critical,n_Buffer_or_Critical,"semaphore_for_empty");2、h_mutex=CreateMutex(NULL,FALSE,"mutex_for_update");3、h_Semaphore[j+1]=CreateSemaphore(NULL,0,n_Thread,lp.c_str());4、h_Thread[i]=CreateThread(NULL,0,(LPTHREAD_START_ROUT INE)(Produce),&(Thread_Info[i]),0,NULL);5、h_Thread[i]=CreateThread(NULL,0,(LPTHREAD_START_ROUT INE)(Consume),&(Thread_Info[i]),0,NULL);6、ReleaseMutex(h_mutex);7、ReleaseSemaphore(h_Semaphore[m_serial],n_Thread,NULL);8、EnterCritialSection(&PC_Critical[BufferPos]);9、ReleaseSemaphore(empty_semaphore,1,NULL);10、LeaveCriticalSection(&PC_Critical[BufferPos]);4、请补齐上述步调,写出步调的运止截止.步调运止截止如下图所示.2)分解步调的运止截止.最先死产者3死产了产品3,而后死产者1死产了产品1,终尾死产者4死产了产品4.消耗时,消耗者5消耗产品3,而后消耗2消耗产品1,终尾消耗者5消耗产品4.四、真验归纳请归纳一下本次真验的支获、教导战体验,分散课本真质道一下您对付进程间统造的明黑.深刻相识了死产者消耗者进程,进一步明黑了“死产者-消耗者”模型.进一步明黑P、V本语战旗号量正在线程互斥战共步体造中的使用,尔进一步明黑了进程间共步的观念.尔也进一步掌握了基础的互斥与共步算法,特天是死产者消耗者算法.尔也教会了怎么样通过Windows中的共步旗号量、互斥旗号量的创造战使用,去真前进程之间或者线程之间的共步与互斥.另有临界区的创造战使用,线程的创造.真验四页式保存管造部分功能模拟一、真验脚法(1)相识保存器的管造任务战功能(2)相识Windows保存器管造模式战个性(3)深进相识页式保存管造怎么样真止天面变换(4)进一步认识页式保存管造中怎么样处理缺页中断(5)掌握几种页里置换算法的真止要领二、真验真质战步调1、真验真质1、j=p[head];2、p[head]=lnumber;3、head=(head+1)%m;4、if(page[j].write==1)5、page[j].flag=0;6、page[lnumber].flag=1;7、page[lnumber].write=0;8、page[lnumber].pnumber=page[j].pnumber;9、page[j].pnumber,10、j,11、page[lnumber].dnumber,12、Lnumber13、lnumber=laddress>>10;//分散逻辑天面14、ad=laddress&0x03FF;15、page_interrupt(lnumber);16、pnumber=page[lnumber].pnumber;17、paddress=pnumber<<10|ad;18、page_interrupt(lnumber);19、page[i].lnumber=lnumber;20、page[i].flag=0;21、page[i].write=0;22、page[i].dnumber=dnumber;23、i++;24、page[m].pnumber=pnumber;25、page[m].flag=1;26、p[m]=m;27、m++;28、command(laddress,write);2、步调运止截止及简要分解截止分解:最先输进页号战辅存天面,如上图,输进1、1000,2、2000,3、3000,4、4000,5、5000.而后输进主存块号,决定主存块数为2,主存块数分别是1、2.终尾,咱们便不妨模拟步调运止了,最先输进了一条需要建改内存的指令,逻辑天面为1000,果为不正在内存里,果此爆收缺页中断,真止中断服务步调,淘汰主存块1中的页,从磁盘第5000块中调进页4.第二次输进02000,依旧爆收缺页中断.第三次时,输进13000,此时淘汰的页4建改过,果此要将页4写回磁盘第5000块.其余类似.三、真验归纳请归纳一下本次真验的支获、教导战体验,分散课本相关真质道一下您对付Windows2000内存管造的明黑.通过本真验尔相识了哀供页式保存的基础真止,用户应用进程以32位假造天面办法编址,每个假造天面与一个称做“页表端”的结构有关,它包罗了假造天面映射的物理天面,相识了假造保存器的处事本理,以及真存怎么样正在支配系统中真止的.另有便是,当爆收缺页中断时,支配系统怎么样将中部磁盘中的疑息调进内存中,正在调进内存中之前,先用页里置换算法将每一页置换进去.内存管造,是指硬件运止时对付估计机内存资材的调配战使用的技能.其最主要的脚法是怎么样下效,赶快的调配,而且正在适合的时间释搁战回支内存资材.真验五设备管造模拟真验一、真验脚法(1)相识Windows支配系统中设备启动步调的组成(2)明黑Windows支配系统的设备管造体造(3)掌握Windows支配系统关于设备管造的API函数的使用要领(4)相识并掌握Windows中鼠标、键盘等简朴设备的检测要领二、真验真质战步调1、SystemParametersInfo(SPI_SETMOUSEBUTTONSWAP,0,NULL, NULL);//鼠标改为左脚习惯2、SystemParametersInfo(SPI_SETMOUSEBUTTONSWAP,1,NULL, NULL);//鼠标改为左脚习惯3、iFunctionKeynum=GetKeyboardType(2);4、Beep(iFreq[j],300);三、步调运止截止及简要分解截止分解:通过输进1、2、3、4、分别采用鼠标改为左脚习惯,鼠标改为左脚习惯,赢得键盘典型战功能键个数,喇叭播搁音乐等功能.如上图,尔采用了选项3,图隐现尔的键盘典型为IBM巩固型(101或者101键)键盘,功能键个数为12.四、真验归纳请归纳一下本次真验的支获、教导战体验,分散课本相关真质道一下您对付Windows2000设备管造的明黑.设备管造的主要任务是统造设备战CPU之间举止I/O支配,谦脚用户I/O哀供,谦脚用户I/O哀供.设备管造的主要任务是要尽大概的普及CPU战I/O设备之间、I/O设备战I/O设备之间的并止性以及I/O设备的利用率,进而使包罗I/O设备的系统资材赢得最好使用效用.Windows设备启动步调是一种不妨拆置有Windows支配系统的估计机战中部设备之间通疑的特殊步调,不妨道相称于硬件的接心,支配系统惟有通过那个接心,才搞统造硬件设备的处事,假若某设备的启动步调已能精确拆置,便不克不迭平常处事.真验六文献系统2、真验脚法通过本真验,央供教死流利掌握Linux 百般文献支配下令,包罗:使用统造字符真止特殊功能;使用file 战strings下令决定文献典型;使用 cat 利more 下令隐现文本文献的真质;使用head 战tail 下令隐现文本文献的部分真质;使用wc 下令决定单词汇、止战字符数;使用diff 下令比较2 个文献;回瞅文献战目录命名约定;使用touch下令创造新文献;使用mkdir 下令创造新目录;使用 rm 下令简略文献;使用 rm -r 下令简略目录.三、真验真质战步调1. 文献疑息下令Ctrl + Z:终止目前活动.隐现 ls 下令的脚册页里 (man ls) ,而后使用 Ctrl -z 中止输出. 当您接下 Ctrl + Z 的时间,爆收了什么事务?退出助闲,返回shell提示符当使用估计器的时间,您的提示符是什么?fuxin@fuxin-K42JZ:~$ bcCopyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.This is free software with ABSOLUTELY NO WARRANTY.For details type `warranty'.无提示符.(尔的Linux系统为Ubuntu11.10)如果输进一个下令,如ls –R/,偶尔间,会正在按下回车键之前念揩除下令止.输进一个下令,正在接下回车键真止下令之前按下 Ctrl + U.截止是什么?输进的下令被与消了使用 file 下令去决定 test文献的文献典型.它是哪种典型的文献?test:ASCII text2) 可真止(或者二进造) 文献:包罗32 位的可真止文献战可扩展链接要领(ELF) 编码文献,战其余动背链接的可真止文献.那种文献典型表示那个文献是一个下令或者步调.使用file 下令决定您所建坐的文献典型.它是哪种典型的文献?(注意文献名部分必须包罗扩展名,如 file ww.sxw .) ww.odt Open Document Text(尔的电脑上拆的是LibreOffice)步调 5:使用 strings 下令.使用strings下令查看/usr/bin/cal 文献的可读字符.列出strings 下令中的一些输出.fuxin@fuxin-K42JZ:~$ strings /usr/bin/cal__gmon_start___Jv_RegisterClassestgetent步调 6:使用 cat 下令隐现文献的真质.键进 ls /dev > dev1使用cat 下令隐现主目录中dev1 文献的真质.文本的隐现出现了什么情况?文献的所有真质皆隐现出去了,屏幕自动换止.步调 7:使用 more 下令隐现文献的真质.使用more 下令隐现主目录中dev1 文献的真质.文本的隐现出现了什么情况?只隐现最开初的一屏.步调 8:使用 head 下令隐现文献的一部分.1) 单独使用head 下令,隐现主目录中dev1 文献的开初部分.隐现了几止?102) 使用戴 -n 选项的head 下令,隐现主目录中 dante 文献的前20 止.您输进什么下令?head -20 dante步调 9:使用 tail 下令隐现文献的一部分.单独使用tail下令,隐现主目录中dante 文献的终端.隐现了几止?10步调 10:通过使用 wc 下令,决定止数、单词汇数战字符数.使用 wc 下令决定主目录中 dev1 文献的止数、单词汇数战字符数.有几止、几个单词汇战几个字符?205止, 205个单词汇, 1238个字符.步调 11:使用 wc 估计目录条脚法数目.更多标记是横线,战后斜线 (\) 正在共一个键上.正在下令止提示止下,输进下令ls l wc -w.有几个文献战目录名(单词汇) ?24步调 12:使用 diff下令决定文献之间的分歧之处.使用diff下令真止细节比较,决定fruit1 文献战fruit2 文献之间的辨别.正在 fruit1 文献战正在 fruit2 文献中,哪几止是分歧的?fruit1:bananafruit2:banane1) cat 下令:·对付 fruit1文献使用 cat下令.·对付 fruit2文献使用 cat下令.·键进下令止 cat fruit1 fruit2 > filex.·对付 filex 文献使用 cat 下令.上头的下令止搞了什么处事?将fruit1战fruit2二个文献合并,而且写进文献filex.2) 不妨使用哪 2 个下令去决定 2 个文献是可相共?diff.2. 基础的下令止文献管造步调 14:回瞅 Linux 的文献战目录命名准则.步调 15:使用 touch 下令创造文献.下令要领:touch filename (s)1) 正在主目录中使用touch下令创造一个名为newfile 的文献,该当使用什么下令?touch newfile2) 使用touch 下令正在那个目录中创造另一个喊搞filenew 的新文献,该当使用什么下令?touch filenew3) 输进下令隐现practice目录中的文献的少列表.创造的文献列出去了吗?。
河北工业大学编译原理实验报告
河北工业大学编译原理实验报告————————————————————————————————作者:————————————————————————————————日期:编译原理实验报告组员:韦廷廷(112455)、熊敏(112456)、马昊(113042)任课老师:吴清一、任务概述本次实验我们要完成的任务主要是实现一个简单语言集的词法、语法和语义分析程序,验证实际编译系统的实现方法。
我们组的分工并不是词法分析、语法分析、语义分析每人负责一个,而是先确定每种分析按照哪一种方法实现,然后每个人写出自己的想法,按照自己的想法实验,最后总结到一起,有问题大家一起讨论,共同商量解决的办法。
二、系统设计实验采用的实现方法和依据:语言中的各类单词符号及其分类码表单词符号类别编码类别码的助记符单词值begin 1 BEGINend2ENDif 3 IFthen 4THENelse 5 ELSE标识符 6 ID 字母打头的字母数字串无符号常数7UCON 机内二进制表示< 8 LT<= 9 LE= 10 EQ<> 11 NE> 12 GT>=13GE:= 14 IS+ 15PL- 16 MI* 17 MU/18DI实验采用的实现方法和依据:文法:E→ T| E+T | E-TT → F | T*F| T/F F→i| (E)SLR(1)分析表状态ACTION GOTO()+- */ i # E T F0 S4 S5 1 2 31 S6 S7 Acc2 R3 R3 R3S8S9R33 R6 R6 R6 R6 R6R64 S4 S5 10 2 35 R8 R8 R8 R8 R8R86S4 S5 11 37 S4 S5 1238 S4 S5 139S4S5 1410 S15 S6 S711 R1R1 R1 S8 S9 R112 R2 R2 R2S8S9 R213R4 R4 R4R4 R4 R414 R5 R5R5 R5 R5 R515R7 R7 R7 R7 R7 R7三、系统实现(包括必要的框图,各.h和.c文件说明,所有函数功能的说明,数据结构、各种表格、变量等的说明,以及函数调用关系图等)(1)各.h和.c文件说明Cifa.cpp的功能:字符串扫描识别。
北理工微机实验四
北理工微机实验四实验4 A/D和D/A转换一、实验目的1.了解A/D转换的基本原理,掌握ADC0809芯片的使用方法。
2.了解D/A转换的基本原理,掌握DAC0832芯片的使用方法。
3.了解直流电机控制的基本方法。
二、实验内容与步骤(一)A/D转换部分1. 接线:CS /0809 接 Y3 /IO地址IN0 /0809 接0~5V /直流信号EOC 接总线的IRQ2. 实验电路原理图如图1.通过实验台左下角电位器RW1输出0 ~ 5V 直流电压送入 ADC0809通道0(IN0),利用 debug 的输出命令启动A/D 转换器,输入命令读取转换结果,验证输入电压与转换后数字的关系。
启动IN0开始转换:OUT 298H读取转换结果:IN 298H图1 模数转换电路3. 用万用表测量 CLOCK、ADD-C、ADD-B、ADD-A 在实验系统上如何联系的?4. 编程按中断方式采集IN0输入的电压,在屏幕上显示出转换后的数据(用16进制数)。
5. 考虑如果采用IN7输入的电压,启动开始转换和读取转换结果的地址应该是多少?6. 按查询方式采集IN0输入的电压,软硬件如何实现?● 编程提示1. ADC0809的IN0口地址为298H.2. IN0 单极性输入电压与转换后的数字的关系为:其中,为输入电压,为参考电压,这里的参考电压为+5V电源。
3. 一次A/D 转换的程序可以为:MOV DX , port OUT DX , AL ;延时IN AL , DX(二)D/A转换部分1. 接线:CS /0832 接Y2 /IO 地址用万用表测量WR2和XFER在实验系统上如何联系的?2. 实验电路原理如图2所示:图2 DAC0832电路原理图DAC0832采用单缓冲方式,具有单双极性输入端(图中的Ua、Ub),利用debug输出命令(Out 290 数据)输出数据给DAC0832,用万用表测量单极性输出端Ua及双极性输出端Ub的电压,验证数字与电压之间的线性关系。
河北工业大学单片机习题答案
河北⼯业⼤学单⽚机习题答案第⼀章思考题及习题1-1请写出下列各⼗进制数在⼋位微型机中的原码、反码和补码形式:(1)X=⼗48 (2)X=+123 (3)X=-34 (4)X=-1151-2将下列数看作⼋位微型机中带符号数的原码、反码和补码时,写出相应的真值:(1)10110110B (2)01000101B (3)11110010B (4)10101101B1-3 写出下列各数的BCD码:(1)47 ---47H 0100 0111B (2)78 --78H 0111 1000B(3)1996 --1996H 0001 1001 1001 0110B (4)115 --115H 0001 0001 0101B 1-4 ⽤⼗六进制形式写出下列字符的ASCll 码:1-5将下列数据进⾏加法和减法运算,写在前⾯的数为被加数或被减数(写出竖式)。
(1)97H和OFH (2)0A6H和33H (3)0F3H和0F4H (4)0B6H和0EDH⼀、加法(1)97H和OFH被加数 1 0 0 1 0 1 1 1 B =97H加数0 0 0 0 1 1 1 1 B =0FH+和 1 0 1 0 0 1 1 0 B =A6HC8=0 ,C7=0 0V =0 ,CY =0分析:⽆符号数: CY=0, 97H+0FH=0A6H=166 ∵151+15=166带符号数: OV=0, 97H+0FH=0A6H 真值=-5AH=-90 ∵-69H+15=-105+15=-90被加数 1 0 1 0 0 1 1 0 B =A6H加数0 0 1 1 0 0 1 1 B =33H+和 1 1 0 1 1 0 0 1 B =D9HC8=0 ,C7=0 0V =0 ,CY =0分析:⽆符号数: CY=0, A6H+33H=0D9H=217 ∵166+51=217带符号数: OV=0, A6H+33H=0D9H 真值=-27H=-39 ∵-5AH+51=-90+51=-39(3)0F3H和0F4H被加数 1 1 1 1 0 0 1 1 B =F3H加数 1 1 1 1 0 1 0 0 B =F4H+和 1 1 1 1 0 0 1 1 1 B =E7HC8=1 ,C7=1 0V =0 ,CY =1分析:⽆符号数: CY=1, F3H+F4H=100H+0E7H=1E7H=487 ∵243+244=487带符号数: OV=0, F3H+F4H=0E7H 真值=-19H=-25 ∵-13+(-12)= -25(4)0B6H和0EDH被加数 1 0 1 1 0 1 1 0 B =B6H加数 1 1 1 0 1 1 0 1 B =EDH+和 1 1 0 1 0 0 0 1 1 B =A3HC8=1,C7=1 0V =0 ,CY =1分析:⽆符号数: CY=1,B6H+EDH=100H+0A3H=1A3H ∵182+237=419带符号数: OV=0, B6H+EDH=0A3H 真值=-5DH=-93 ∵-4AH-13H=-74-19=-93⼆、减法:(1)97H和OFH被减数 10010111B求补进位 111110111差10001000B分析:⽆:CY=/C8=/1=0,∵97H-0FH=88H, 151-15=136带:C8=1,C7=1 OV=0, ∵97H-0FH=88H, 真值=-78H=-120 ∴ -105-15=-120(2)0A6H 和33H差 101100011B分析:⽆:CY=/C8=/1=0,∵0A6H-33H=73H, 166-51=115带:C8=1,C7=0,OV=1, ∵0A6H-33H=63H, OVER ∴ -90-51=-141<-128(3)0F3H 和0F4H差 11111111B分析:⽆:CY=/C8=/0=1,∵0F3H-0F4H=-100H+0FFH=-1带:C8=0,C7=0,OV=0, ∵0F3H-0F4H=0FFH, 真值=-(00H-0FFH )=-1(4)0B6H 和0EDH差 11001001B分析:⽆:CY=/C8=/0=1,∵0B6H-0EDH=-100H+0C9H=-37H=-55带:C8=0,C7=0,OV=0, ∵0B6H-0EDH=0C9H, 真值=-(00H-0C9H )=-37H=-551-6 完成下列数据的乘除运算,写在前⾯的数为被乘数或被除数(写出竖式)。
单片机实验实验指导书
目录实验一P1口输入、输出实验 (1)实验二P3口输出控制继电器实验 (4)实验三简单I/O实验(交通灯控制) (6)实验四外部中断实验(急救车与交通灯实验) (8)实验五定时器实验 (11)实验六8155输入输出实验 (13)实验七矩阵键盘实验 (15)实验八8279显示实验 (17)实验九串并转换实验 (20)实验十A/D转换实验 (22)实验十一步进电机控制实验 (24)实验十二D/A转换实验 (27)实验十三传送带控制系统综合实验 (29)实验十四机械手控制实验 (32)实验一 P1口输入、输出实验一.实验要求1.P1口做输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。
延时时间500ms。
2.P1口做输入口,接八个开关,以74LS273作输出口,编写程序读取开关状态,将状态写入P0口,在发光二极管上显示出来。
二.实验目的1.学习P1口的使用方法。
2.学习延时子程序的编写和使用。
三.实验电路及连接实验1-1电路图如下:图1.1实验1-2中:P1.0-P1.7接八个按钮K1-K8,P0.0-P0.7接八个发光二极管L1-L8。
四.实验说明1.P1口是准双向口,它作为输出口时与一般的双向口使用方法相同,由准双向口结构可知当P1口作为输入口时,必须先对它置高电平使内部MOS管截止,因为内部上拉电阻阻值是20K~40K,故不会对外部输入产生影响,若不先对它置高,且原来是低电平,则MOS管导通,读入的数据是不正确的。
2.延时子程序的延时计算问题对延时子程序DELAY: MOV R0,#00HDELAY1: MOV R1,#0B3HDJNZ R1,$DJNZ R0,DELAY1查指令表可知MOV,DJNZ指令均需要两个机器周期,而一个机器周期时间长度为12/12MHZ(假设晶振频率是12MHZ),所以该段程序执行时间为:((0B3+1)*256+1)*2*12/12000000=100ms五.实验程序流程图实验要求1的程序框图:实验要求2的程序框图:图1.2 图1.3六、调试方法第一步:打开位于d:\单片机实验\实验一\1_1.uv2,进行实验1_1打开位于d:\单片机实验\实验一\1_2.uv2,进行实验1_2第二步:在资源管理器中如打开.src文件,在程序窗口中输入已编好的程序,保存。
河北工业大学操作系统实验报告 (2)
操作系统实验指导书实验一进程控制与描述一、实验目的通过对Windows XP编程,进一步熟悉操作系统的基本概念,较好地理解Windows XP的结构。
通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解Windows XP进程的“一生”。
二、实验环境硬件环境:计算机一台,局域网环境;软件环境:Windows XP,Visual C++ 6.0专业版或企业版。
三、实验内容和步骤第一部分Windows 编程Windows XP可以识别的程序包括控制台应用程序、GUI应用程序和服务应用程序。
本实验中主要用到的是控制台应用程序和GUI应用程序。
1、简单的控制台应用程序创建一个名为“Hello”的应用程序, 在“开始”菜单中单击“程序”-“附件”-“记事本”命令,将程序键入记事本中,并把代码保存为1-1.cpp。
程序1-1 Windows XP的GUI应用程序#include <iostream>void main(){Std::cout<<”Hello, Windows XP”<<std::endl;}在“命令提示符”窗口运行CL.EXE,产生1-1.EXE文件:C:\> CL 1-1.cpp运行1-1.EXE程序,运行结果是:(如果运行不成功,则可能的原因是什么?)_2、GUI应用程序Windows XP Professional下的GUI应用程序,使用Visual C++编译器创建一个GUI应用程序,代码中包括了WinMain()方法,该方法GUI类型的应用程序的标准入口点。
在“开始”菜单中单击“程序”-“附件”-“记事本”命令,将程序键入记事本中,并把代码保存为1-2.cpp。
程序1-2 Windows XP的GUI应用程序// msgbox项目# include <windows.h> // 标准的include// 告诉连接器与包括MessageBox API函数的user32库进行连接# pragma comment(lib, “user32.lib” )// 这是一个可以弹出信息框然后退出的筒单的应用程序int APIENTRY WinMain(HINSTANCE /* hInstance */ ,HINSTANCE /* hPrevInstance */ ,LPSTR /* lpCmdLine */ ,int /* nCmdShow */ ){:: MessageBox(NULL, // 没有父窗口“Hello, Windows 2000” , // 消息框中的文本“Greetings”, // 消息框标题MB_OK) ; // 其中只有一个OK按钮// 返回0以便通知系统不进入消息循环return(0) ;}也可以利用任何其他文本编辑器键入程序代码,如果这样,例如使用WORD来键入和编辑程序,则应该注意什么问题?保存时将文件保存为“.cpp”的c++文件在“命令提示符”窗口运行CL.EXE,产生1-2.EXE文件:C:\> CL 1-2.cpp在程序1-2的GUI应用程序中,首先需要Windows.h头文件,以便获得传送给WinMain() 和MessageBox() API函数的数据类型定义。
河北工业大学操作系统实验报告.doc
河北工业大学操作系统实验报告.. 操作系统实验指导书实验一进程控制与描述一、实验目的通过对Windows XP编程,进一步熟悉操作系统的基本概念,较好地理解Windows XP的结构。
通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解Windows XP进程的“一生”。
二、实验环境硬件环境:计算机一台,局域网环境;软件环境:Windows XP,Visual C++ 6.0专业版或企业版。
三、实验内容和步骤第一部分Windows 编程Windows XP 可以识别的程序包括控制台应用程序、GUI应用程序和服务应用程序。
本实验中主要用到的是控制台应用程序和GUI应用程序。
1、简单的控制台应用程序创建一个名为“Hello”的应用程序, 在“开始”菜单中单击“程序”-一、实验目的通过对Windows XP编程,进一步熟悉操作系统的基本概念,较好地理解Windows XP的结构。
通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解Windows XP进程的“一生”。
二、实验环境硬件环境:计算机一台,局域网环境;软件环境:Windows XP,Visual C++ 6.0专业版或企业版。
三、实验内容和步骤第一部分Windows 编程Windows XP 可以识别的程序包括控制台应用程序、GUI应用程序和服务应用程序。
本实验中主要用到的是控制台应用程序和GUI应用程序。
1、简单的控制台应用程序创建一个名为“Hello”的应用程序, 在“开始”菜单中单击“程序”:(如果运行不成功,则可能的原因是什么?)_2、GUI应用程序Windows XP Professional下的GUI应用程序,使用Visual C++编译器创建一个GUI应用程序,代码中包括了WinMain()方法,该方法GUI类型的应用程序的标准入口点。
在“开始”菜单中单击“程序”-2、GUI应用程序Windows XP Professional下的GUI应用程序,使用Visual C++编译器创建一个GUI 应用程序,代码中包括了WinMain()方法,该方法GUI类型的应用程序的标准入口点。
河北工业大学计算机硬件实验答案
第3章指令系统和汇编语言程序设计实验3.2 指令系统实验实验一熟悉键盘操作及数传指令编程设计一、实验目的1.熟悉软件模拟调试的环境及键盘操作。
2.掌握汇编语言程序设计的方法,加深对指令的理解。
3.学会软件模拟调试和察看修改观察项的方法。
二、实验内容印证数据传送指令的功能、寻址方式以及PC指针、SP指针、DPTR指针、Ri指针分别对代码段、堆栈段、外扩数据存储器段、位寻址区等不同存储器的访问方式。
三、实验步骤1.进入调试软件环境,输入源程序;2.汇编源程序;3.用单步方式运行程序;4.检查并记录各寄存器和存储单元内容的变化。
四、程序清单1.内部RAM数据传送1)寄存器寻址与立即寻址,需要查看的数据有A、PSW和不同寄存器区的Rn等单元的内容。
ORG 0000HMOV PSW,#00H;MOV R0,#30H;(R0)=30HMOV A,R0;(A)=30HMOV R6,A;(R6)=30HMOV PSW,#14HMOV R0,#30H;(R0)=30HMOV A,R0;MOV R6,A; (R6)=30HMOV PSW,#10H;MOV R0,#30H; (R0)=30HMOV A,R0;(A)=30HMOV R6,A;(R6)=30HMOV PSW,#08H;MOV R0,#30H;(R0)=30HMOV A,R0MOV R6,A;(R6)=30HSJMP $END2) 直接寻址,需查看30H、31H、32H、40H、ACC、PSW等单元的内容。
ORG 0100HMOV 30H,#45H;(30H)=45HMOV 31H,#46H; (31H)=46HMOV 02H,31H;(R2)=46HMOV 0E0H,30H;(A)=45HMOV 32H,ACC; (32H)=45HMOV ACC,PSW;(A)=01HMOV 40H,ACC;(40H)=01HSJMP $END3)寄存器间接寻址,需查看@R0、RO等的内容。
汇编实验报告(河北工业大学)
实验一顺序与分支程序设计一、实验目的1)掌握顺序程序设计方法。
2)掌握分支程序的结构及分支程序的设计,调试方法。
2) 学习数据传送及算术和逻辑运算指令的用法。
3) 熟悉在PC机上建立、汇编、连接、调试和运行汇编语言程序的过程。
二、实验内容1) 有一字变量BUF1是以原码表示的有符号数,要求将其转换为反码和补码,分别存入BUF2和BUF3单元,并在屏幕上显示出来。
源代码:DATA SEGMENTBUF1 DW 9348HBUF2 DW 4 DUP(0),0AH,0DH,'$'BUF3 DW 4 DUP(0),'$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATABEGIN:MOV AX,DATAMOV DS,AXMOV AX,BUF1ADD AX,0JS NEXTMOV BUF2,AXMOV BUF3,AXJMP EEENEXT:AND AX,7FFFHNOT AXMOV BUF2,AXINC AXMOV BUF3,AXEEE:MOV CX,0004HMOV DI,OFFSET BUF2MOV DX,[DI]ADD DI,03BBB:MOV AX,DXAND AX,000FHCMP AL,0AHJB QQQADD AL,07HQQQ:ADD AL,30HMOV [DI],ALDEC DIPUSH CXMOV CL,04HSHR DX,CLPOP CXLOOP BBBMOV CX,0004HMOV SI, OFFSET BUF3 MOV DX,[SI]ADD SI,03HCCC:MOV AX,DXAND AX,000FHCMP AL,0AHJB DDDADD AL,07HDDD:ADD AL,30HMOV [SI],ALDEC SIPUSH CXMOV CL,04HSHR DX,CLPOP CXLOOP CCCMOV DX,OFFSET BUF2 MOV AH,09HINT 21HMOV DX,OFFSET BUF3MOV AH,09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND BEGIN运行结果:2)有两个两字节无符号数分别放在存储单元A、B起始的缓冲器中,求其和,结果放在A起始的缓冲区并在屏幕上显示。
河北工业大学 单片机 第三次实验内容
3.3汇编语言程序设计实验实验六 分支程序设计一、 实验目的1. 进一步熟悉MCS-51指令系统,了解汇编语言程序设计的基本结构。
2. 掌握分支结构程序设计的方法。
3. 学会用条件转移指令、CJNE 、JMP 及其配合使用来编写二分支、三分支和多分支程序。
二、 实验内容1. 二分支的条件转移程序设变量X 存放于R0,函数值Y 存放在R1,其中X 、Y 均为二进制数。
试按照下式的要求给Y 赋值:程序框图如图3-5所示:Y= 1 X>0 0 X=0 -1 X<0:三、实验步骤1.根据实验内容和参考程序流程图,编出相应的分支结构程序。
2.输入程序,汇编成功;3.用F4(执行到光标处)、F7(跟踪执行)、F8(单步执行)或断点运行等方式调试程序;4.观察程序的流程,记录运行结果。
四、思考题1.CJNE指令对CY 有影响吗?用CJNE 和JC/JNC指令配合应注意什么?在用JMP 指令前,若变址 255怎么办?答:1)CJNE指令对CY 有影响。
CJNE (目的字节),(源字节),rel 功能:目的字节与源字节比较,相等则继续执行,不相等则转移,同时,若目的字节>=源字节,(C)=0若目的字节<源字节,(C)=12)选取好正确的direct值以便确定Cy的值3)提前设好变址,使变址<2552.用什么指令可以实现多分支之间的隔离?答:控制、条件转移指令,包括JMP、CJNE、DJNZ、JC、JB等,可以转移到$或其他。
五、实验报告要求写出题目运行结果。
六、参考程序清单1、二分支的条件转移程序1)用二分支结构程序实现:ORG 0000HMOV A, R0JZ LOAD ;等于零转LOADJNB ACC.7,GO ;大于零转GOMOV A, #0FFHSJMP LOADGO: MOV A, #01HLOAD: MOV R1, ASJMP $END运行结果:(R1)=0X002)赋值(R0)=15H运行结果: (R1)=0X013)赋值(R0)=0F2H2)用三分支结构程序实现:ORG 0000HMOV A, R0JNZ COMP ;不等于零转COMPMOV R1,#00H ;等于零,则0 →(R1)SJMP MP3COMP: CJNE R0,#80H,MP1 ;(R0)中数与80H比较,不相等则转移到MP1 MOV R1,#0FFH ;若比较相等,则-1 →(R1)LJMP MP3MP1: JC MP2 ;两数不相等,(R0)> 0转MP2MOV R1,#0FFH ;(R0) < 0,-1 →(R1)LJMP MP3MP2: MOV R1,#01H ;(R0)>0,1 →(R1)MP3: SJMP $END运行结果:(R1)=0X00 2)赋值(R0)=15H3)赋值(R0)=0F2H实验七循环程序设计一、实验目的1.进一步熟悉MCS-51指令系统,了解汇编语言程序设计的基本结构。
北邮单片机实验报告
.电路综合实验报告流水灯计时器和密码锁目录一、流水灯和计时器 (4)1.实验目的 (4)2.设计功能 (4)3.实验器材及功能 (4)4.电路连接图 (5)5.电路接口 (5)6.主要程序说明 (5)7.实验排错及改进 (9)二、密码锁 (10)1.设计目的 (10)(1)功能 (10)(2)用途 (10)2.设计功能 (10)(1)提示各项操作指令 (10)(2)密码正误识别 (11)(3)重置密码 (11)3.实验器材及功能 (12)4.硬件设计 (13)(1)电路原理图 (13)(2)电路实际连接图 (13)(3)系统工作流程图 (14)(4)各分块电路的详细情况【包括端口的接线】 (15)5.程序设计 (16)(1)键盘扫描程序 (16)(2)显示屏显示程序 (21)(3)滚动显示操作 (33)(4)键盘按键判断程序 (34)(5)主程序 (43)6.操作过程及运行结果 (44)7.实验排错及改进 (45)三、体会和建议 (45)四、实验分工 (47)附录 (47)一、流水灯和计时器1.实验目的这次实验是我第一次接触单片机,为了更加深入的了解ATmega16单片机的各种应用方法和工作原理,我们从最基础的实验入手,了解单片机的各个端口的作用和利用AVRStudio工具编写单片机可识别的C 语言程序。
在观看了教学视频和查阅了说明书后,我们了解了单片机的各个端口,对端口进行一定输入输出练习。
为了将所学的单片机进行实际应用,我们通过流水灯和计时器这两个入门实验对所学知识进行实践检验。
2.设计功能(1)流水灯演示,依次点亮每一个发光二极管。
(2)用两个数码管做一个秒表计时器。
要求按下中断按键后能够暂停秒表计时,但不影响流水灯的运行,再次按键能够使秒表继续计时3.实验器材及功能4.电路连接图5.电路接口流水灯八个灯:PA0—PA7十位数码管:PB0—PB7(PB2未接)个位数码管:PD0—PD7(PD2未接)中断按键接:PD26.主要程序说明#include<avr/io.h>#include<avr/interrupt.h>char temp;volatile unsigned intcnt = 0;volatile unsigned int i = 1;volatile unsigned int key = 0;char shuzi[10] =//为计时器设置数字0-9数组{0b11110011,//00b11000000,//10b01101011,//20b11101010,//30b11011000,//40b10111010,//50b10111011,//60b11100000,//70b11111011,//80b11111010,//9};int main(void){DDRA = 0xff;//设置端口方向和初始状态DDRD = 0xff;DDRB = 0xff;TCNT0 = 55;MCUCR |= (1 << ISC01);//八分频GICR |= (1 << INT0);sei();TCCR0 |= (1 << CS01) | (1 << CS00);PORTA |= 0b00000001;PORTD = shuzi[0];PORTB = shuzi[0];while (1){TCNT0 = 55;cnt++;if (cnt>=60000){cnt = 0;temp = PORTA;//控制发光二极管PORTA = PORTA << 1;if (temp & 0b10000000)//控制流水灯电路{PORTA = PORTA | 0b00000001;}if(key==0){PORTB = shuzi[i / 10];PORTD = shuzi[i % 10];i++;if (i >= 60)//控制数码管的显示{i = 0;}}}}}SIGNAL(SIG_INTERRUPT0)//中断信号{key = !key;}7.实验排错及改进①错误:最初进行流水灯实验时,灯始终不亮原因和改进:发光二极管未接地,接地后,再连接上电阻限流,即可正常发光。
河工大计算机组成实验指导书
8
三、实验内容
1、按图 2.2 运算器数据通路图设计一个能完成表 2-1 所列出的八种补码运算指令的运算器。
表 2-1 运算器的 8 种指令功能表
指令 加 减 加1 减1 逻辑与 取反 右移 左移
助记符 ADD SUB INR DCR ANA CMA SHR SHL
代码 1001 0110 0000 1111 1011 0101 1010 1100
9
Q1
Q2
Q3
3
4
5
74LS37V的8
QA T CR 1
QB CR T
Qc CR T
3
& 37Ⅲ 12
04Ⅱ 13 12
1
> > > >
6 QD CR
T
74LS393
2
1 CR
A1
A2
H
图 1-8 节拍脉冲形成电路
四、实验要求
做好“实验预习”,并按“实验报告规范”做好实验报告。实验时,记录实验实测波形、启停情况、出 现现象的分析,总结实验体会,提出改进意见和问题。
要实现移位功能需在 ALU 和 BUS 之间接入一排移位控制门。右移时,其末位进入 C(进位位),首位补 0。移位数据通路如图 2-2 示。
左移指令利用 ALU“A+A”指令模式来完成,这个左移 8 位三态门可以省去。 3、运算器数据通路电路图 通过以上分析,整个数据通路在 ALU 与 BUS 之间除原有直送隔离门外,还需要添加一个右移控制门。 在总线上挂上开关、程序计数器和输出显示。 在计算机运算过程中,经常要根据运算结果和进位输出来决定程序的流程,可从 ALU 的 A=B 和 C n+4 端输出判断信息,分别打入进位位 C 和结果 Z 触发器。 实验中,为减少开关占用量,可在总线上挂一个指令寄存器,存放 ALU 的控制信息 S3~S0,M、Cn。 运算器数据通路如图 2-2 所示。运算器实验电路原理如图 2-3 所示。
河北工业大学Java程序设计实验报告
Java程序设计实验报告班级:网络 151姓名:徐毅民学号: 153299实验一 Java语言基础一.实验目的掌握 Java语言的基本语法、基本数据类型的使用方法,掌握从键盘输入基本类型的数据,熟练运用分支、循环等语句控制程序流程。
二.实验内容1、编写一个Java应用程序,用户从键盘输入十名学生的信息,至少包括姓名、年龄、出生年月日、java课程实验成绩,成绩使用浮点数,年龄使用整型,程序将输出年龄、java课程实验成绩的平均值。
提示:Scanner对象调用nextDouble()或nextFloat()可以获取用户从键盘输入的浮点数。
2、使用Arrays类实现数组排序:使用java.util包中的Arrays 类的类方法public static void sort(double a[])可以把参数a指定的double类型数组按升序排序;public static void sort(double a[], int start , int end)可以把参数a指定的double类型数组中从位置start到end位置的值按升序排序。
给定数组int a[]={12,34,9,-23,45,6,90,123,19,45,34}; 从键盘读入一个整数,使用折半查找判断该整数是否在这个数组中,并将结果输出。
3、输出100~200之间的所有素数。
4、采用for循环求1至1000之内的所有“完全数”。
所谓“完全数”是指一个数,恰好等于它的因子之和。
例如,6是一个完全数,因为6的因子为1、2、3,而6=1+2+3。
5、已知XYZ+YZZ=532,其中X、Y和Z为数字,编程求出X,Y和Z 的值。
三.实验步骤实验1以最终学生信息管理系统为准实验2代码如下:import java.util.Arrays;import java.util.Scanner;public class test2 {public static void printDoubleArray(double a[]) { for(int i = 0; i < a.length; i++) {System.out.print(a[i]+" ");}System.out.println();}public static void printfIntegerArray(int a[]) { for(int i = 0; i < a.length; i++) {System.out.print(a[i]+" ");}System.out.println();}public static void main(String[] args) {double a[] = {2.6, 4.6, 2, 8, 888, 569.5, 454.5, 100, -84.5, 45};System.out.println("原double数组a:");printDoubleArray(a);Arrays.sort(a, 0, a.length/2);System.out.println("排序double数组a前一半:");printDoubleArray(a);Arrays.sort(a);System.out.println("排序整个double数组a:");printDoubleArray(a);int b[] = {12, 34, 9, -23, 45, 6, 90, 123, 19, 45, 34};Arrays.sort(b);System.out.println("排序整个double数组b:");printfIntegerArray(b);Scanner in = new Scanner(System.in);System.out.print("输入要查询的数字:");int key = in.nextInt();int i = Arrays.binarySearch(b, key);if(i < 0 || i >= b.length) {System.out.println(i+"输入数字不在数组中!");} else {System.out.println(b[i]+"在数组b第"+(i+1)+"位!");}}}实验3代码如下:public class test3 {public static boolean isPrime(int x) {if(x == 1) return false;int s = (int)Math.sqrt(x);for(int i = 2; i <= s; i++) {if(x%i == 0) return false;}return true;}public static void main(String[] args) {int cnt = 0;for(int i = 100; i < 200; i++) {if(isPrime(i)) {System.out.printf("%4d", i);}if(isPrime(i) && cnt%10 == 0)System.out.println();}}}实验4代码如下:public class test4 {public static boolean isCompleteNumber(int x) { int sum = 0;for(int i = 1; i < x; i++) {if(x%i == 0) sum += x;}return x == sum;}public static void main(String[] args) {int cnt = 0;for(int i = 1; i <= 1000; i++) {if(isCompleteNumber(i)) {System.out.printf("%4d", i);}if(isCompleteNumber(i) && cnt%10 == 0)System.out.println();}}}实验5代码如下:public class test5 {public static void main(String[] args) {for(int x = 0; x < 10; x++) {for(int y = 0; y < 10; y++) {for(int z = 0; z < 10; z++) {if(100*x+110*y+12*z == 532) {System.out.println("X="+x+" Y="+y+" Z="+z);return;}}}}}}四.详细的调试和运行结果实验2运行结果:原double数组a:2.6 4.6 2.0 8.0 888.0 569.5 454.5 100.0 -84.5 45.0排序double数组a前一半:2.0 2.6 4.6 8.0 888.0 569.5 454.5 100.0 -84.5 45.0排序整个double数组a:-84.5 2.0 2.6 4.6 8.0 45.0 100.0 454.5 569.5 888.0排序整个double数组b:-23 6 9 12 19 34 34 45 45 90 123输入要查询的数字:-23-23在数组b第一位!实验3运行结果:101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199实验4运行结果:2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241 251 257 263 269 271 277 281 283 293 307 311 313 317 331 337 347 349 353 359 367 373 379 383 389 397 401 409 419 421 431 433 439 443 449 457 461 463 467 479 487 491 499 503 509 521 523 541 547 557 563 569 571 577 587 593 599 601 607 613 617 619 631 641 643 647 653 659 661 673 677 683 691 701 709 719 727 733 739 743 751 757 761 769 773 787 797 809 811 821 823 827 829 839 853 857 859 863877 881 883 887 907 911 919 929 937 941947 953 967 971 977 983 991 997实验5运行结果:X=3 Y=2 Z=1五.实验感想通过本次从实验对java语言的基本语法有了基本了解,学会了使用控制台命令行的方式运行java程序。
河北工业大学操作系统实验报告-(2)
操作系统实验指导书实验一进程控制与描述一、实验目的通过对Windows XP编程,进一步熟悉操作系统的基本概念,较好地理解Windows XP的结构。
通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解Windows XP进程的“一生”。
二、实验环境硬件环境:计算机一台,局域网环境;软件环境:Windows XP,Visual C++ 6.0专业版或企业版。
三、实验容和步骤第一部分 Windows 编程Windows XP可以识别的程序包括控制台应用程序、GUI应用程序和服务应用程序。
本实验中主要用到的是控制台应用程序和GUI应用程序。
1、简单的控制台应用程序创建一个名为“Hello”的应用程序, 在“开始”菜单中单击“程序”-“附件”-“记事本”命令,将程序键入记事本中,并把代码保存为1-1.cpp。
程序1-1 Windows XP的GUI应用程序#include <iostream>void main(){Std::cout<<”Hello, Windows XP”<<std::endl;}在“命令提示符”窗口运行CL.EXE,产生1-1.EXE文件:C:\> CL 1-1.cpp运行1-1.EXE程序,运行结果是:(如果运行不成功,则可能的原因是什么?)_2、GUI应用程序Windows XP Professional下的GUI应用程序,使用Visual C++编译器创建一个GUI应用程序,代码中包括了WinMain()方法,该方法GUI类型的应用程序的标准入口点。
在“开始”菜单中单击“程序”-“附件”-“记事本”命令,将程序键入记事本中,并把代码保存为1-2.cpp。
程序1-2 Windows XP的GUI应用程序// msgbox项目# include <windows.h> // 标准的include// 告诉连接器与包括MessageBox API函数的user32库进行连接# pragma comment(lib, “user32.lib” )// 这是一个可以弹出信息框然后退出的筒单的应用程序int APIENTRY WinMain(HINSTANCE /* hInstance */ ,HINSTANCE /* hPrevInstance */ ,LPSTR /* lpCmdLine */ ,int /* nCmdShow */ ){:: MessageBox(NULL, // 没有父窗口“Hello, Windows 2000” , // 消息框中的文本“Greetings”, // 消息框标题MB_OK) ; // 其中只有一个OK按钮// 返回0以便通知系统不进入消息循环return(0) ;}也可以利用任何其他文本编辑器键入程序代码,如果这样,例如使用WORD来键入和编辑程序,则应该注意什么问题?保存时将文件保存为“.cpp”的c++文件在“命令提示符”窗口运行CL.EXE,产生1-2.EXE文件:C:\> CL 1-2.cpp在程序1-2的GUI应用程序中,首先需要Windows.h头文件,以便获得传送给WinMain() 和MessageBox() API函数的数据类型定义。
河北工业大学-汇编实验报告范文
河北工业大学-汇编实验报告范文汇编实验实验一顺序与分支程序设计一、实验目的1)掌握顺序程序设计方法。
2)掌握分支程序的结构及分支程序的设计,调试方法。
2)学习数据传送及算术和逻辑运算指令的用法。
3)熟悉在PC机上建立、汇编、连接、调试和运行汇编语言程序的过程。
二、实验内容1)有一字变量BUF1是以原码表示的有符号数,要求将其转换为反码和补码,分别存入BUF2和BUF3单元,并在屏幕上显示出来。
2)有两个两字节无符号数分别放在存储单元A、B起始的缓冲器中,求其和,结果放在A起始的缓冲区并在屏幕上显示。
相加若有进位不存入存储单元。
3)在BUF和BUF+1、BUF+2单元分别放有一个无符号字节型数,编程序将其中最大数存入MA某单元,并在屏幕上显示。
4)要求同上,只是比较的数为有符号数。
5)将1000H单元开始的10个字节数,采用奇偶校验,将奇数在前偶数在后仍存回原数据区。
本实验要求在DEBUG调试状态下进行,包括汇编程序、运行程序、检查结果。
6)从键盘上接收一位十进制数某,计算Y值,并以十六进制形式显示出来,Y按下列公式计算。
某2某(某3)2某2某(某4)Y2某(某5)2某/2(某6)7)从键盘上接收两个一位十六进制数某和Y,然后再输入一个A-D之间的一个字符,按下列要求计算。
a)b)c)d)三、实验设备PC机一台当输入字符为A,则计算某+Y,并以十六进制形式显示出来当输入字符为B,则计算|某-Y|,并以十六进制形式显示出来当输入字符为C,则计算某某Y,并以十六进制形式显示出来当输入字符为D,则计算某/Y,并以十六进制形式显示出来四、实验准备1)分析题目,将程序中的原始数据和最终结果的存取方法确定好。
2)画出流程图。
3)写出源程序。
4)对程序中的结果进行分析,并准备好上机调试与用汇编程序及汇编调试的过程。
五、实验步骤1)输入源程序。
2)汇编、连接程序,生成.E某E文件,执行文件,检查结果。
六、实验报告的要求1)列出源程序,说明程序的基本结构,包括程序中各部分的功能。
第(4)次实验报告-定时器
一、实验准备1、实验箱的拨码开关K10拨在下方;拨码开关KC 拨在上方;按照实验手册连数据线。
2、本实验的汇编程序是“ZYT0.ASM ”二、8279的端口地址1、8279芯片的数据口地址——5EFFH2、8279芯片的控制口地址—— 5FFFH3、以下是8279的功能框图。
三、把调试好的C 程序粘贴在此处#include <reg51.h>#include <absacc.h> //XBYTE[]头文件//硬件连接不同控制口和数据口的定义基于不一样#define CTRL8972 XBYTE [0x5fff] //定义8279控制口#define DATA8279 XBYTE [0x5eff] //定义8279数据口#define uchar unsigned charvoid jinweiLED();void displayLED();//6个灯uchar led[6] = {0,0,0,0,0,0};//LED 共阳极数码管0-F (不带小数点)//------------------------------------// a b c d e f g// 0 0 0 0 0 0 1// _// | |// | _ |//------------------------------------uchar code tableLED[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xBF,0x8C,0x0C1,0x89,0xC7,0xBF,0x91,0x00,0xff};uchar n = 16; //将一秒分为16等份void main(){uchar flag;EA = 1;ET0 = 1; //外部中断1选用下降沿TMOD = 0x01;TH0 = 0x06;TL0 = 0x06;TR0 = 1;CTRL8972 = 0xDC; //送控制字, 输出while(1){flag = CTRL8972; //输入状态字,判断最高位如果为0就跳出循环if((flag & 0x80) != 0x80)break;}while(1) displayLED();}//中断服务函数void int_server () interrupt 1 using 1{TH0 = 0x06;TL0 = 0x06;n--;if(n == 0){n = 16;jinweiLED();}}//进位函数void jinweiLED(){led[0]++;if (led[0] == 10){led[0] = 0;led[1]++;if (led[1] == 10){led[1] = 0;led[2]++;if (led[2] == 10){led[2] = 0;led[3]++;if (led[3] == 10){led[3] = 0;led[4]++;if (led[4] == 10){led[4] = 0;led[5]++;}}}}}}//显示函数void displayLED(){uchar i=0;CTRL8972 = 0x92;for (i=0;i<6;i++){DATA8279 = tableLED[led[i]];}}四、看懂本实验的汇编程序“Z YT0.asm”,回答以下问题(1)为8279芯片初始化的是哪段代码?请将初始化程序拷贝到此处答:MOV DPTR,#5FFFHMOV A,#0DCHMOVX @DPTR,AMOVX A,@DPTRJNB ACC.7,LPMOV A,#00HMOVX @DPTR,AMOV A,#34HMOVX @DPTR,A(2)从8279芯片的初始化语句中,判断8279芯片的工作时钟频率是多少?答:12MHZ / 20 (mhz)(3)以下两条语句是为R0、R7赋初值,请回答R0在程序中的作用是什么?其初值为什么是“39H”?R7在程序中的作用又是什么?其初值为什么是“06H”?MOV R0, #39HMOV R7, #06H答:R0的作用是将39H单元置0。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验八查表程序设计一、实验目的1.进一步熟悉MCS-51指令系统和汇编语言程序设计。
2.学会用MOVC指令编写查表程序。
二、实验内容1.设计并调试一个查平方表的程序,其功能为应用查表指令MOVC A,@A+PC,求累加器A中数的平方值,结果平方值送A。
要求待查的(A)≤15。
2.设计并调试一个根据电压值查与其对应的温度值的查表程序,其功能为应用查表指令MOVC A,@A+DPTR,求(A)中电压值对应的温度值,将温度值送R2R3(温度值为二字节的压缩BCD码),电压值的范围为(A)≤0FFH。
实验程序参考框图如3-8所示。
三、实验步骤1.键入程序和预定表后;2.通过修改自变量参数启动并调试程序,直至正确为止。
3.边调试边体会用PC或DPTR作指针查表的区别。
四、实验报告要求根据实验内容和程序参考流程,编出所需查表程序,列出实验程序清单。
五、思考题1.当表的长度〉255个字节时应选哪一条指令查表?答:当表的长度〉255个字节时应选“MOVC A,@A+DPTR”指令查表,并且需要对DPH、DPL进行运算处理,求出表目地址,再用“MOVC A,@A+DPTR”指令查表。
2.用PC指针查表编程时应注意什么?答:应先用传送指令把所查数据的项数送入累加器A,并用“ADD A,#data”对A进行修正data值等于查表指令和数据表格之间的字节数,然后用“MOVC A,@A+PC”查表,同时用PC指针查表的表的范围不能大于255个字节。
六、参考程序清单1.求平方值查表程序:ORG 0000HADD A,#02HMOVC A,@A+PCSJMP $DB 0,1,4,9,16,25 36,49DB 64,81,100,121,144,169,196,225END本程序实现通过查表得A累加器中数的平方值并将结果送A,根据A中数值采用基址加变址方法找到所查数的地址得所对应的平方数。
例:当(A)=5时,执行过程如下:D:0XE0(A)PC指针 ORG 0000H 05HC:0X0000 ADD A,#02H 07HC:0X0002 MOVC A,@A+PC 19H ;A+PC=A(10),查表的19H(25) C:0X0003 SJMP $C:0X0005 DB 0,1,4,9,16,25 36,49DB 64,81,100,121,144,169,196,225END2.测量温度查表程序:双字节查表程序刘程序如图3-8所示:双字节查表参考程序清单:ORG 0000HMOV DPTR,#TABMOV R0,AADD A,R0MOV F0,CADD A,DPLMOV DPL,ACLR AADDC A,DPHMOV C,F0ADDC A,#0MOV DPH,ACLR AMOVC A,@A+DPTR ;查第一个字节MOV R2,ACLR AINC DPTRMOVC A,@A+DPTR ;查第二个字节MOV R3,ASJMP $TAB:DW 0100H,0110H,0120H,0130H,0140H,0150H,0160H ;温度表END本程序实现根据A中电压查表中与之对应的温度值,表中温度均为2字节故(A)*2+DPTR(表首地址)即可查的对应温度值。
例:温度表如上,当电压为3时执行过程如下:DPTRPC 指针A(D:0X0E0) DPH DPL R2(D:0X02) R3(D:0X03)C:0X0000 ORG 0000H 03HC:0X0000 MOV DPTR,#TAB 00H 1EHC:0X0003 CLR CC:0X0004 MOV R0,AC:0X0005 ADD A,R0 06HC:0X0006 MOV F0,CC:0X0008 ADD A,DPL 24HC:0X000A MOV DPL,A 00H 24HC:0X000C CLR A 00HC:0X000D ADDC A,DPH 00HC:0X000F MOV C,F0C:0X0011 ADDC A,#0 00HC:0X0013 MOV DPH,AC:0X0015 CLR AC:0X0016 MOVC A,@A+DPTR 01HC:0X0017 MOV R2,A 01HC:0X0018 CLR A 00HC:0X0019 INC DPTR 00H 25HC:0X001A MOVC A,@A+DPTR 30HC:0X001B MOV R3,A 30HC:0X001C SJMP $ (R2)=01H,(R3)=30H,电压为3时对应温度为0130H。
C:0X001E TAB:DW0100H,0110H,0120H,0130H,0140H,0150H,0160HEND实验九散转程序设计一、实验目的1.进一步熟悉MCS-51指令系统和汇编语言程序设计。
2.学会用三种不同的方法设计散转程序,并掌握它们的区别。
二、实验内容设计并调试一个程序,其功能为根据(20H)的值i (i≤7)取相应的处理程序P i的入口地址并转移到程序P i,P i的处理程序的功能为(Ri)+1→(Ri),[(20H)+1]^7 (20H),再重复地根据(20H)散转。
参考程序框图如图3-9所示:三、实验步骤1.输入编好的程序,汇编成功;2.调试程序,使用修改寄存器的方法,使R0—R7初值为0,然后启动系统,带断点运行,运行一个循环后检查运行结果,观察R0—R7是否依次计数,排除程序中错误,直至R0—R7同步计数为止。
四、实验报告要求1.列出根据流程图编写的程序清单,写出程序执行的结果。
2.采用另外两种不同的方法编写程序,列出调试通过的程序清单。
五、参考程序清单散转程序清单:请将程序补充完整后运行。
ORG 0000HMOV 20H,#00HTB0: MOV DPTR,#TABLMOV A, 20HADD A,20HMOV F0,CADD A,DPLMOV DPL,ACLR AADDC A,#0DPHMOV C,F0ADDC A,#0MOV DPH,AMOV A, #00HJMP @ A+DPTRTABL: AJMP PR0AJMP PR1AJMP PR2AJMP PR3AJMP PR4AJMP PR5AJMP PR6AJMP PR7PR0: INC R0LJMP PRPR1: INC R1LJMP PRPR2: INC R2LJMP PRPR3: INC R3LJMP PRPR4: INC R4LJMP PRPR5: INC R5LJMP PRPR6: INC R6LJMP PRPR7: INC R7PR: MOV A, 20HINC AANL A,# 07HMOV 20H,ALJMP TB0SJMP $END本程序为散转程序,当20H中为0时程序执行结果如下: DPTR PC 指针 ORG 0000H D:0XEO(A) D:0X00(R0) D:0X20(20H) DPH DPL C:0X0000 MOV 20H,#00H 00H 00HC:0X0003 TB0: MOV DPTR,#TABL 00 1CH C:0X0006 MOV A, 20H 00HC:0X0008 ADD A,20H 00HC:0X000A MOV F0,CC:0X000C ADD A,DPL 1CH 00 1CH C:0X000E MOV DPL,A 00 1CH C:0X0010 CLR AC:0X0011 ADDC A,#DPH 00 1CH C:0X0013 MOV C,F0C:0X0015 ADDC A,#0 1CHC:0X0017 MOV DPH,A 00 1CH C:0X0019 MOV A, #00H 00HC:0X001B JMP @ A+DPTR ;跳到TABLC:0X001C TABL: AJMP PR0 ;跳到PR0AJMP PR1AJMP PR2AJMP PR3AJMP PR4AJMP PR5AJMP PR6AJMP PR7C:0X002C PR0: INC R0 01H C:0X002D LJMP PR ;跳到PRPR1: INC R1LJMP PRPR2: INC R2LJMP PRPR3: INC R3LJMP PRPR4: INC R4LJMP PRPR5: INC R5LJMP PRPR6: INC R6LJMP PRPR7: INC R7C:0X004C PR: MOV A, 20H 00HC:0X004E INC A 01HC:0X004F ANL A,# 07H 01HC:0X0051 MOV 20H,A 01H 01HC:0X0053 LJMP TB0 ;跳到TB0循环执行SJMP $END循环7次后执行结果如下图:另两种方法程序如下:ORG 0000HMOV 20H,#00H TB0: MOV DPTR,#TABLMOV A, 20HADD A,20HJNC TB1TB1: JMP @ A+DPTRTABL: AJMP PR0AJMP PR1AJMP PR2AJMP PR3AJMP PR4AJMP PR5AJMP PR6AJMP PR7PR0: INC R0LJMP PRPR1: INC R1LJMP PRPR2: INC R2LJMP PRPR3: INC R3LJMP PRPR4: INC R4LJMP PRPR5: INC R5LJMP PRPR6: INC R6LJMP PRPR7: INC R7PR: MOV A, 20HINC AANL A,# 07HMOV 20H,ALJMP TB0SJMP $ENDORG 0000HMOV 20H,#00HTB0: MOV DPTR,#TABLMOVC A,@A+DPTRJMP @ A+DPTRTABL: DB PR0-TABLDB PR1-TABLDB PR2-TABLDB PR3-TABLDB PR4-TABLDB PR5-TABLDB PR6-TABLDB PR7-TABLPR0: INC R0LJMP PRPR1: INC R1LJMP PRPR2: INC R2LJMP PRPR3: INC R3LJMP PRPR4: INC R4LJMP PRPR5: INC R5LJMP PRPR6: INC R6LJMP PRPR7: INC R7PR: MOV A, 20HINC AANL A,# 07HMOV 20H,ALJMP TB0SJMP $END实验十子程序设计一、实验目的1.进一步熟悉MCS-51指令系统和汇编语言程序设计。
2.掌握子程序设计及参数传递的方法。
3.掌握子程序调用与返回时堆栈的变化与作用。
二、实验内容1.根据参考流程框图2-7,使用工作寄存器或累加器来传递参数的方法把入口参数放到累加器A中,然后将累加器中的一个十六进制数的ASCⅡ字符转换为一位十六进制数存放于A。