微机实验一到八答案.docx
《微机实验一到八答案.docx》由会员分享,可在线阅读,更多相关《微机实验一到八答案.docx(53页珍藏版)》请在冰点文库上搜索。
微机实验一到八答案
2013——2014学年第二学期
广东药学院
实验报告
实验课程名称:
微型电脑技术及应用
专业班级:
电子信息工程12
组号:
第一组
小组成员:
谭浩敏〔1205520131〕
陈润强〔1205520106〕
刘赏源〔1205520107〕
实验指导老师:
何永玲
〔第一组〕实验二汇编语言指令仿真
组长:
谭浩敏组员:
刘赏源、陈润强
实验目的
1.学会用实验的方法验证理论,用理论来指导实验,进一步熟悉汇编语言开发环境。
2.深刻理解寻址方式的意义以及80X86指令的各种寻址方式。
3.深刻理解80X86各种指令的真正含义及功能。
4.掌握与数据有关的不同寻址方式。
5.继续熟悉实验操作软件的环境及使用方法。
实验内容及要求
一、在emu8086中仿真简单指令
1.仿真简单指令,请按要求写出程序代码及实验步骤。
2.将实验结果与理论结果进行比较,以便深入理解80X86指令的各种寻址方式。
3.实验过程中遇到的问题及解决方法。
4.写出心得体会及还未理解的知识点。
DS=1000H,SS=2000H,AX=1A2BH,BX=1200H,CX=339AH,BP=1200H,SP=1350H,
SI=1354H,(11350H)=0A5H,(11351H)=3CH,(11352H)=0FFH,(11353H)=26H,
(11354H)=52H,(11355H)=0E7H,(126ª4H)=9DH,(126ª5H)=16H,
(21350H)=88H,(21351H)=51H.
以下各指令都在此环境下执行,在以下各小题的空格中填入相应个指令的执行结果。
实验代码:
MOVAX,1000H
MOVDS,AX;不能直接给DS,SS赋值,只能通过通用寄存器
MOVAX,2000H
MOVSS,AX
MOVAX,1A2BH
MOVBX,1200H
MOVCX,339AH
MOVBP,1200H
MOVSP,1350H
MOVSI,1354H
MOV0150H[BX],0A5H
MOV0151H[BX],3CH
MOV0152H[BX],0FFH
MOV0153H[BX],26H
MOV[SI],52H
MOV1H[SI],0E7H
MOV[26A4H],9DH
MOV[26A5H],16H
MOVSS:
[1350H],88H
MOVSS:
[1351H],51H
;在上面的环境下,以下一行行的运行
MOVAX,1352H
MOVAX,[1352H]
MOV0150H[BX],CH
MOVAX,0150H[BP]
POPAX
ADD[SI],CX
SUBBH,0150H[BX][SI]
INCBYTEPTR0152H[BX]
INCWORDPTR0150H[BX]
SARBYTEPTR0150H[BX],1
SALBYTEPTR0150H[BX],1
实验结果:
(1)MOVAX,1352H
AX=1352H
(2)MOVAX,[1352H]
AX=26FFH
(3)MOV0150H[BX],CH
(11350H)=33H,(11351H)=3CH
(4)MOVAX,0150H[BP]
AX=5188H
(5)POPAX
AX=5188H,SP=1352H
〔6〕ADD[SI],CX
(11354H)=ECH,(11355H)=1AH
SF=0,ZF=0,PF=0,CF=1,OF=0
(7)SUBBH,0150H[BX][SI]
BH=75H,SF=0,ZF=0,PF=0,CF=1,OF=0
(8)INCBYTEPTR0152H[BX]
(11352H)=00H,(11353H)=26H,CF=0,
(9)INCWORDPTR0150H[BX]
(11352H)=FFH,11353H=26H,CF=0
(10)SARBYTEPTR0150H[BX],1
(11350H)=D2H,CF=1,OF=0
(11)SALBYTEPTRO150H[BX],1
(11350H)=4AH,CF=1,OF=1
【思考题】指出以下指令中源操作数和目的操作数的寻址方式:
(一定要注意分开写寻址方式)
〔1〕MOVAX,0AH〔2〕ADD[BX],DX
〔3〕PUSHCS〔4〕POPDS
〔5〕MULBL〔6〕MOVDX,[1200H]
〔7〕MOVSB〔8〕SUBAX,5[BP+DI]
解:
〔1〕SRC为立即数寻址,DEST为寄存器寻址;
〔2〕SRC为寄存器寻址,DEST为寄存器间接寻址;
〔3〕SRC为寄存器寻址,DEST为隐含堆栈指针寄存器间接寻址;
〔4〕SRC为隐含堆栈指针寄存器间接寻址,DEST为寄存器寻址;
〔5〕SRC为寄存器寻址,DEST为寄存器寻址;
〔6〕SRC为直接寻址,DEST为寄存器寻址;
〔7〕SRC为寄存器间接寻址,DEST为寄存器间接寻址;
〔8〕SRC为基址变址相对寻址,DEST为寄存器寻址;
实验心得与体会:
本次实验考察的是8086指令的寻址方式,我们组在实验课的时候准备不够充分,导致当堂实验效果不明显,不过我们在课后有一起讨论每条语句的意思,并且在听过老师课堂上的讲解后,逐步地理解了这个实验,希望在下次实验过程中做好更充分的准备,以便在实验的过程中到达好的效果。
实验三综合程序设计
第一组:
谭浩敏、刘赏源、陈润强
【实验目的】
1.通过简单编程来理解80X86指令系统
2.掌握汇编语言程序的特点及格式
3.掌握定义和使用汇编语言的常量、标示符和表达式
4.掌握汇编语言编程技巧和编程方法。
【实验内容一】
实验内容1:
用MOV指令实现两内存字节单元内容的交换
代码:
MOV[2035H],01H
MOV[2045H],02H
MOVAX,[2035H]
MOVBX,[2045H]
MOV[2035H],BX
MOV[2045H],AX
实验内容2:
把2060H地址开始的40个字节单元的内容与2080H地址开始的40个字节单元内容互换。
代码:
DATASEGMENT
DATAENDS
STACKSEGMENT
ME1DW80HDUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DSDATA,SS:
STACK,ES:
DATA
START:
MOVAX,1000H
MOVDS,AX
MOVAX,2000H
MOVES,AX
MOVDI,2060H;循环赋值,从偏移量2060H开始
MOVBX,1H
MOVCX,28H;循环次数40次,28H是16进制
LOOP1:
MOV[DI],BX
INCBX
INCDI
DECCX
JNZLOOP1
MOVDI,2080H
MOVBX,2080H
MOVCX,8
TEMP:
MOVDX,[BX];此循环用来保存被覆盖的8个内存单元
MOVES:
[DI],DX;的数据,放在ES段中
INCDI
INCBX
DECCX
JNZTEMP
MOVDI,2080H;给后40个内存单元循环赋值,
MOVBX,50H;从偏移量2080H开始。
MOVCX,28H
LOOP2:
MOV[DI],BX
INCBX
INCDI
DECCX
JNZLOOP2
MOVSI,00H;交换40个字节内容
MOVDI,00H
MOVCX,28H
R:
MOVBL,[SI+2060H]
MOVBH,[DI+2080H]
MOV[DI+2080H],BL
MOV[SI+2060H],BH
INCSI
INCDI
DECCX
JNZR
CODEENDS
END
实验内容3:
如果X>50,转移到TOO-HIGH,在TOO-HIGH中将X显示出来;如果带符号减法X-Y引起溢出,则转移到OVERFLOW,在OVERFLOW中将X、Y和X-Y的结果显示出来;否则,计算|X-Y|,并将结果存放在RESULT中。
(其中,X,Y,RESULT均为字变量〕
代码:
DATASEGMENT
DAIDB'X=:
$'
DAI2DB'Y=:
$'
DAI3DB'|X-Y|=:
$'
XDW-32768
YDW32
RESULTDW0
DATAENDS
STACKSSEGMENT
DW128DUP(?
)
STACKSENDS
CODESEGMENT
ASSUMEDS:
DATA,CS:
CODE
START:
MOVAX,DATA
MOVDS,AX
MOVAX,X
CMPAX,50;比较
JGTOO-HIGH;如果(X)大于50,则转向TOO-HIGH
SUBAX,Y
JOOVERFLOW;溢出则转移
JNSNONNEG;无符号,则转
NEGAX;X—Y为正时,补码为其本身,为负时取补码刚好是它的相反数。
NONNEG:
MOVRESULT,AX;无溢出,取绝对值,并将结果存入RESULT
HLT;暂停
TOO-HIGH:
MOVDX,OFFSETDAI
MOVAH,09H
INT21H
MOVAX,X;取内存数到AX
CALLSHOW1;显示十进制形式
MOVAH,7;暂停
INT21H
MOVAX,4C00H;退出程序
INT21H
SHOW1:
XORCX,CX
MOVBX,10
NX1:
XORDX,DX
DIVBX
ORDX,0e30H
INCCX
PUSHDX
CMPAX,0
JNZNX1
NX2:
POPAX
INT10H
LOOPNX2
RET
OVERFLOW:
MOVDX,OFFSETDAI;显示X
MOVAH,09H
INT21H
MOVAX,X;取内存数到AX
CALLSHOW2;显示十进制形式
MOVAH,7;暂停
INT21H
MOVAX,4C00H;退出程序
INT21H
SHOW2:
XORCX,CX
MOVBX,10
NX3:
XORDX,DX
DIVBX
ORDX,0e30H
INCCX
PUSHDX
CMPAX,0
JNZNX3
NX4:
POPAX
INT10H
LOOPNX4
MOVDL,0AH
MOVAH,02H
INT21H
MOVDX,OFFSETDAI2;显示Y
MOVAH,09H
INT21H
MOVAX,Y;取内存数到AX
CALLSHOW3;显示十进制形式
MOVAH,7;暂停
INT21H
MOVAX,4C00H;退出程序
INT21H
SHOW3:
XORCX,CX
MOVBX,10
NX5:
XORDX,DX
DIVBX
ORDX,0e30H
INCCX
PUSHDX
CMPAX,0
JNZNX5
NX6:
POPAX
INT10H
LOOPNX6
MOVDL,0AH
MOVAH,02H
INT21H
MOVDX,OFFSETDAI3;显示|X-Y|
MOVAH,09H
INT21H
MOVBX,X
SUBBX,Y
MOVX,BX
MOVAX,X;取内存数到AX
CALLSHOW4;显示十进制形式
MOVAH,7;暂停
INT21H
MOVAX,4C00H;退出程序
INT21H
SHOW4:
XORCX,CX
MOVBX,10
NX7:
XORDX,DX
DIVBX
ORDX,0e30H
INCCX
PUSHDX
CMPAX,0
JNZNX7
NX8:
POPAX
INT10H
LOOPNX8
HLT
CODEENDS
ENDSTART
【实验总结】
内容一和内容二相对来说比较好理解,通过看一些实例,我们最终知道了应该怎么做,而内容三比较复杂,我们用了许多时间,不过最后经过组内的学习和讨论,终于做出来了。
我们都从中收获到了许多新知识。
实验四内存块移动实验
组长:
谭浩敏组员:
刘赏源,陈润强
一、实验目的
1、熟悉实验系统的编程和使用。
2、了解内存的移动方法。
3、加深对存储器读写的认识。
二、实验内容
实验内容1:
用汇编语言编写程序实现以下运算,并将最终结果显示在屏幕上。
假设变量X、Y、Z、V均为有符号的16位二进制。
(V-(X*Y+Z-540))/X
代码:
DATASEGMENT
DAI1DB0AH,0DH,'INPUTX,Y,Z,VORDERLY,EG:
+XXXX:
$'
DAI2DB0AH,0DH,'TYPEINTHENUMBER:
$'
DAI3DB0AH,0DH,'NUMBERX,Y,Z,VARE:
$'
DAI4DB0AH,0DH,'RESULTWIS:
$'
DAI5DB0AH,0DH,'EXTRAIS:
$'
BUFDB10
DB0
NUMDB200DUP(0)
XDW0
YDW0
ZDW0
VDW0
WDW2DUP(0)
DATAENDS
STACKSEGMENT
DB200DUP(0)
STACKENDS
CODESEGMENT
ASSUMEDS:
DATA,CS:
CODE,SS:
STACK
Start:
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETDAI1
MOVAH,09H
INT21H
INPUT:
MOVCH,04H
MOVDI,OFFSETX
DU04:
MOVDX,OFFSETDAI2
MOVAH,09H
INT21H
MOVDX,OFFSETBUF
MOVAH,0AH
INT21H
MOVCL,BUF[1]
DECCL
MOVAX,0
MOVSI,3
H1:
MOVBX,10
MULBX
MOVBL,BUF[SI]
SUBBL,30H
ADDAX,BX
INCSI
DECCL
JNZH1
CMPBUF[2],'-'
JNENONEGX
NEGAX
NONEGX:
MOV[DI],AX
INCDI
INCDI
DECCH
JNZDU04
MOVDX,OFFSETDAI3
MOVAH,09H
INT21H
MOVAX,X
CALLSHOW
MOVDL,','
MOVAH,02H
INT21H
MOVAX,Y
CALLSHOW
MOVDL,','
MOVAH,02H
INT21H
MOVAX,Z
CALLSHOW
MOVDL,','
MOVAH,02H
INT21H
MOVAX,V
CALLSHOW
MOVAX,X
IMULY
MOVCX,AX
MOVBX,DX
MOVAX,Z
CWD
ADDCX,AX
ADCBX,DX
SUBCX,540
SBBBX,0
MOVAX,V
CWD
SUBAX,CX
SBBDX,BX
IDIVX
MOVW,AX
MOVW+2,DX
MOVDX,OFFSETDAI4
MOVAH,09H
INT21H
MOVAX,W
CALLSHOW
MOVDX,OFFSETDAI5
MOVAH,09H
INT21H
MOVAX,W+2
CALLSHOW
MOVAH,4CH
INT21H
SHOW:
CMPAX,0
JGLOOP1
PUSHAX
MOVDL,'-'
MOVAH,02H
INT21H
POPAX
NEGAX
LOOP1:
XORCX,CX
MOVBX,10
Q0:
XORDX,DX
DIVBX
ORDX,0E30H
PUSHDX
INCCX
CMPAX,0
JNEQ0
Q1:
POPAX
INT10H
LOOPQ1
RET
CODEENDS
ENDSTART
三、实验体会
这次实验的难点主要在于各个数的输入与输出,汇编的数字输入要考虑很多问题,比方有符号数与无符号数,这对于不熟悉汇编的我们相对较难。
实验五循环程序设计
组长:
谭浩敏组员:
刘赏源、陈润强
【实验目的】:
1.学会思考程序的不足,并找出改良方法。
2.熟悉使用DOS和BIOS功能调用。
3.掌握汇编语言循环程序的编写。
【实验内容】:
1.“第3章〔3〕汇编程序设计.ppt”中的作业。
2.参考“第3章〔3〕汇编程序设计.ppt”关于排序的程序并完善和修改完成如下功能程序:
能通过键盘随机地输入几个数据(16位有符号数),然后进行从小到大进行排序,最后结果显示在屏幕上。
DATASEGMENT
DAI1DB0AH,0DH,'Pleasetypeinthenumber:
$'
DAI2DB0AH,0DH,'Thesortis:
',0AH,0DH,'$'
BUFDB10
DB0
NUMDB200DUP(0)
buf1DW10dup(0)
NEQU4
DATAENDS
STACKSEGMENT
DB200DUP(0)
STACKENDS
CODESEGMENT
ASSUMEDS:
DATA,CS:
CODE,SS:
STACK
Start:
MOVAX,DATA
MOVDS,AX
INPUT:
MOVCH,N
MOVDI,OFFSETbuf1
DU04:
MOVDX,OFFSETDAI1
MOVAH,09H
INT21H
MOVDX,OFFSETBUF;键盘输入四个数
MOVAH,0AH
INT21H
MOVCL,BUF[1]
DECCL
MOVAX,0
MOVSI,3
H1:
MOVBX,10
MULBX
MOVBL,BUF[SI]
SUBBL,30H
ADDAX,BX
INCSI
DECCL
JNZH1
CMPBUF[2],'+'
JZNONEGX
NEGAX
NONEGX:
MOV[DI],AX
INCDI
INCDI
DECCH
JNZDU04
;开始从小到大排序--------------------------------------------------------------------------
MOVCX,N
DECCX
LOOP1:
MOVDX,CX
MOVBX,0
LOOP2:
MOVAX,BUF1[BX]
CMPAX,BUF1[BX+2]
JLEL
XCHGAX,BUF1[BX+2]
MOVBUF1[BX],AX
L:
ADDBX,2
DECCX
JNELOOP2
MOVCX,DX
LOOPLOOP1
;---------------------完成排序--------------------
MOVDX,OFFSETDAI2
MOVAH,09H
INT21H
MOVDI,0
MOVCX,N
A:
pushax
pushdx
pushbx
pushcx
MOVAX,BUF1[DI]
CALLSHOW
popcx
c:
MOVDL,''
MOVAH,2
INT21H
popbx
popdx
popbx
INCDI
INCDI
LOOPA
exit:
MOVAH,4CH
INT21H
SHOW:
CMPAX,0
JGL1
PUSHAX
MOVDL,'-'
MOV