微机原理实验参考答案航大.docx
- 文档编号:24791795
- 上传时间:2023-06-01
- 格式:DOCX
- 页数:16
- 大小:17.99KB
微机原理实验参考答案航大.docx
《微机原理实验参考答案航大.docx》由会员分享,可在线阅读,更多相关《微机原理实验参考答案航大.docx(16页珍藏版)》请在冰豆网上搜索。
微机原理实验参考答案航大
《微机原理》实验参考答案
实验1汇编基本指令及顺序程序设计实验
实验2分支与DOS中断功能调用程序设计实验
实验3循环结构程序设计实验
实验4存储器扩展实验
实验58259应用编程实验
实验1汇编基本指令及顺序程序设计实验
一、实验目的
1、掌握汇编语言的开发环境和上机过程;
2、掌握DEBUG命令;
3、掌握顺序程序设计方法;
4、掌握寻址方式;
5、理解和掌握汇编基本指令的功能。
二、实验内容
1、设堆栈指针SP=2000H,AX=3000H,BX=5000H;请编一程序段将AX和BX的内容进行交换。
要求:
用3种方法实现。
答:
方法一CODESEGMENT
ASSUMECS:
CODE
START:
MOVAX,3000H
MOVBX,5000H
MOVCX,AX
MOVAX,BX
MOVBX,CX
CODEENDS
ENDSTART
方法二CODESEGMENT
ASSUMECS:
CODE
START:
MOVAX,3000H
MOVBX,5000H
XCHGAX,BX
CODEENDS
ENDSTART
方法三CODESEGMENT
ASSUMECS:
CODE
START:
MOVAX,3000H
MOVBX,5000H
PUSHAX
PUSHBX
POPAX
POPBX
CODEENDS
ENDSTART
2、分别执行以下指令,比较寄存器寻址,寄存器间接寻址和相对寄存器寻址间的区别。
MOVAX,BX寄存器寻址,将BX内容送AX
MOVAX,[BX]寄存器间接寻址,将DS:
BX内存单元内容送AX
MOVAX,10[BX]寄存器相对寻址,将DS:
BX+10内存单元内容送AX
在DEBUG调试模式,用A命令直接编辑相应指令并用T命令单步执行,执行后查询相应寄存器的值并用D命令查内存。
3、已知有如下程序段:
MOVAX,1234H
MOVCL,4
在以上程序段的基础上,分别执行以下指令:
ROLAX,CLAX=2341H
RORAX,CLAX=4123H
SHLAX,CLAX=2340H
SHRAX,CLAX=0123H
SARAX,CLAX=0123H
RCLAX,CL带进位标志位的循环左移
RCRAX,CL带进位标志的循环右移
4、设有以下部分程序段:
TABLEDW10H,20H,30H,40H,50H
ENTRYDW3
┇
LEABX,TABLE
ADDBX,ENTRY
MOVAX,[BX]
┇
要求:
(1)将以上程序段补充成为一个完整的汇编程序。
答:
DATASEGMENT
TABLEDW10H,20H,30H,40H,50H
ENTRYDW3
DATAENDS
CODESEGMENT
ASSUMEDS:
DATA,CS:
CODE
START:
MOVAX,DATA
MOVDS,AX
LEABX,TABLE
ADDBX,ENTRY
MOVAX,[BX]
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
(2)AX=3000H
实验2分支与DOS中断功能调用程序设计实验
一、实验目的
1、掌握条件转移、无条件转移指令的功能及应用;
2、掌握分支程序的设计、编写、调试和运行方法。
3、掌握1号、2号和9号功能调用及其程序设计方法。
二、实验内容
1、编程求|X-Y|,结果放在RESULT单元中。
X和Y都为16位操作数。
DATASEGMENT
XDW1234H
YDW5678H
RESULTDW?
DATAENDS
CODESEGMENT
ASSUMEDS:
DATA,CS:
CODE
START:
MOVAX,DATA
MOVDS,AX
MOVAX,X
SUBAX,Y
JAENEXT;设X,Y是不带符号数,X>=Y转移
MOVAX,Y
SUBAX,X
NEXT:
MOVRESYLT,AX
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
2、编写一程序,实现从键盘输入一个字符,判断其是不是大写字母,如果是则请输出这个大写字母,如果不是,请输出“这不是一个大写字母”的英文信息(要求:
能连续输入)。
DATASEGMENT
MS1DB‘ITISABIGCAPITAL$’
MS2DB‘ITISNOTABIGCAPITAL$’
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
NEXT:
MOVDX,OFFSETMS2
MOVAH,1
INT21H;1号功能调用
CMPAL,0DH
JZEXIT
CMPAL,‘A’
JBNO
CMPAL,‘Z’
JANO
MOVDX,OFFSETMS1
NO:
MOVAH,9
INT21H
IMPNEXT
EXIT:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
3、请编写一程序,实现将大写字母字符串转换成小写字母字符串。
设字符串的首地址为STRING,字符串的长度在N单元内。
DATASEGMENT
STRINGDB'IAMASTUDENT!
$'
NEQU$-STRING
DATAENDS
CODESEGMENT
ASSUMEDS:
DATA,CS:
CODE
START:
MOVAX,DATA
MOVDS,AX
MOVBX,OFFSETSTRING
MOVCX,N
NEXT:
MOVAL,[BX]
CMPAL,'A'
JBNEXT1
CMPAL,'Z'
JANEXT1
ADDAL,20H
MOV[BX],AL
NEXT1:
INCBX
LOOPNEXT
MOVAH,9
MOVDX,OFFSETSTRING
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
4、编程显示任一寄存器(如BX)的最高位。
即若BX的最高位为1,则在屏幕上输出“1”;若BX的最高位为0,则在屏幕上输出“0”。
CODESEGMENT
ASSUMECS:
CODE
START:
MOVDL,'1'
MOVBX,8234H
CMPBX,0
JSSHOW
MOVDL,'0'
SHOW:
MOVAH,2
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
实验3循环结构程序设计实验
一、实验目的
1、掌握循环指令LOOP、LOOPZ、LOOPNZ指令的功能及使用方法。
2、掌握循环程序的设计、编写、调试和运行方法。
二、实验内容
1、循环结构程序设计
编写一个程序,将内存1000H开始的连续100个字节送往2000H开始的连续100个内存单元中。
要求使用三种不同的方法(不用串操作指令、用单一的串操作指令、用带重复前缀的串操作指令),下面已给出一种实现方法,请给出另外两种实现方法的源程序清单:
实验程序参考清单:
方法一带重复前缀的串操作指令
DATASEGMENT
ORG1000H
DB100DUP(‘A’)
ORG2000H
DB100DUP(‘B’)
DATAENDS
CODESEGMENT
ASSUMEDS:
DATA,ES:
DATA,CS:
CODE
START:
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVSI,1000H
MOVDI,2000H
MOVCX,100
CLD
REPMOVSB
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
方法二不带重复前缀的串操作指令
DATASEGMENT
ORG1000H
DB100DUP(‘A’)
ORG2000H
DB100DUP(‘B’)
DATAENDS
CODESEGMENT
ASSUMEDS:
DATA,ES:
DATA,CS:
CODE
START:
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVSI,1000H
MOVDI,2000H
MOVCX,100
CLD
NEXT:
MOVSB
LOOPNEXT
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
方法三不用串操作指令,而用MOV指令
DATASEGMENT
ORG1000H
DB100DUP(‘A’)
ORG2000H
DB100DUP(‘B’)
DATAENDS
CODESEGMENT
ASSUMEDS:
DATA,ES:
DATA,CS:
CODE
START:
MOVAX,DATA
MOVDS,AX
MOVSI,1000H
MOVDI,2000H
MOVCX,100
NEXT:
MOVAL,[SI]
MOV[DI],AL
INCSI
INCDI
LOOPNEXT
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
2、编程计算1+2+3+…+100的和。
答:
用AX存放结果
CODESEGMENT
ASSUMECS:
CODE
START:
MOVAX,0
MOVBX,1
MOVCX,100
NEXT:
ADDAX,BX
INCBX
LOOPNEXT
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
如果想以十进制输出显示AX中的结果则需要增加显示输出程序(感兴趣同学参考,不要求):
DATASEGMENT
MSDB5DUP(?
)
DB'$'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAX,0
MOVBX,1
MOVCX,100
NEXT:
ADDAX,BX
INCBX
LOOPNEXT
MOVSI,OFFSETMS
ADDSI,4
NEXT1:
MOVDX,0
MOVBX,10
DIVBX
ADDDL,30H
MOV[SI],DL
DECSI
CMPAX,0
JZEXIT
JMPNEXT1
EXIT:
MOVAH,9
MOVDX,OFFSETMS
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
实验4存储器扩展实验
codesegment
assumecs:
code
org1000h
Start:
movbx,8000h;外部存储器起始地址BX
movcx,2048;初始化计数器
RamWR:
mov[bx],55aah;将数据写入外部存储器
incbx;地址+2
incbx
loopRamWR;地址不到8FFF则继续
jmp$;结束
codeends
endStart
实验58259应用编程实验
outsegequ0ffdch;字形控制口
outbitequ0ffddh;字位控制口
m8259equ0ffe0h;8259控制口
c8259equ0ffe1h;8259命令口
codesegment
assumecs:
code
org1000h
start:
cli;清中断标志
callintsvr;分配中断向量
callinit;8259初始化
sti;置中断标志
movdx,outbit;选中LED第6位
moval,000001b
outdx,al
callshow_p;显示"P."
jmp$;循环等待
;设置中断向量,写N=15的中断向量,中断向量表003CH-003FH单元
intsvr:
movax,0000h
moves,ax
movdi,003ch
leaax,irq7
stosw
movax,0000h
stosw
ret
;8259初始化
init:
movdx,m8259
moval,13h
outdx,al;边沿触发
movdx,c8259
moval,08h
outdx,al;基地址
moval,09h
outdx,al;写命令字
moval,7fh
outdx,al;设置IMR,只开放IQR7,屏蔽其他
ret
;显示"0"
show_p:
moval,0;'0'
calldisp;显示
ret
;查表显示子程序
disp:
movdx,outseg;字形控制口
movbx,offsetled
xlat;查表
outdx,al;送显示
ret
;IRQ7中断服务程序
irq7:
cli;清中断标志,关中断
incal;加一计数
andal,0fh;只保留低4位,清零高位
pushax;AX进栈保存
calldisp;显示
movdx,m8259
moval,20h
outdx,al;写结束字
popax;恢复AX
sti;置中断标志,开中断
iret;从中断返回
;字形代码表
leddb0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h;01234567
db80h,90h,88h,83h,0c6h,0a1h,86h,8eh;89ABCDEF
db0ch;'P.'
codeends
endstart
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 实验 参考答案