当前位置:文档之家› 微机原理实验参考答案(航大)

微机原理实验参考答案(航大)

《微机原理》实验参考答案实验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)将以上程序段补充成为一个完整的汇编程序。

答:DATA SEGMENTTABLE DW 10H,20H,30H,40H,50HENTRY DW 3DATA ENDSCODE SEGMENTASSUME DS:DATA,CS:CODESTART: MOV AX,DATAMOV DS,AXLEA BX,TABLEADD BX,ENTRYMOV AX,[BX]MOV AH,4CHINT 21HCODE ENDSEND START(2)AX=3000H实验2 分支与DOS中断功能调用程序设计实验一、实验目的1、掌握条件转移、无条件转移指令的功能及应用;2、掌握分支程序的设计、编写、调试和运行方法。

3、掌握1号、2号和9号功能调用及其程序设计方法。

二、实验内容1、编程求|X-Y|,结果放在RESULT单元中。

X和Y都为16位操作数。

DA TA SEGMENTX DW 1234HY DW 5678HRESULT DW ?DA TA ENDSCODE SEGMENTASSUME DS:DATA,CS:CODESTART: MOV AX,DATAMOV DS,AXMOV AX,XSUB AX,YJAE NEXT;设X,Y是不带符号数,X>=Y转移MOV AX,YSUB AX,XNEXT: MOV RESYLT,AXMOV AH,4CHINT 21HCODE ENDSEND START2、编写一程序,实现从键盘输入一个字符,判断其是不是大写字母,如果是则请输出这个大写字母,如果不是,请输出“这不是一个大写字母”的英文信息(要求:能连续输入)。

DATA SEGMENTMS1 DB ‘IT IS A BIG CAPITAL$’MS2 DB ‘IT IS NOT A BIG CAPITAL$’DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART:MOV AX,DATAMOV DS,AXNEXT: MOV DX,OFFSET MS2MOV AH,1INT 21H; 1号功能调用CMP AL,0DHJZ EXITCMP AL, ‘A’JB NOCMP AL, ‘Z’JA NOMOV DX,OFFSET MS1NO: MOV AH,9INT 21HIMP NEXTEXIT:MOV AH,4CHINT 21HCODE ENDSEND START3、请编写一程序,实现将大写字母字符串转换成小写字母字符串。

设字符串的首地址为STRING,字符串的长度在N单元内。

DA TA SEGMENTSTRING DB 'I AM A STUDENT!$'N EQU $-STRINGDA TA ENDSCODE SEGMENTASSUME DS:DATA,CS:CODESTART:MOV AX,DATAMOV DS,AXMOV BX,OFFSET STRINGMOV CX,NNEXT: MOV AL,[BX]CMP AL,'A'JB NEXT1CMP AL,'Z'JA NEXT1ADD AL,20HMOV [BX],ALNEXT1:INC BXLOOP NEXTMOV AH,9MOV DX,OFFSET STRINGINT 21HMOV AH,4CHINT 21HCODE ENDSEND START4、编程显示任一寄存器(如BX)的最高位。

即若BX的最高位为1,则在屏幕上输出“1”;若BX的最高位为0,则在屏幕上输出“0”。

CODE SEGMENTASSUME CS:CODESTART: MOV DL,'1'MOV BX,8234HCMP BX,0JS SHOWMOV DL,'0'SHOW: MOV AH,2INT 21HMOV AH,4CHINT 21HCODE ENDSEND START实验3 循环结构程序设计实验一、实验目的1、掌握循环指令LOOP、LOOPZ、LOOPNZ指令的功能及使用方法。

2、掌握循环程序的设计、编写、调试和运行方法。

二、实验内容1、循环结构程序设计编写一个程序,将内存1000H开始的连续100个字节送往2000H开始的连续100个内存单元中。

要求使用三种不同的方法(不用串操作指令、用单一的串操作指令、用带重复前缀的串操作指令),下面已给出一种实现方法,请给出另外两种实现方法的源程序清单:实验程序参考清单:方法一带重复前缀的串操作指令DATA SEGMENTORG 1000HDB 100 DUP(…A‟)ORG 2000HDB 100 DUP(…B‟)DA TA ENDSCODE SEGMENTASSUME DS:DATA,ES:DATA,CS:CODESTART: MOV AX,DA TAMOV DS,AXMOV ES,AXMOV SI,1000HMOV DI,2000HMOV CX,100CLDREP MOVSBMOV AH,4CHINT 21HCODE ENDSEND START方法二不带重复前缀的串操作指令DATA SEGMENTORG 1000HDB 100 DUP(…A‟)ORG 2000HDB 100 DUP(…B‟)DA TA ENDSCODE SEGMENTASSUME DS:DATA,ES:DATA,CS:CODE START: MOV AX,DA TAMOV DS,AXMOV ES,AXMOV SI,1000HMOV DI,2000HMOV CX,100CLDNEXT: MOVSBLOOP NEXTMOV AH,4CHINT 21HCODE ENDSEND START方法三不用串操作指令,而用MOV指令DATA SEGMENTORG 1000HDB 100 DUP(…A‟)ORG 2000HDB 100 DUP(…B‟)DA TA ENDSCODE SEGMENTASSUME DS:DATA,ES:DATA,CS:CODE START: MOV AX,DA TAMOV DS,AXMOV SI,1000HMOV DI,2000HMOV CX,100NEXT: MOV AL,[SI]MOV [DI],ALINC SIINC DILOOP NEXTMOV AH,4CHINT 21HCODE ENDSEND START2、编程计算1+2+3+…+100的和。

答:用AX存放结果CODE SEGMENTASSUME CS:CODESTART: MOV AX,0MOV BX,1MOV CX,100NEXT: ADD AX,BXINC BXLOOP NEXTMOV AH,4CHINT 21HCODE ENDSEND START如果想以十进制输出显示AX中的结果则需要增加显示输出程序(感兴趣同学参考,不要求):DA TA SEGMENTMS DB 5 DUP(?)DB '$'DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART:MOV AX,DATAMOV DS,AXMOV AX,0MOV BX,1MOV CX,100NEXT: ADD AX,BXINC BXLOOP NEXTMOV SI,OFFSET MSADD SI,4NEXT1:MOV DX,0MOV BX,10DIV BXADD DL,30HMOV [SI],DLDEC SICMP AX,0JZ EXITJMP NEXT1EXIT: MOV AH,9MOV DX,OFFSET MSINT 21HMOV AH,4CHINT 21HCODE ENDSEND START实验4 存储器扩展实验code segmentassume cs:codeorg 1000hStart: mov bx,8000h ;外部存储器起始地址BXmov cx,2048 ;初始化计数器RamWR: mov [bx],55aah ;将数据写入外部存储器inc bx ;地址+2inc bxloop RamWR ;地址不到8FFF则继续jmp $ ;结束code endsend Start实验5 8259应用编程实验outseg equ 0ffdch ;字形控制口outbit equ 0ffddh ;字位控制口m8259 equ 0ffe0h ;8259控制口c8259 equ 0ffe1h ;8259命令口code segmentassume cs:codeorg 1000hstart: cli ;清中断标志call intsvr ;分配中断向量call init ;8259初始化sti ;置中断标志mov dx,outbit ;选中LED第6位mov al,000001bout dx,alcall show_p ;显示"P."jmp $ ;循环等待;设置中断向量,写N=15的中断向量,中断向量表003CH-003FH单元intsvr: mov ax,0000hmov es,axmov di,003chlea ax,irq7stoswmov ax,0000hstoswret;8259初始化init: mov dx,m8259mov al,13hout dx,al ;边沿触发mov dx,c8259mov al,08hout dx,al ;基地址mov al,09hout dx,al ;写命令字mov al,7fhout dx,al ;设置IMR,只开放IQR7,屏蔽其他ret;显示"0"show_p: mov al,0 ;'0'call disp ;显示ret;查表显示子程序disp: mov dx,outseg ;字形控制口mov bx,offset ledxlat ;查表out dx,al ;送显示ret;IRQ7中断服务程序irq7: cli ;清中断标志,关中断inc al ;加一计数and al,0fh ;只保留低4位,清零高位push ax ;AX进栈保存call disp ;显示mov dx,m8259mov al,20hout dx,al ;写结束字pop ax ;恢复AXsti ;置中断标志,开中断iret ;从中断返回;字形代码表led db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h ; 0 1 2 3 4 5 6 7 db 80h,90h,88h,83h,0c6h,0a1h,86h,8eh ;8 9 A B C D E Fdb 0ch ;'P.'code endsend start。

相关主题