微机原理大作业

合集下载

微机原理程序设计大作业-2011

微机原理程序设计大作业-2011

微机原理与程序设计大作业----汇编语言程序设计方法1. 试编写一个程序,要求能从键盘接收一个个位数N,然后响铃N次(响铃的ASCⅡ码为07)。

2. 从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并将计数值显示在屏幕上。

3. 试编写一个程序,要求比较数组ARRAY中的三个16位补码数,并根据比较结果在屏幕上显示如下信息:(1) 如果三个数都不相等则显示0;(2) 如果三个数有二个相等则显示1;(3) 如果三个数都相等则显示2。

4. 从键盘输入一系列字符(以回车符结束),并按字母、数字及其它字符分类计数,最后显示出这三类计数结果。

5. 假设已经编制好5个歌曲程序,它们的段地址和偏移地址存放在数据段的跳转表SINGLIST中,试编制程序,根据从键盘输入的歌曲编号1~5,转去执行五个歌曲程序中的一个。

6. 试编制一个程序,把AX中存放的16进制数转换为ASCII码,并将对应的ASCII码依次存放在MEM数组中的四个字节中。

例如:当(AX)= 2A49H时,程序执行完后,MEM中的四个字节的内容为39H,34H,41H,32H。

7. 设有10个学生的成绩分别是76,69,84,90,73,88,89,63,100,80分,试编制一个子程序统计60~69分,70~79分,80~89分,90~99分及100分的人数,放在S6,S7,S8,S9和S10单元中。

8. 编写一个子程序嵌套结构的程序模块,分别从键盘输入姓名及8个字符的电话号码,并以一定的格式显示出来。

主程序TELIST:∙显示提示符INPUT NAME:;∙调用子程序INPUT_NAME输入姓名;∙显示提示符INPUT A TELEPHONE NUMBER:;∙调用子程序INPUT_PHONE输入电话号码;∙调用子程序PRINT_LINE显示姓名及电话号码。

子程序INPUT_NAME:∙调用键盘输入子程序GET_CHAR,把输入的姓名放在INBUF缓冲区中;∙把INBUF中的项目移入输出行OUT_NAME中。

南京邮电大学微机原理作业

南京邮电大学微机原理作业
(由题意可知,使用的是从8259的IR1中断,即用户中断,中断类型为71H或者0AH)
斜体下划线部分可跳过
用户定义的中断服务程序有两个设计方法:
①定义用户中断服务程序为“71H型”
②定义用户中断服务程序为“0AH型”
用户中断服务程序结束
①若用户中断定义为0AH型,服务程序结束前只向主8259送结束命令
5.用系统机串行口采用中断方式完成字符发送和接收,编程时应采取哪些措施?
答:⑴中断允许寄存器相应位置1
⑵MODEM控制寄存器 ,即 打通8250的中断请求通道。
⑶8259相应中断屏蔽位置0(主8259 、 )— 8259
⑷CPU处于开中断(STI)— CPU
6.A、B两台PC机利用主串口进行点-点单工通信(不用联络线),发送采用查询方式,接收采用中断方式。一帧字符包含7个数据位,1个停止位,1个校验位,通信速率为4800波特(分频系数为0018H)。
STI;开中断
SCAN:MOVAH, 01H;设置功能号
INT16H;有键入?
JZSCAN;否循环
CALLRESET;恢复现场
MOVAH, 4CH
INT21H
;--------------------------------------
SERVICEPROC
PUSHA
PUSHDS;保护现场
MOVAX, DATA
MESGDB'Welcome!','$';显示的字符串
DATAENDS
CODESEGMENTUSE16
ASSUMECS:CODE, DS:DATA
BEG:MOVAX, DATA
MOVDS, AX
CLI;关中断
CALLI8259;8259初始化

微机原理作业及参考答案

微机原理作业及参考答案

第一章计算机基础(P32)1-1电子管,晶体管,中小规模集成电路、大规模、超大规模集成电路。

1-2把CPU和一组称为寄存器(Registers)的特殊存储器集成在一片大规模集成电路或超大规模集成电路封装之中,这个器件才被称为微处理器。

以微处理器为核心,配上由大规模集成电路制作的只读存储器(ROM)、读写存储器(RAM)、输入/输出、接口电路及系统总线等所组成的计算机,称为微型计算机。

微型计算机系统是微型计算机配置相应的系统软件,应用软件及外部设备等.1-3写出下列机器数的真值:(1)01101110 (2)10001101(3)01011001 (4)11001110答案:(1)+110 (2)-13(原码) -114(反码)-115(补码)(3)+89 (4)-78(原码)-49(反码)-50(补码)1-4写出下列二进制数的原码、反码和补码(设字长为8位):(1)+010111 (2)+101011(3)-101000 (4)-111111答案:(1)[x]原=00010111 [x]反= 00010111 [x]补= 00010111(2)[x]原=00101011 [x]反= 00101011 [x]补= 00101011(3)[x]原=10101000 [x]反= 11010111 [x]补= 11011000(4)[x]原=10111111 [x]反= 11000000 [x]补=110000011-5 当下列各二进制数分别代表原码,反码,和补码时,其等效的十进制数值为多少?(1)00001110 表示原码14,反码14,表示补码为14(2)11111111 表示原码-127,反码-0,表示补码为-1(3)10000000 表示原码-0,反码-127,表示补码为-128(4)10000001 表示原码-1,反码-126,表示补码为-1271-6 已知x1=+0010100,y1=+0100001,x2=-0010100,y2=-0100001,试计算下列各式。

微机原理K60大作业

微机原理K60大作业

多功能电子时钟系统1、显示时间24小时制,可调时间,按*键后两位分钟数闪,表示可以调节(0键+,#键-),再按*键时钟闪,再次按下则表示时间调整完毕,2、Key2按下之后显示闹钟界面,同样可以调节,闹钟用LED1示意蜂鸣器强度,可以通过电位器调节。

调节时假设闹钟响(灯亮);再按key1回到时钟界面;当前时间与闹钟设置时间一样时,闹钟响(LED1亮)1分钟结束后熄灭。

3、Key3按下之后进入秒表界面,按1键开始/暂停,2键停止;3键返回时钟界面4、时间快捷修改法:Uart2电脑发给K60“12.12.12”可以精确修改时间到秒,同时显示修改后时间及当前闹钟设置值。

5、初始时间12.12.12,初始闹钟00.00,初始闹钟功能关闭,按下闹钟设置键(key2)闹钟功能开启;思路:1、Gpio :闹钟(LED1)(8)、时间LED2、(8+4)、uart2、按键1、2、3+闪+加+减2、按键:按键1、2、3+闪+加+减3、Uart2发送给电脑时间,电脑可以发送时间。

4、ADC电位器5、MCG时钟6、PIT0=1s,PIT1=5ms,PIT2闪7、Irq中断方式代码:#include"MK60D10.h"#include"adc.h"#include"irq.h"#include"xianshi.h"#include"uart.h"#include"xianshi.h"int shizhong=12,fenzhong=12,miaozhong=0;float voltage=0;int s[6]={0},n[4]={0};unsigned int table[10]={0x3F,0x06,0x5B,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned int ptb=0;unsigned int miaobiaom=0,miaobiaoms=0,m[4]={0};//Ãë±íunsigned char chs[6]={0},chn[4]={0};//²¢ËÍʱ¼äunsigned int i=0,j=0,ii=0;unsigned int key1sta=1,key2sta=1,key3sta=1,temp1,temp2,temp3,N=0;//pwmint pwm;//fasong¼Æʱint fasong1s=0;//juzhengjianpanunsigned int bKeyTest=0;int panduan1=0;int jishu=0,panduanshan=0;//ÉÁÁÁvoid pit(void){SIM->SCGC6|=1<<23;PIT->MCR&=~0X2;//¶¨Ê±1sPIT->CHANNEL[0].LDVAL=48000000-1;PIT->CHANNEL[0].TCTRL|=0X03;enable_irq(68);//10MSPIT->CHANNEL[1].LDVAL=480000-1;PIT->CHANNEL[1].TCTRL|=0X03;enable_irq(69);//5msPIT->CHANNEL[2].LDVAL=120000-1;PIT->CHANNEL[2].TCTRL|=0X03;enable_irq(70);//0.2MSPIT->CHANNEL[3].LDVAL=9600-1;PIT->CHANNEL[3].TCTRL|=0X03;enable_irq(71);}void PIT0_IRQHandler(void ){PIT->CHANNEL[0].TFLG|=0x1u;//mÃë¼Æʱmiaozhong++;if(miaozhong>59){fenzhong++;miaozhong=0;}if(fenzhong>59){shizhong++;fenzhong=0;}if(fenzhong<0)fenzhong=59;if(shizhong>23){shizhong=0;}if(shizhong<0)shizhong=23;//Ãë¼Æʱ½áÊøs[0]=shizhong/10;s[1]=shizhong%10;s[2]=fenzhong/10;s[3]=fenzhong%10;s[4]=miaozhong/10;s[5]=miaozhong%10;n[0]=naozhongs/10;n[1]=naozhongs%10;n[2]=naozhongf/10;n[3]=naozhongf%10;for(i=0;i<6;i++)chs[i]=s[i]+'0';for(i=0;i<5;i++)chn[i]=n[i]+'0';if(panduan1){//²¢ËÍʱ¼äuart2_putstring("the time is ");for(i=0,j=0;i<6;i++,j++){if(j==2||j==4) uart2_putchar('-');uart2_putchar(chs[i]);}uart2_putstring(" / the alarm clock is ");for(i=0,j=0;i<4;i++,j++){if(j==2) u art2_putchar('-');uart2_putchar(chn[i]);}uart2_putstring("\n");//²¢ËÍÍê³Épanduan1=0;}}void PIT1_IRQHandler(void ) //10ms{PIT->CHANNEL[1].TFLG|=0x1u;if(model==3&&model3_1){miaobiaoms++;if(miaobiaoms==100){miaobiaom++;miaobiaoms=0;}}m[0]=miaobiaom/10;m[1]=miaobiaom%10;m[2]=miaobiaoms/10;m[3]=miaobiaoms%10;//°´¼üN++;if(N%5==0){TestKey();//juzhengjianpan}if(N%2==0){temp1=PTE->PDIR;temp1&=(1<<26);if((key1sta&&(!temp1))) //ʱÖÓKEY1{if(model!=3) model=1;else {model3_1=~model3_1;}}if(temp1) key1sta=1;else key1sta=0;//temp2=PTE->PDIR;temp2&=(1<<25);if(key2sta&&(!temp2)) //ÄÖÖÓ{if(model!=3) { model=2;naozhongkai=1;}else {model3_2=0;model3_1=0;}if(model3_2==0){miaobiaom=0;miaobiaoms=0;model3_2=1;}}if(temp2) key2sta=1;else key2sta=0;//temp3=PTE->PDIR;temp3&=(1<<24);if(key3sta&&(!temp3)) //Ãë±íKEY3{if(model!=3){model=3;model3_1=0;model3_2=1;}else {model=1; }}if(temp3) key3sta=1;else key3sta=0;}//uart²¢ËÍʱ¼äif(panduan){shizhong=(UART2_RecBuf[0]-48)*10+UART2_RecBuf[1]-48;fenzhong=(UART2_RecBuf[3]-48)*10+UART2_RecBuf[4]-48;miaozhong=(UART2_RecBuf[6]-48)*10+UART2_RecBuf[7]-48-1;panduan=0;panduan1=1;}}void PIT2_IRQHandler(void ) //2.5ms4¶ÎÊýÂë¹ÜÏÔʾ{PIT->CHANNEL[2].TFLG|=0x1u;voltage=3.3*adc0_convert()/4095;naozhong();PTB->PDOR&=~0Xf;PTB->PDOR|=1<<ptb;PTB->PDOR|=0xff<<16;if(model==1){if(ptb==0&&panduanshan!=2) PTB->PDOR&=~(table[s[0]]<<16);if(ptb==1&&panduanshan!=2) PTB->PDOR&=~((table[s[1]]|(0x01<<7))<<16);if(ptb==2&&panduanshan!=1) PTB->PDOR&=~(table[s[2]]<<16);if(ptb==3&&panduanshan!=1) PTB->PDOR&=~(table[s[3]]<<16);}if(model==2){if(ptb==0&&panduanshan!=2) PTB->PDOR&=~(table[n[0]]<<16);if(ptb==1&&panduanshan!=2) PTB->PDOR&=~((table[n[1]]|(0x01<<7))<<16);if(ptb==2&&panduanshan!=1) PTB->PDOR&=~(table[n[2]]<<16);if(ptb==3&&panduanshan!=1) PTB->PDOR&=~(table[n[3]]<<16);}if(model==3){if(ptb==0&&panduanshan!=2) { PTB->PDOR&=~(table[m[0]]<<16); }if(ptb==1&&panduanshan!=2) PTB->PDOR&=~((table[m[1]]|(0x01<<7))<<16);if(ptb==2&&panduanshan!=1) PTB->PDOR&=~(table[m[2]]<<16);if(ptb==3&&panduanshan!=1) PTB->PDOR&=~(table[m[3]]<<16);}ptb++;if(tiaozheng1!=0){if(jishu>=9)if(ptb==2||ptb==3){if(tiaozheng1%2!=0) panduanshan=1;else panduanshan=2;if(jishu>=18) {jishu=0;panduanshan=0;}}}else panduanshan=0;if(ptb>3) {ptb=0;jishu++;}}void PIT3_IRQHandler(void )//ÄÖÖÓÏÔʾ{pwm=voltage*100/3.3;PIT->CHANNEL[3].TFLG|=0x1u;if((naozhongL==1||model==2)&&model!=3){if(ii<pwm) PTC->PDOR&=~0xff;else PTC->PDOR|=0xff;ii++;if(ii==100) ii=0;}else PTC->PDOR|=0xff;}。

微机原理课程设计大作业

微机原理课程设计大作业

微机原理课程设计大作业一、课程目标知识目标:1. 让学生掌握微机原理的基本知识,包括计算机硬件组成、工作原理及性能指标。

2. 帮助学生理解并掌握汇编语言编程,能运用汇编语言实现基本的输入输出功能。

3. 让学生了解微机系统中的中断原理及其应用。

技能目标:1. 培养学生运用微机原理知识进行实际电路设计和分析的能力。

2. 培养学生独立完成汇编语言编程,实现微机控制相关功能的能力。

3. 提高学生运用所学知识解决实际问题的能力。

情感态度价值观目标:1. 培养学生对微机原理课程的兴趣,激发学生学习热情,增强学习主动性。

2. 培养学生具备团队合作精神,学会在团队中分工合作、共同解决问题。

3. 引导学生关注微机原理在科技发展中的应用,认识其在社会发展中的重要性。

课程性质:本课程为微机原理课程的实践环节,以大作业的形式进行,旨在培养学生的实践能力和创新能力。

学生特点:学生已具备一定的微机原理知识,具有一定的汇编语言编程基础,但实践能力有待提高。

教学要求:结合学生特点,注重理论与实践相结合,强调在实践中掌握知识,提高学生的实际操作能力和解决问题的能力。

将课程目标分解为具体的学习成果,以便于后续教学设计和评估。

二、教学内容本课程教学内容主要包括以下三个方面:1. 微机原理基础知识回顾:- 计算机硬件系统组成与工作原理- 微处理器结构及性能指标- 存储器层次结构与分类- 指令系统与寻址方式2. 汇编语言编程与实践:- 汇编语言基本语法与指令- 常用伪指令与宏指令- 程序结构与流程控制- 中断处理与中断服务程序编写3. 微机系统设计与分析:- 微机系统设计方法与步骤- 基本I/O接口电路设计- 中断控制器设计与实现- 微机控制系统综合设计教学大纲安排如下:1. 第一周:微机原理基础知识回顾2. 第二周:汇编语言编程与实践3. 第三周:微机系统设计与分析4. 第四周:大作业实践与指导教学内容与教材关联性说明:1. 教学内容与教材章节相对应,确保学生能够结合教材深入理解课程内容。

微机原理大作业

微机原理大作业

微机原理大作业本页仅作为文档页封面,使用时可以删除This document is for reference only-rar21year.March微机原理大作业基于8086最小方式系统总线完成电路设计及编程:1、扩展16K字节的ROM存储器,起始地址为:0x10000;2、扩展16K字节的RAM存储器,起始地址为:0xF0000;3、设计一片8259中断控制器,端口地址分别为:0x300,0x302;4、设计一片8253定时控制器,端口地址分别为:0x320,0x322,x324,0x326;5、设计一片8255并行接口,端口地址分别为:0x221,0x223,x225,0x227;6、设计外部连接电路实现通过8253每一秒钟产生周期中断信号,并利用该信号通过8259向8086处理器发送中断请求,利用该中断同步,8086处理器周期的从8255并行接口输入8位开关量的值,并存入到RAM的某个地址中。

7、请编写实现上述功能的完整的汇编程序代码,包括主程序及中断服务程序,在主程序中需要完成中断向量表的初始化(假定8259采用8086的30号中断进行同步,中断服务程序段的标号为:INT30_ISR),8259,8253(假定外部能有的时钟源为1MHz)及8255的初始化;在中断服务程序实现从8255中输入开关量并存储到RAM的某个地址中。

MODEL SMALL.DATACNT DB 0000HINT-TBL SEGMENT AT 0 ;中断向量表ORG 30*4DD INT30_ISRINT-TBL ENDAPORT EQU 221H ;8255地址BPURT EQU 223HCPURT EQU 225HCONTR EQU 227HTIME_1 EQU 320H ;8253地址TIME_2 EQU 322HTIME_3 EQU 324HCONTR_8253 EQU 326HMPORT0 EQU 300H ;8259地址MPORT1 EQU 302HRAM1 EQU 10000HRAM2 EQU F0000H.CODE.STARTUPMOV AL,90H ;定义8255A工作方式A组方式0输入MOV DX,CONTROUT DX,ALMOV AL,14H ;定义8253计数器0工作方式方式2MOV DX,CONTR_8253OUT DX,ALMOV AL,54H ;定义8253计数器1工作方式方式2 MOV DX,CONTR_8253OUT DX,ALMOV AL,94H ;定义8253计数器2工作方式方式2 MOV DX,CONTR_8253OUT DX,ALMOV AL,64H ;将外部能有的时钟源为1MHz转换为1s MOV DX,TIME_1OUT DX,ALMOV AL,64HMOV DX,TIME_2OUT DX,ALMOV AL,64HMOV DX,TIME_3OUT DX,ALLOOP1: JMP LOOP2 ;主程序进入无限循环,等中断LOOP2: JMP LOOP1.exit ;中断程序部分INT30_ISR:CLT ;8259A关中断MOV AL, 13H ;ICW1OUT MPORT0, ALMOV AL, 0C7H ;ICW2OUT MPORT1, ALMOV AL, 01HOUT MPORT1,ALMOV DX,APORTIN AL,DXCMP CNT,4000HJB CASE1CMP CNT,8000HJB CASE2JMP CASE3CASE1 MOV DX,CNT+RAM1 ;第一块RAM未写满OUT DX,ALJMP CNT_INCCASE2 MOV DX,CNT+RAM2-40000H ;第一块RAM写满,第二款RAM未写满OUT DX,ALJMP CNT_INCCASE3 MOV DX,RAM1 ;两块RAM写满OUT DX,ALMOV CNT,0JMP CNT_INCCNT_INC: INC CNTMOV DX,RAM1OUT DX,ALSTI ;开中断END。

微原大作业

微原大作业

微机原理与接口技术 ----大作业2016.6.24大作业:微处理器系统应用设计ARM微处理器系统32位数据总线(D31-D0)、32位地址总线(A31-A0)和控制线RD、WE、0BE和IRQ0。

要求存储器容BE、1BE、2BE、3量为1GB,其中ROM存储区512MB,从0x00000000开始的连续存储区,采用128MB ROM芯片;RAM存储区512MB,采用128MB SRAM 芯片,从0x20000000开始的连续存储区。

SRAM和ROM芯片通过总线与ARM微处理器系统相连;I/O接口为一片8282锁存器、一片七段数码管(共阴极)、一个按键,如下图所示;数码管通过8282锁存器与PA口相连,按键与ARM微处理器IRQ0相连。

每按一次键,通过中断方式在数码管显示其加1后的值(显示值为9时加1后显示0)。

数码管初值为本人学号的最后一位。

编写完成上述处理程序。

处理程序中采用子程序进行数码显示,中断方式实现按键处理,中断服务程序包括显示子程序。

IRQ0图8282锁存器接口图0-9数码管显示字样:要求:1、给出设计的RAM和ROM地址范围及必要说明;2、画出采用基本逻辑门(与、或、非门类)设计译码电路的微处理器总线与存储器连接图;3、画出完成上述处理程序流程图,并做必要的说明;4、程序从地址0x400处启动,给出完整处理程序清单,并有必要的注释。

一.ROM和RAM设计ROM区芯片个数:512M/128M=4片起始地址:0x00000000终止地址:0x1FFFFFFFROM芯片地址线:A[0:26]RAM区芯片个数:512M/128M=4片起始地址:0x20000000终止地址:0x3FFFFFFFRAM 芯片地址线:A[0:26]128MB = 134217728 B = B因此需要27位的地址总线访问存储器地址总线分配: A0~A26 作为存储器地址 A29 A28 A27 作为片选信号272二.电路图设计A29A30A31D[0:31]三.处理程序流程图四.处理程序清单Startup.s------------------------------------------------AREA RESET,CODEEXPORT __VectorsEXPORT Reset_Handler__VectorsDCD __initial_spDCD Reset_HandlerSPACE 14*4SPACE 6*4DCD EXTI0_HandlerReset_Handler PROCIMPORT EX4_EXTIldr r1,=EX4_EXTIbx r1B .ENDPEXTI0_Handler PROCIMPORT EXTI0_Cldr r1,=EXTI0_Cbx r1BX LRENDPAREA STACK,DATASPACE 0x100__initial_spENDMyhead.h---------------------------------------------------------------------- struct _RCC{IntCR;int CFGR;int CIR;int APB2RSTR;int APB1RSTR;int AHBENR;int APB2ENR;int APB1ENR;int BDCR;int CSR;};#define RCC ((volatile struct _RCC *)0x40021000)struct _GPIO{int CRL;int CRH;int IDR;int ODR;int BSRR;};#define GPIOB ((volatile struct _GPIO *)0x40010C00) #define GPIOA ((volatile struct _GPIO *)0x40010800)struct _USART{int SR;int DR;int BRR;int CR1;int CR2;int CR3;};#define USART1 ((volatile struct _USART *)0x40013800)struct _NVIC{int ISER[8];int rsv0[24];int ICER[8];int rsv1[24];int ISPR[8];int rsv2[24];int ICPR[8];int rsv3[24];int IABR[8];int rsv4[56];char IPR[240];int rsv5[644];int STIR;};#define NVIC ((volatile struct _NVIC *)0xE000E100)struct _BTIM{int CR1;int CR2;int rsv0;int DIER;int SR;int rsv1[4];int CNT;int PSC;int ARR;};#define TIM1 ((volatile struct _BTIM *)0x40012C00)struct _DMA_CH{int CCR;int CNDTR;int CPAR;int CMAR;int rsv;};struct _DMA{int ISR;int IFCR;struct _DMA_CH CH[7];};#define DMA1 ((volatile struct _DMA *)0x40020000) #define DMA2 ((volatile struct _DMA *)0x40020400)struct _AFIO{int EVCR;int MAPR;int EXTICR[4];int RESERVED0;int MAPR2;};#define AFIO ((volatile struct _AFIO *) 0x40010000)struct _EXTI{intIMR;int EMR;int RTSR;int FTSR;int SWIER;int PR;};#define EXTI ((volatile struct _EXTI *) 0x40010400 )Myfunction.c--------------------------------------------------------------------------------------------------- #include "Myhead.h"void RCC_Init(){RCC->APB2ENR|=((1<<3)|(1<<2)|(1<<0)); //PB PA AFIOGPIOB->CRL=0x88008; //设置PE3 PE4}void LED_Init(){GPIOA->CRL=0x33333333; //设置输出GPIOA->ODR|=(1<<5); //首先让数码管熄灭}void KEY_Init(){GPIOB->CRL=0x8; //按键设置GPIOB->ODR=0;}void AFIO_Init(){AFIO->EXTICR[0]=0x1; //PB0 TO EXTI0}void EXTI_Init(){EXTI->IMR=0x1; // EXTI0 使能EXTI->FTSR=0x1; // EXTI0 增加}void EXTI_Clear(){EXTI->PR=0x1; // EXTI0 除能}void NVIC_Init(){NVIC->ISER[0]=0xFFFFFFFF; // EXTI0 使能}void LED_Start(){GPIOA->ODR = 0xB6; //显示我的号尾数5 }void LED_On(){int t;t=GPIOA->ODR;if(t==0xFC) GPIOA->ODR=0x60; //0->1if(t==0x60) GPIOA->ODR=0xDA; //1->2if(t==0xDA) GPIOA->ODR=0xF2; //2->3if(t==0xF2) GPIOA->ODR=0x66; //3->4if(t==0x66) GPIOA->ODR=0xB6; //4->5if(t==0xB6) GPIOA->ODR=0xBE; //5->6if(t==0xBE) GPIOA->ODR=0xE0; //6->7if(t==0xE0) GPIOA->ODR=0xFE; //7->8if(t==0xFE) GPIOA->ODR=0xF6; //8->9if(t==0xF6) GPIOA->ODR=0xFC; //9->0}void EXTI0_C(){LED_On();}int EX4_EXTI(){RCC_Init();LED_Init();KEY_Init();AFIO_Init();EXTI_Init();NVIC_Init();for(;;){}return 0; }。

8086微机原理作业

8086微机原理作业

8086微机原理作业作业要求:1. 我把这学期所有作业都发给大家,大家只要完成每周老师讲到的地方即可。

作业不是按次数做,只要是讲过的都要写。

2. 每周一上午精密仪器课前将作业交至我这边,下午微机课我交给老师。

3. 要求准备两本作业本,老师要求必须是本子,不能交纸片。

第一次作业:2.1 8080/8086CPU指令队列的作用是什么?,为什么指令队列可以提高微处理器的执行速度?2.2 在存储器中存放的数据如题图2.1所示。

试读出75422H和75424H字节单元的内容是什么?读出75422H和75424H字单元的内容是什么?2.3 段地址和偏移地址为1000H:117AH的存储单元的物理地址是什么?而1109H:00EAH或1025H:052AH的存储单元的物理地址又是什么?这说明了什么问题?2.4 在存储器分段结构中,每个段区最大可占用多少地址范围,为什么?如果在8086的机器中,若段间不允许重叠,那么最多可分多少个段区?2.5 如果从存储器的2000H地址开始分配段区,要求数据段占用lKB范围,堆栈段占用512B范围,代码段占用8KB范围。

按数据段、堆栈段和代码段的顺序连续分段,试画出存储器分段地址分配示意图,写明各段寄存器的内容? 2.6 简述8086 CPU总线读周期中的工作时序,并说明READY引脚作用?第二次作业:1、指出下列指令的源和目标操作数的寻址方式:①MOV ARRAY,BX②ADC CX,ALPHA[BX][SI]③AND GAMMA[DI],11011000B④INC BL⑤TEST ES:[SI],DX⑥SBB SI,[BP]2、现有DS;2000H,BX=0100H,SI=0002H,(20100H);12H,(20101H)=34H,(20102H)=56H,(20103H)=78H,(21200H)=2AH,(21201H)=4CH,(21202H)=0B7H,(21203H)=65H,试说明下列各条指令执行完后Ax寄存器的内容。

微机原理作业题

微机原理作业题

第一章微型计算机概述1,名词解释(1)微处理器、微型计算机、微型计算机系统。

(2)个人计算机、单板机、单片机。

(3)总线、微机总线、地址总线(AB)、数据总线(DB)、控制总线(CB)。

(4)总线标准。

2,简答题(1)微处理器、微型计算机及微型计算机系统之间有什么区别和联系?(2)微机系统中采用总线结构有哪些优点?(3)简述微机系统中,片总线、内总线和外总线的区别和关系。

(4)什么叫冯·诺依曼计算机?这种计算机的程序运行是由指令流驱动的还是由数据流驱动的?第二章16位处理器1,简答题(1)8086的引脚信号和如何表示数据在总线上的格式?(2)8086在最大方式和最小方式下,引脚信号有什么不同?分别给出8086的最大方式和最小方式的基本配置。

(3)从芯片上的引脚看,8086与8088有什么区别?(4)试说明空闲状态的含义。

第三章微型计算机与外设的数据传输1,简答题(1)简述中断数据传送方式的工作过程及其优缺点。

(2)简述微机中常用的两种I/O端口的编址方法。

(3)简述DMA的程租传送方式和请求传送方式异同点。

(4)简述CPU对INTR的中断响应条件和中断响应过程。

(5)简述CPU对NMI的中断响应条件和中断响应过程。

(6)8086/8088CPU响应INTR中断和软件中断指令有何不同?第四章存储器和高速缓冲存储器技术1,简答题(1)简述动态RAM刷新过程和正常读/写过程的区别。

(2)简述8086CPU执行指令“MOV AX,[2001H]”访问存储器的过程。

(3)设有一个具有14位地址和8位字长的存储器,试问:A.该存储器能存储多少字节的信息?B.如果该存储器用静态RAM芯片组成,需要多少个芯片?C.需要多少位地址用一片选?第五章串并行通信和接口技术1,简答题(1)8086/8088CPU对8251A有哪几种操作?CPU是如何控制对8251A进行不同类型的操作?(2)简述8251A工作与同步方式发送数据的过程?(3)8255A的方式0一般用于什么场合?在方式0时,如果使用联络信号(应答信号),应该怎么办?(4)简述8255A在方式1输入时的工作过程。

西安电子科技大学微机原理大作业

西安电子科技大学微机原理大作业

西安电子科技大学微机原理大作业第一次上机一、实验目的1. 熟练掌握8086/8088的各种寻址方式及应用。

2.掌握DEBUG调试程序中的一些常用命令的使用方法,为以后的实验打下基础二、实验仪器586微机 1台三、实验内容1.关于数据的寻址方式练习8086/8088 提供多种方式实现操作数寻址,大体可分为7种:a. 立即寻址b. 寄存器寻址c. 直接寻址d. 寄存器间接寻址e. 寄存器相对寻址f. 基址变址寻址g. 基址变址且相对寻址掌握8086/8088的这些寻址方式,是学习汇编语言编程的关键。

指令SRC 寻址方式SRC的地址AX 推算值AX 实际值MOV AX, CX寄存器寻址0005 0005 MOV AX, 500H 立即寻址0500 0500 MOV AX, TABLE 直接寻址1541:0004 A5A 4 A5A 4MOV AX, ES:[BX] 寄存器间接寻址 1542:0004 C5C 4 C5C4MOV AX, [BX+05H] 寄存器相对寻址 1541:0009 AAA 9 AAA 9 MOV AX,寄存器相153FB8B B8B7 MOV AX, TABLE [BX] 寄存器相对寻址 1541:0008 A9A 8 A9A8MOV AX, 07H [BX] 寄存器相对寻址 1541:000B ACA B ACA BMOV AX, [BP]寄存器间接寻址 153F :0003 B4B 3 B4B 3 MOV AX, TABLE [BP] 寄存器相对寻址 1541:0007 A8A 7 A8A 7 MOV AX, 08H [BP] 寄存器相对寻址 153F :000B BCB B BCB B MOV AX, [BP+06H] 寄存器相对寻址 153F :0009 BAB 9 BAB 9 MOV AX,寄存器相1541A7A A7A6MOV AX, [BP]+05H 寄存器相对寻址153F:0008B9B8B9B8MOV AX, ES: [SI+03H] 寄存器相对寻址1542:0005C6C5C6C5MOV AX, [DI+06H] 寄存器相对寻址1541:0007A8A7A8A7MOV AX, [DI]+05H 寄存器相对寻址1541:0006A7A6A7A6MOV AX, TABLE [SI] 寄存器相对寻址1541:0006A7A6A7A6MOV AX, [SI] 寄存器间接寻址1541:0002A3A2A3A2MOV AX, TABLE 寄存器相1541A6A A6A[DI] 对寻址:00055 5MOV AX, [SI]+05H 寄存器相对寻址1541:0007A8A7A8A7MOV AX, [BX] [DI+01H] 基址变址且相对寻址1541:0006A7A6A7A6MOV AX, [BX] [SI]+03H 基址变址且相对寻址1541:0009AAA9AAA9MOV AX, TABLE [BX] [SI] 基址变址且相对寻址1541:000AABAAABAAMOV AX, ES:[BX] [DI] 基址变址寻址1542:0005C6C5C6C5MOV AX, [BP] [DI+02H] 基址变址且相对寻址153F:0006B7B6B7B6MOV AX, TABLE 基址变址1541A9A A9A[BP] [DI] 且相对寻址:00088 8MOV AX, ES:[BP] [SI] 基址变址寻址1542:0005C6C5C6C5MOV AX, [BP] [SI+05H] 基址变址且相对寻址153F:000ABBBABBBAMOV AX, 03H [BP] [DI] 基址变址且相对寻址153F:0007B8B7B8B7MOV AX, [BP] [SI] 基址变址寻址153F:0005B6B5B6B5MOV AX, [BP+02H] [DI+03H] 基址变址且相对寻址153F:0009BAB9BAB9MOV AX, TABLE [BP+02H][DI+03H] 基址变址且相对寻址1541:000DAEADAEAD第二次上机一、实验目的1. 熟练掌握汇编语言程序设计的方法及上机步骤。

微机原理经典课后作业,考试必考

微机原理经典课后作业,考试必考

微机原理经典课后作业,考试必考课后作业第一章作业1、若AX=AF7CH,BX=BEE7H,CPU分别执行加法指令和减法指令后各状态标志位的值是什么?2、8086系统中存储器的逻辑地址和物理地址之间有什么关系?3、设段地址为4ABFH,物理地址为50000H,求有效地址是什么?4、设CS=3100H,DS=3140H,两个段的空间均为64K个单元,问两个段重叠区为多少个单元?两个段的段空间之和为多少?5、在8086系统中,已知当前SS寄存器的内容为2345H,SP的内容0100H,请说明该堆栈段在存储器中的物理地址的范围。

若当前堆栈段中已存有10个字节的数据,那么原来SP的内容是什么数值?6、如果12MHz的振荡信号接至8284时钟输入端,其输出频率接8086/8088的CLK端。

求在插入一个等待周期的情况下从内存读一个字节数据所需的最小时间。

7、现有8个字节的数据为:34H、45H、56H、67H、78H、89H、9AH、ABH,假定它们在存储器中的物理地址为400A5H~400ACH。

若当前(DS)=4002H,求这8个数据的偏移地址。

如要以最少时间读出这些数据,需要访问存储器多少次?每次读出的数据是什么?并用图示之。

8、设段寄存器CS=2400H,指令指示器IP=6F30H,此时指令的物理地址PA 是多少?指向这一物理地址的CS值和IP值是否是唯一的?9、什么叫总线周期?8086/8088系统中的总线周期由几个时钟周期组成?如果CPU的主时钟频率为25MHz,一个时钟周期是多少?一个基本总线周期是多少时间?第三章作业3-3 若80386的控制寄存器CR0中PG、PE全为1,则CPU当前所处的工作方式如何?3-5 有一个段描述符,放在局部描述符表的第12项中,该描述符的请求特权级为2,求该描述符的选择子内容。

3-6 某一个段描述符的选择子内容为0531H,请解释该选择子的含义。

3-7在段页式管理中,若允许分页,则页的大小为多少?如果一个页面首地址为86B05000H,则上一页和下一页的页面首地址各为多少?第四章作业4-3 设有关寄存器及存储单元的内容如下:(DS)=2000H,(BX)=0100H,(SI)=0010H,(21200H)=78H,(21201H)=56H,(20100H)=68H,(21110H)=ABH,(20110H)=F4H,(20111H)=CDH,(21120H)=67H 试问下列各指令执行完后,AL或AX寄存器的内容各是什么?各指令寻址方式是什么?(1) MOV AX,1200H(2) MOV AL,BL(3) MOV AX,[1200H](4) MOV AL,[BX](5) MOV AL,1010H[BX](6) MOV AX,[BX][SI](7) MOV AL,1010H[BX][SI]4-4 判断下列指令的正误,若是错误的,请说明原因。

微机原理作业参考答案

微机原理作业参考答案
DIV DIVISOR
MOV XX, AX
第四次
教材P. 69-70习题4.4-4.8中任选3题
习题4.4
MOV CL, 4
SHL AH, CL
MOV BL, 0FH
AND AL, BL
OR AH, AL
习题4.5
MOV CX, 8
MOV BL, 0
L1:
SHL AL, 1
RCR BL ,1
LOOP L1
INC SI
JLOOP:
INC BX
LOOP L1
(3)
本程序片段将求得的绝对值送数据段ABS开始的单元中
MOV BX, OFFSET BUF
MOV SI, OFFSET ABS
MOV CX, 50
L1:
MOV AL, [BX]
CMP AL ,0
JGE JLOOP
NEG AL
JLOOP:
MOV [SI], AL
在保护模式下,Pentium处理器可以直接寻址高达4GB的物理存储器。存储器的硬件空间被组织成64位的单元,每个64位的单元有8个可独立寻址的字节,这8个字节有连续的存储器地址,如下图所示。
在保护模式下,通过地址线A31~A3和字节选通信号BE7#~BE0#访问存储器,由地址线A31~A3选择64位的存储单元,由字节选通信号BE7#~BE0#选择相应的字节。
第五个时钟ads被置起有效地址b和第二个总线周期的总线状态被驱动送出wr被驱动为高电平表明为一个写周期cache被驱动为高电平表明该周期为非缓存式总线周期故第二个总线周期为非缓存式单次传送写周期
第一次
1.微型计算机系统有哪三个层次,简述其内涵及其联系与区别

2.试述冯诺依曼存储程序工作原理

微机原理作业及参考答案1

微机原理作业及参考答案1

第一次课外作业:1、微型计算机由哪5个主要部件组成?微型计算机系统包含哪些部分答:微型计算机由微处理器、存储器、输入\输出接口电路、系统总线和定时电路5个主要部件组成。

微机系统包含微型计算机、外围设备、系统软件和应用软件等部分。

2、微机总线包括哪几类总线?答:包括数据总线、地址总线和控制总线。

3、请简要描述数据总线、地址总线和控制总线的基本特点。

答:○1数据总线:在MPU和其他部件之间双向传递数据信息;○2地址总线:由MPU向其他部件单向传递地址信息;○3控制总线:双向传送控制信号,一方面MPU根据指令译码结果输出控制信号,另一方面MPU响应外部器件的请求信号。

4、CPU内部由哪几个主要功能部件构成?各自的主要作用是什么?答:1.内部寄存器阵列:用来寄存或暂存参与运算的数据;2.累加器和算术运算单元:对数据进行算术运算、逻辑运算;3.指令寄存器、指令译码器、定时及各种控制信号产生电路:把用户程序中的指令暂存,翻译并按照一定的时序发出控制信号;4.内部总线:各内部器件之间信息传递。

5、指令译码器起什么作用?答:将用户程序中的指令翻译成机器码以便计算机识别和执行。

6、请简述诺依曼计算机的工作原理(指令执行过程或计算机是如何执行一条指令的)。

答:诺依曼计算机是一个存储控制结构,其工作原理是从内存中取指令,对指令译码后得到操作码和地址,从地址中取出操作数,根据操作码对操作数进行操作。

7、CPU内部16位地址寄存器如何寻址和访问CPU外部20根地址形成的1M地址空间?答:对地址进行分段。

8、什么是段地址、什么是偏移地址?答:段地址是段起始地址的高16位值;偏移地址是段内某物理单元的实际地址相对段起始地址的偏移值。

9、CPU内部的CS段寄存器和IP(或称PC)指令寄存器有什么作用?答:CS用来识别当前代码段;IP用来存储代码段偏移地址。

10、什么是物理地址、逻辑地址、有效地址和绝对地址?答:物理地址是指物理内存中的实际地址;逻辑地址指由段基址和段内偏移地址组成的地址;有效地址是指编程时使用的地址;绝对地址是指根据存储器的管理机制将有效地址转换过来与内存空间意义对应的实际地址。

西电微机原理大作业

西电微机原理大作业

汇编语言程序设计综合实验姓名:刘发强学号:14020199044 2016年12月25日题目功能及要求题目要求编写程序实现下列5项功能,通过从键盘输入1~5进行菜单式选择:(1)按数字键“1”,完成将字符串中的小写字母变换成大写字母。

用户输入由英文大小写字母或数字0~9组成的字符串(以回车结束),变换后按下列格式在屏幕上显示:<原字符串>例如:abcdgyt0092<新字符串> ABCDGYT0092按任一键重做;按Esc键返回主菜单。

(2)按数字键“2”,完成在字符串中找最大值。

用户输入由英文大小写字母或数字0~9组成的字符串(以回车结束),找出最大值后按下列格式在屏幕上显示:<原字符串> The maximum is <最大值>.按任一键重做;按Esc键返回主菜单。

(3)按数字键“3”,完成输入数据组的排序。

用户输入一组十进制数值(小于255),然后变换成十六进制数,并按递增方式进行排序,按下列格式在屏幕上显示:<原数值串><新数值串>按任一键重做;按Esc键返回主菜单。

(4)按数字键“4”,完成时间的显示。

首先提示用户对时,即改变系统的定时器HH:MM:SS(以冒号间隔,回车结束),然后在屏幕的右上角实时显示出时间:HH:MM:SS。

按任一键重新对时;按Esc键返回主菜单。

(5)按数字键“5”,结束程序的运行,返回操作系统。

程序功能及分析:程序主干:(1)主程序:通过调用屏幕初始化子程序、光标位置设定子程序、清屏子程序、菜单显示子程序、命令解析子程序完成显示器初始化,设置光标位置,打印程序菜单列表以及用户输入提示信息,并等待用户从键盘输入1~5进行菜单选择。

用户输入错误会被要求重输。

子程序跳转利用数据段转移地址查找表实现。

从子服务退回时,重新开始上述操作。

(2)子服务一:将字符串中的小写字母转换成大写字母,并输出到屏幕上。

微机原理期末大作业

微机原理期末大作业

微机原理期末大作业——iPad设计一设计思路通过一个学期对微型计算机原理的学习,我初步掌握了微型计算机的内部构造与工作原理,学会了一些微型计算机设计方法,也对微型计算机设计产生了兴趣。

我利用本学期所学的关于微处理器及其接口设备,以及微处理器的编程语言相关知识,并利用网络资源自己设计了一个iPad 平板电脑模型。

(2010年1月27日,在美国旧金山欧巴布也那艺术中心所举行的苹果公司发布会上,传闻已久的平板电脑——iPad由首席执行官史蒂夫·乔布斯亲自发布。

iPad定位介于苹果的智能手机iPhone和笔记本电脑产品之间,通体只有四个按键,与iPhone布局一样,提供浏览互联网、收发电子邮件、观看电子书、播放音频或视频等功能。

)二设计要求要求设计出的模型理论上具有与真实iPad相仿的功能,但对使用的器材不做限制。

设计应有一个微型计算机所必需的部件,设计应构成一套完整的简单微型计算机系统。

并能够模仿真实iPad,具有显示器、触摸输入、扬声器输出、摄像头输入等功能器件。

三设计内容1、硬件系统主板系统主板采用飞思卡尔(Freescale)i.MX51 (Cortex-A8, 800MHz)的小尺寸核心主板(53mm*97mm),板载WiFi,支持3D加速,支持720P视频播放,支持两路micro Sd卡,支持USB OTG。

内部USB host 接口和UART接口,可扩展3G模块和蓝牙模块。

结构简洁,BOM成本低,量产方便。

性能参数接口描述本方案基于飞思卡尔(Freescale)i.MX51 (Cortex-A8,800MHz)的小尺寸核心主板(53mm*97mm),板载WiFi,支持3D加速,支持720P视频播放,支持两路micro Sd卡,支持USB OTG。

内部USB host接口和UART接口,可扩展3G模块和蓝牙模块。

规格参数触屏系统目前主要有几种类型的触摸屏,它们分别是:电阻式(双层),表面电容式和感应电容式,表面声波式,红外式,以及弯曲波式、有源数字转换器式和光学成像式。

微机原理作业

微机原理作业

第一次作业:1.请写出-37的原码、反码和补码。

请写出计算过程。

2. 8086 CPU 由哪两大部分组成?请分别叙述它们的功能。

3.若DS=6000H,SS=5000H,ES=4000H,SI=0100H,BX=0300H,BP=0400H,D=1200H,数据段中变量名NUM的偏移地址为0050H,试指出下列源操作数的寻址方式和物理地址是多少?(1)MOV AX,[64H](2)MOV AX,[BP](3)MOV AL,[DI](4)MOV AL,[BX+1110H](5)MOV AX,NUM[BX][DI]1.答:[-37] 原码 = 10100101 B[-37] 反码 = 11011010 B[-37] 补码 = 11011011 B2.答:由指令部件EU和总线接口部件BIU组成。

EU功能:EU只负责执行指令。

其中的算术逻辑单元(ALU)完成16位或8位的二进制运算,运算结果可通过内部总线送到通用寄存器组或BIU的内部寄存器中等待写入存储器。

16位暂存器用来暂存参加运算的操作数。

经ALU运算后的结果特征送入标志寄存器FR中保存;EU中的控制器负责从BIU的指令队列中取指令,并对指令进行译码,根据指令要求向EU内部各部件发出控制命令以完成各条指令的功能。

BIU功能:总线接口单元BIU负责与存储器或I/O端口打交道,正常情况下,BIU通过地址加法器形成指令所在存储器中的物理地址后,启动存储器,从给定地址的存储器中取出指令代码送指令队列中等待执行,一旦指令队列中空出2个字节,BIU将自动进人读指令操作以填满指令队列。

只要收到EU送来的操作数地址,BIU将立即形成操作数的物理地址,完成读/写操作数或运算结果的功能。

3.答:(1)MOV AX,[64H]答:寻址方式为直接寻址;PA=60064H(2)MOV AX,[BP]答:寻址方式为寄存器间接寻址;PA=50400H (3)MOV AL,[DI]答:寻址方式为寄存器间接寻址;PA=61200H (4)MOV AL,[BX+1110H]答:寻址方式为寄存器相对寻址;PA=61410H (5)MOV AX,NUM[BX][DI]答:寻址方式为相对基址变址寻址;PA=61505H。

微机原理作业及答案

微机原理作业及答案

一、二、三、四章作业第一章作业1、简述微型计算机的硬件系统结构,并说明其主要功能。

2、试利用一个字节的字长,将十进制-115转换为相应的二进制的原码、反码和补码。

解:(-115)原(11110011)2 (-115)反(10001100)(-115)补(10001101)3、已知X补1100111,则X原,2X补并判断结果是否溢出。

解:题目没有特殊说明,将最高为(第六位作为符号位)X反X补-11100110,则X原1011001 2X补X补X补110011********* 1001110 C6C5110,不溢出另外,可以补齐第七位为0或者1,再进行计算获得。

第一章作业4、十进制389对应的二进制数是110000101,BCD码是001110001001,每位数字用字符表示时ASC码是333839H。

5、下列无符号数中,最大的是(转化为10进制比较)A 11001002 B 1438C 10011000BCD D 6516 第二章作业1、8088CPU与8086CPU的差别是什么?数据线和部分引脚2、8086CPU有哪些寄存器?复位值为多少?AX BX CX DX SP BP SI DI IP CS DS ES SS FR 注意:CS:IPFFFF:0000H 3、8086系统的寻址空间采用什么结构?用什么信号作为本选信号?答:采用分体结构,将1MB的存储空间分为两个体:寄地址存储体和偶地址存储器,各为512KB。

奇地址存储器数据线与系统数据总线高八位相连,用BHE作为选通信号;偶地址存储体的数据线与系统数据总线低八位相连,用A0作为选通信号。

4、什么是存储空间的逻辑分段与存储器单元的逻辑地址?答:8086寻址空间按字节编址,存储空间为1MB,每个存储单元地址为20位。

由于CPU总线宽度和寄存器都为16位,如何形成20位地址。

物理地址段地址16有效地址地址的高16位称为段地址,存放在段寄存器。

物理地址唯一,指向一个存储单元,逻辑地址不唯一。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

微机大作业班级:学号:姓名:第一题:(上机题)编写程序实现下列5项功能,通过从键盘输入1~5进行菜单式选择:(1)按数字键“1”,完成将字符串中的小写字母变换成大写字母。

用户输入由英文大小写字母或数字0~9组成的字符串(以回车结束),变换后按下列格式在屏幕上显示:<原字符串>例如:abcdgyt0092<新字符串> ABCDGYT0092按任一键重做;按Esc键返回主菜单。

(2)按数字键“2”,完成在字符串中找最大值。

用户输入由英文大小写字母或数字0~9组成的字符串(以回车结束),找出最大值后按下列格式在屏幕上显示:<原字符串> The maximum is <最大值>.按任一键重做;按Esc键返回主菜单。

(3)按数字键“3”,完成输入数据组的排序。

用户输入一组十进制数值(小于255),然后变换成十六进制数,并按递增方式进行排序,按下列格式在屏幕上显示:<原数值串><新数值串>按任一键重做;按Esc键返回主菜单。

(4)按数字键“4”,完成时间的显示。

首先提示用户对时,即改变系统的定时器HH:MM:SS(以冒号间隔,回车结束),然后在屏幕的右上角实时显示出时间:HH:MM:SS。

按任一键重新对时;按Esc键返回主菜单。

(5)按数字键“5”,结束程序的运行,返回操作系统。

运行结果:首先进入的首页:输入1输入字符串:安任意键后:Esc 键返回菜单:输入2:输入字符串:安任意键后Ese键返回菜单输入3输入若干数:按任意键:按Esc返回主菜单输入4安1修改时间输入修改时间:按任意键重做按Esc返回主菜单输入5退出程序代码:clear_screen macro op1,op2,op3,op4 ;清屏宏定义mov ah,06h ;当前显示页上卷mov al,00h;AL=上卷行数,0 为清屏mov bh,07h;BH=填充字符属性mov ch,op1;CH/CL=上卷窗口左上角坐标mov cl,op2;mov dh,op3;DH/DL=上卷窗口右下角坐标mov dl,op4;int 10hmov ah,02h;置光标位置mov bh,00h;BH=显示页mov dh,00h;DH=行mov dl,00h;DL=列int 10hendmmenu macro op1,op2,op3 ;菜单显示宏定义mov ah,02h;置光标位置mov bh,00h;BH=显示页mov dh,op1;DH=行mov dl,op2;DL=列int 10hmov ah,09h;向屏幕显示一串字符以lea dx,op3 ;入口地址int 21hendmdata segmentSTRING11 DB '请输入字符串:$'STRING12 DB '结果:$'STRING22 DB '最大值:$'STRING31 DB '请输入0到255之间的若干数:$' STRING32 DB '新字符串:$'STRING33 DB '输入错误$'STRING41 DB '请验证时间……调整时间请按1$' STRING42 DB '请输入正确时间$'STRING43 DB '调整完毕$'STRING1 DB '1.Change lowercase to uppercase $' STRING2 DB '2.Find the maxmum $'STRING3 DB '3.Rank the array incrementally $' STRING4 DB '4.Display time $'STRING5 DB '5.return to operating system $' STRING DB '输入任意键,重新操作,Esc键退出$'KEY1 DB 100DB ?DB 100 DUP(?)NUMBUF DB 100DB ?DB 100 DUP(?)VAR DB 100 DUP(?)GAO DB 0CIGAO DB 0DIWEI DB 0SHU DB 0data endsstack segmentDW 100H DUP(?) ;input stack segment code here TOP LABEL WORDstack endscode segmentassume cs:code,ds:data,es:data,ss:stackstart:mov ax,datamov ds,axmov es,axmov ax,stackmov ss,axL1: lea sp,TOP ;input code segment code here clear_screen 00d,00d,24d,79dmenu 07h,15d,STRING1 ;输出主菜menu 09d,15d,STRING2menu 11d,15d,STRING3menu 13d,15d,STRING4menu 15d,15d,STRING5 ;mov ah,02h ;设置光标位置mov bh,00hmov dh,17dmov dl,15dint 10h ;mov ah,01h ;从键盘输入任意字符int 21hCMP AL,31HJZ L2CMP AL,32HJZ L3CMP AL,33HJZ L4CMP AL,34HJZ L5CMP AL,35HJZ L6L2: CALL CHLTOU ;11111111mov ah,01h ;从键盘输入任意字符int 21hCMP AL,1BHJZ L1JMP L2L3: CALL FINDMAX ;22222222mov ah,01h ;从键盘输入任意字符int 21hCMP AL,1BHJZ L1JMP L3L4: CALL RANK ;33333333mov ah,01h ;从键盘输入任意字符int 21hCMP AL,1BHJZ L1JMP L4L5: CALL DISPLAY ;44444444mov ah,01h ;从键盘输入任意字符int 21hCMP AL,1BHJZ L1JMP L5L6: mov ah,4chint 21hCHLTOU PROC NEARPUSH AXPUSH CXPUSH DXPUSH SIclear_screen 0d,0d,23d,78d ;清屏宏调用mov ah,02h ;设置光标位mov bh,00hmov dh,01hmov dl,0hint 10hLEA DX,STRING11 ;显示STRING11INT 21HMOV AH,0AH ;输入字符LEA DX,KEY1INT 21HLEA SI,KEY1+1XOR CX,CXMOV CL,[SI]INC SIL12:MOV AL,[SI]CMP AL,41HJB L11CMP AL,60HJB L11SUB AL,20HMOV [SI],ALL11:INC SILOOP L12MOV [SI+1],'$'CALL DISPCRMOV AH,09HLEA DX,STRING12INT 21HMOV AH,09HMOV DX,OFFSET KEY1+2INT 21HCALL DISPCRCALL DISPCRMOV AH,09H ;显示LEA DX,STRINGINT 21HPOP SIPOP DXPOP CXPOP AXRETCHLTOU ENDPFINDMAX PROC NEARPUSH AXPUSH CXPUSH DXPUSH SIclear_screen 0d,0d,23d,78d ;清屏宏调用mov ah,02h ;设置光标位mov bh,00hmov dh,01hmov dl,0hint 10hMOV AH,09HLEA DX,STRING11INT 21HMOV AH,0AHLEA DX,KEY1INT 21HLEA SI,KEY1+1XOR CX,CXMOV CL,[SI]INC SIDEC CXMOV BL,[SI]L22:CMP BL,[SI+1]JA L21XCHG BL,[SI+1]L21:INC SILOOP L22CALL DISPCRMOV AH,09HLEA DX,STRING22INT 21HMOV DL,BLMOV AH,02HINT 21HCALL DISPCRCALL DISPCRMOV AH,09H ;显示LEA DX,STRINGINT 21HPOP SIPOP DXPOP CXPOP AXRETFINDMAX ENDPRANK PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXPUSH SIPUSH DIRESORT: clear_screen 0d,0d,23d,78d ;清屏宏调用mov ah,02h ;设置光标位mov bh,00hmov dh,01hmov dl,0hint 10hMOV AH,09H ;显示LEA DX,STRING31INT 21Hcall DISPCRMOV AH,0AH;输入数据LEA DX,KEY1INT 21Hcall DISPCRCALL CIN_INT ; 字符串转换成数据串CMP AL, 0JZ RESORT ; 判断数据串是否有错CMP NUMBUF, 0JZ RESORT ; 判断数据串是否为空MOV AH,09H ;显示LEA DX,STRING32INT 21Hcall DISPCRCALL FAR PTR MPSORT ; 数据组排序CALL FAR PTR INT_OUT ; 数据组的输出call DISPCRMOV AH,09H ;显示LEA DX,STRINGINT 21HPOP DIPOP SIPOP DXPOP BXPOP AXRETRANK ENDPCIN_INT PROC NEAR ; 读入整型数; 入口参数:无; 出口参数为:AL(有无错误标志,0为有,1为无)MOV CL, KEY1 + 1LEA SI, KEY1 + 2MOV CH, 0 ; 数据组数据个数置0MOV DH, 10MOV AL, 0 ; 当前数据x=0MOV DL, 0 ; 有无数据标志置0,即无数据FNDNUM:CMP BYTE PTR [SI], ' 'JZ ADDNUM ; 判断当前字符是否为空格CMP BYTE PTR [SI], '0'JB ERRNUMCMP BYTE PTR [SI], '9'JA ERRNUM ; 判断当前字符是否在'0'-'9'之间MOV DL, 1 ; 有无数据标志置1,即有数据MUL DHXOR BH, BHMOV BL, [SI]ADD AX, BXSUB AX, '0' ; 计算出当前数据xCMP AH, 0JA ERRNUM ; 判断x是否越界JMP NEXTADDNUM:CMP DL, 1JNZ NEXT ; 判断是否有数据INC CH ; 数据组数据个数加1CALL ADDNEWMOV DL, 0MOV AL, 0 ; 清零NEXT:INC SIDEC CLCMP CL, 0JNZ FNDNUM ; 依次检查各字符CMP DL, 1JNZ TOTAL ; 判断是否有未加入的数据INC CHCALL ADDNEWTOTAL:MOV NUMBUF, CH ; 置数据组数据个数MOV AL, 1 ; 输入数据无错误JMP CRTNUMERRNUM:MOV AL, 0 ; 输入数据有错误CRTNUM:RETCIN_INT ENDPADDNEW PROC NEAR ; 增加新数; 入口参数:CH(数据组数据个数)、AL(当前数据x); 出口参数:无PUSH AXLEA BX, NUMBUFMOV AL, CHCBWADD BX, AXPOP AXMOV [BX], ALRETADDNEW ENDPMPSORT PROC FAR ; 数据组排序MOV AL, NUMBUFCMP AL, 1JBE NOSORT ; 若只有一个元素,停止排序CBWMOV CX, AXLEA SI, NUMBUF ; SI指向数据组首地址ADD SI, CX ; SI指向数据组末地址DEC CX ; 外循环次数LP1: ; 外循环开始PUSH CXPUSH SIMOV DL, 0 ; 交换标志置0LP2: ; 内循环开始MOV AL, [SI]CMP AL, [SI - 1]JAE NOXCHGXCHG AL, [SI - 1] ; 交换操作MOV [SI], ALMOV DL, 1 ; 交换标志置1 NOXCHG:DEC SILOOP LP2POP SIPOP CXCMP DL, 1JNZ NOSORT ; 判断交换标志LOOP LP1NOSORT:RETMPSORT ENDPINT_OUT PROC FAR ; 输出数据组MOV AL, NUMBUFCBWMOV CX, AXMOV BL, 10HLEA SI, NUMBUF + 1PRINT:MOV AL, [SI]CALL OUTNUMINC SIMOV AH, 2MOV DL, ' 'INT 21HLOOP PRINTRETINT_OUT ENDPOUTNUM P ROC NEAR ; 将十进制数以十六进制输出; 入口参数:AL(待转换的数据),BL(转换进制数16); 出口参数:无MOV AH, 0DIV BLPUSH AXCMP AH, 10JB PNUMADD AH, 7PNUM: ADD AH, 30HMOV DL, AHPOP AXPUSH DXCMP AL, 0JZ OUTNCALL OUTNUMOUTN:POP DXMOV AH, 2INT 21HRETOUTNUM E NDPDISPLAY PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXPUSH SIclear_screen 0d,0d,23d,78d ;清屏宏调用mov ah,02h ;设置光标位mov bh,00hmov dh,01hmov dl,0hint 10hMOV AH,09H ;显示LEA DX,STRING41INT 21HCALL DISPLAY1CALL DISPCRMOV AH,01HINT 21HCMP AL,31HJZ L41JMP L42L41 : mov ah,02h ;设置光标位mov bh,00hmov dh,02hmov dl,0hint 10hMOV AH,09HLEA DX,STRING42INT 21HMOV AH,0AHLEA DX,KEY1INT 21HMOV BL,10MOV AL,KEY1 + 2SUB AL,30HSHL AL,1SHL AL,1SHL AL,1SHL AL,1ADD AL,KEY1 + 3SUB AL,30HCMP AL,0JB L42CMP AL, 24JAE L42 ; 判断时有效性MOV CH, ALMOV AL,KEY1+5SUB AL,30HSHL AL,1SHL AL,1SHL AL,1SHL AL,1ADD AL,KEY1+6SUB AL,30HCMP AL,0JB L42CMP AL,60JAE L42 ; 判断分有效性MOV CL, ALMOV AL,KEY1 + 8SUB AL, 30HSHL AL,1SHL AL,1SHL AL,1SHL AL,1ADD AL, KEY1 + 9SUB AL,30HCMP AL,0JB L42CMP AL,60JAE L42 ; 判断秒有效性MOV DH,ALMOV DL,0MOV AH,03H; 置系统时间INT 1AHmov ah,02h ;设置光标位mov bh,00hmov dh,03hmov dl,0hint 10hMOV AH,09HLEA DX,STRING43INT 21HCALL DISPCRCALL DISPCRMOV AH,09H ;显示LEA DX,STRINGINT 21HL42 :CALL DISPLAY1POP SIPOP DXPOP CXPOP BXPOP AXRETDISPLAY ENDPDISPLAY1 PROC NEAR ;显示系统时钟PUSH AXPUSH BXPUSH CXPUSH DX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;DISPI: MOV AH,2xor bh,bhMOV DX,0045H ;DX=CURSOR=45h,表示光标定位在1行70 列INT 10H ;int10 子功能02 设置光标位置MOV AH,2INT 1AHPUSH DXPUSH CXPOP BX ;小时分钟数给BXPUSH BXCALL SHOWBYTE ;调用子程序显示小时,小时在bh中CALL SHOWCOLON ;调用子程序显示时间分隔符":"POP BXXCHG BH,BL ;分钟给bhCALL SHOWBYTE ;调用子程序显示分钟,bh是分钟数CALL SHOWCOLON ;调用子程序显示时间分隔符":"POP BX ;秒数给bhCALL SHOWBYTE ;调用子程序显示秒?mov ah,02h ;设置光标位mov bh,00hmov dh,05hmov dl,0hint 10hMOV BX,0018HRE: MOV CX,0FFFFHREA: LOOP READEC BXJNZ REMOV AH,0BHINT 21HCMP AL,0JZ DISPIPOP DXPOP CXPOP BXPOP AXRETDISPLAY1 ENDPSHOWBYTE PROC NEAR ;BCD值显示子程序,BCD值在BH中BH CBWPUSH BX ;压栈BX值,以防冲掉MOV CL,4 ;以下代码BH中BCD十位值转ASCLL码MOV AL,BHSHR AL,CLADD AL,30HCALL SHOW ;调用子程序显示AL,当前AL为时间值十位上的数值CALL CURMOVE ;调用子程序后移光标POP BX ;还原BX值MOV AL,BH ;以下代码BH中BCD个位值转ASCLL码AND AL,0FHADD AL,30HCALL SHOW ;调用子程序显示AL,当前AL为时间值个位上的数值CALL CURMOVE ;调用子程序后移光标RETSHOWBYTE ENDPSHOWCOLON PROC NEAR ;显示字符":" 子程序,用于时间分隔符MOV AL,':'CALL SHOW ;调用子程序显示":"CALL CURMOVE ;调用子程序后移光标RETSHOWCOLON ENDPCURMOVE PROC NEAR ;光标后移子程序PUSH AXPUSH BXPUSH CXPUSH DXMOV AH,3MOV BH,0INT 10H ;取光标位置INC DL ;光标列位置加1MOV AH,2INT 10H ;设光标位置POP DXPOP CXPOP BXPOP AXRETCURMOVE ENDPSHOW PROC NEAR ;显示一个ASCLL字符子程序,AL为所显字符AL PUSH AXPUSH BXPUSH CXMOV AH,09HMOV BX,002fh ;BH/BL=字符背景色/字符颜色2fh=绿底白字MOV CX,1 ;显示个数1INT 10H ;int 10 子功能09 显示一个字符POP CXPOP BXPOP AXRETSHOW ENDPDISPCR PROC NEAR ;光标回车换行PUSH AXPUSH DXMOV AH,2HMOV DL,0AHINT 21HMOV AH,2HMOV DL,0DHINT 21HPOP DXPOP AXRETDISPCR ENDPcode endsend start第二题:8086微机系统设计,具体要求如下:1、8086工作在最小方式。

相关文档
最新文档