微机原理.docx
《微机原理.docx》由会员分享,可在线阅读,更多相关《微机原理.docx(35页珍藏版)》请在冰豆网上搜索。
微机原理
微机原理与接口技术
第一章作业习题课
2.微处理器,微型计算机,微型计算机系统有什么联系与区别?
微处理器只是一个中央处理器(CPU),由算术逻辑部件(ALU),累加器和通用寄存器组,程序计数器,时序和控制逻辑部件,内部总线等组成。
微处理器不能构成独立工作的系统,也不能独立执行程序,必须配上存储器,外部输入、输出接口构成一台微型计算机方能工作。
微型计算机由CPU,存储器,输入/输出接口电路和系统总线组成。
它已具有计算功能,能独立执行程序,但若没有输入/输出设备,数据及程序不能输入,运算结果无法显示或输出,仍不能正常工作。
以微型计算机为主体,配上外部输入/输出设备及系统软件就构成了微型计算机系统。
没有配置软件的计算机称为裸机,仍然什么工作也不能做,必须配置系统软件和应用软件,这样才可以正常提供使用。
3.微处理器有哪些主要部件组成?
其功能是什么?
微处理器是中央处理器(CPU)。
它是由算术逻辑部件(ALU),累加器和寄存器组,指令指针寄存器IP,段寄存器,时序和控制逻辑部件,内部总线等组成。
微处理器主要部件作用:
算术逻辑部件主要完成算术运算及逻辑运算。
通用寄存器组用来存放参加运算的数据、中间结果或地址。
程序计数器指向要执行的下一条指令,顺序执行指令时,每取一个指令字节,程序计数器加1。
控制逻辑部件负责对整机的控制,包括从存储器中取指令,对指令进行译码和分析,确定指令的操作及操作相应的控制信号和时序,送到微型计算机的其他部件,使CPU内部及外部协调工作。
内部总线用来传送CPU内部的数据及控制信号。
第2章作业
1.8086CPU由哪两部分组成?
它们的主要功能是什么?
8086CPU由总线接口部件BIU和指令执行部件EU组成,BIU和EU的操作是并行的。
总线接口部件BIU的功能:
地址形成、取指令、指令排队、读/写操作数和总线控制。
所有与外部的操作由其完成。
指令执行部件EU的功能:
指令译码,执行指令。
2.8086CPU中有哪些寄存器?
各有什么用途?
8086CPU的寄存器有通用寄存器组、指针和变址寄存器、段寄存器、指令指针寄存器及标志位寄存器PSW。
4个16位通用寄存器,它们分别是AX,BX,CX,DX,用以存放16位数据或地址。
也可分为8个8位寄存器来使用,低8位是AL、BL、CL、DL,高8位是AH、BH、CH、DH,只能存放8位数据,不能存放地址。
指针和变址寄存器存放的内容是某一段内地址偏移量,用来形成操作数地址,主要在堆栈操作和变址运算中使用。
段寄存器给出相应逻辑段的首地址,称为“段基址”。
段基址与段内偏移地址结合形成20位物理地址。
指令指针寄存器用来存放将要执行的下一条指令在现行代码中的偏移地址。
16位标志寄存器PSW用来存放运算结果的特征,常用作后续条件转移指令的转移控制条件。
5.要完成下述运算或控制,用什么标志位判断?
其值是什么?
⑴比较两数是否相等?
将两数相减,当全零标志位ZF=1时,说明两数相等,当ZF=0时,两数不等。
⑵两数运算后结果是正数还是负数?
用符号标志位SF来判断,SF=1,为负数;SF=0,为正数。
⑶两数相加后是否溢出?
用溢出标志位来判断,OF=1,产生溢出;OF=0,没有溢出。
⑷采用偶校验方式。
判定是否要补“1”?
用奇偶校验标志位判断,有偶数个“1”时,PF=1,不需要补“1”;有奇数个“1”时,PF=0,需要补“1”。
(5)两数相减后比较大小?
ZF=1时,说明两数是相等的;
ZF=0时:
无符号数时,CF=0,被减数大;CF=1,被减数小。
带符号数时,SF=OF=0或SF=OF=1,被减数大;SF=1,OF=0或SF=0,OF1,被减数小。
(6)中断信号能否允许?
用中断标志位来判断,IF=1,允许CPU响应可屏蔽中断;IF=0,不响应。
6.8086系统中存储器采用什么结构?
用什么信号来选中存储体?
8086存储器采用分体式结构:
偶地址存储体和奇地址存储体,各为512k。
用A0和BHE来选择存储体。
当A0=0时,访问偶地址存储体;当BHE=0时,访问奇地址存储体;当A0=0,BHE=0时,访问两个存储体。
9.实模式下,段寄存器装入如下数据,写出每段的起始和结束地址。
a)1000H10000H~1FFFFH
b)1234H12340H~2233FH
c)2300H23000H~32FFFH
d)E000HE0000H~EFFFFH
e)AB00HAB000H~BAFFFH
10.在实模式下对下列CS:
IP的组合,求出要执行的下一条指令的存储器地址。
a)CS:
IP=1000H:
2000H12000H
b)CS:
IP=2000H:
1000H21000H
c)CS:
IP=1A00H:
B000H25000H
d)CS:
IP=3456H:
AB09H3F069H
11.实模式下,求下列寄存器组合所寻址的存储单元地址:
a)DS=1000H,DI=2000H12000H
b)SS=2300H,BP=3200H26200H
c)DS=A000H,BX=1000HA1000H
d)SS=2900H,SP=3A00H2CA00H
12.若当前SS=3500H,SP=0800H,说明堆栈段在存储器中的物理地址,若此时入栈10个字节,SP内容是什么?
若再出栈6个字节,SP为什么值?
堆栈段的物理地址范围:
35000H~44FFFH
当前栈顶的物理地址为:
35000H+0800H=35800H
入栈10个字节以后:
SP=0800H-000AH=07F6H
出栈6个字节以后:
SP=07F6H+0006H=07FCH
13.某程序数据段中存放了两个字,1EE5H和2A8CH,已知DS=7850H,数据存放的偏移地址为3121H及285AH。
试画图说明它们在存储器中的存放情况。
若要读取这个两个字,需要对存储器进行几次操作?
它们的物理地址分别是:
78500H+3121H=7B621H,78500H+285AH=7AD5AH。
1EE5H的偏移地址是3121H,是奇地址,需要进行两次操作;2A8CH的偏移地址是285AH,是偶地址,需要一次操作。
15.说明8086系统中“最小模式”和“最大模式”两种工作方式的主要区别是什么?
最小模式为单机系统,系统中所需要的控制信号由CPU提供,实现和存储器及I/O接口电路的连接。
最大模式可以构成多处理器/协处理器系统,即一个系统中存在两个以上微处理器,每个处理器执行自己的程序。
系统中所需要的控制信号由总线控制器8288提供,8086CPU提供信号控制8288,以实现全局资源分配及总线控制权传递。
在两种模式中,CPU的24~31引脚意义不同。
最小模式中引脚MN/MX接+5V,最大模式中该引脚接地。
16.8086系统中为什么要用地址锁存器?
8282地址锁存器与CPU如何连接?
CPU与存储器(或者I/O端口)进行数据交换时,CPU首先要送出地址信号,然后再发出控制信号及传送数据。
由于8086引脚的限制,地址和数据分时复用一组总线,所以要加入地址锁存器,先锁存地址,使在读/写总线周期内地址稳定。
8282是三态缓冲的8位数据交换锁存器,由选通信号STB与CPU的地址锁存允许信号ALE相连,当STB端选通信号出现,8位输入数据锁存到8个D触发器中。
17.哪个标志位控制CPU的INTR引脚?
中断允许标志位IF控制INTR引脚的中断输入。
18.什么叫总线周期?
在CPU读/写总线周期中,数据在哪个机器状态出现在数据总线上?
总线周期:
BIU完成一次访问存储器或I/O端口操作所需要的时间。
读总线周期,在T3或TW状态数据出现在数据总线上;写总线周期,在T2状态数据出现在数据总线上。
20.8086CPU重新启动后,从何处开始执行指令?
从内存的FFFF0H开始执行指令。
21.8086CPU最小模式系统配置包括哪几部分?
包括时钟发生器、地址锁存器、数据收发器、存储器及I/O接口。
补充题1:
已知段地址和偏移地址分别为2015H和0028H,此存储单元的物理地址是什么?
存储单元的物理地址:
20150H+0028H=20178H
补充题2:
若CS=A000H,求当前代码在存储器中的物理地址范围是什么?
若数据段位于52000H到61FFFH的64K范围内,问DS=?
物理地址范围:
A0000H~AFFFFH,DS=5200H。
第三章作业习题课
2.DS=1000H,BX=0200H,SI=0002H
(10200H~10205H)依次存有10H,2AH,3CH,46H,59H,6BH
(1)MOVAX,0200H;AX=0200
(2)MOVAX,[200H]
物理地址=1000H×10H+0200H=10200H,AX=2A10H
(3)MOVAX,BX;AX=0200H
(4)MOVAX,3[BX]
物理地址=1000H×10H+0200H+3H=10203H,AX=5946H
(5)MOVAX,[BX+SI]
物理地址=1000H×10H+0200H+2H=10202H,AX=463CH
(6)MOVAX,2[BX+SI]
物理地址=1000H×10H+200H+2H+2H=10204H,AX=6B59H
3.DS=1000H,ES=2000H,SS=3500H,
SI=00A0H,DI=0024H,BX=0100H,BP=0200H,VAL=0030H
(1)MOVAX,[100H]直接寻址方式,10100H
物理地址=DS×10H+100H=10000H+0100H=10100H
(2)MOVAX,VAL直接寻址方式,10030H
物理地址=DS×10H+VAL=10000H+0030H=10030H
(3)MOVAX,[BX]寄存器间接寻址,10100H
物理地址=DS×10H+BX=10000H+0100H=10100H
(4)MOVAX,ES:
[BX]寄存器间接寻址,20100H
物理地址=ES×10H+BX=20000H+0100H=20100H
(5)MOVAX,[SI]寄存器间接寻址,100A0H
物理地址=DS×10H+SI=10000H+00A0H=100A0H
(6)MOVAX,[BX+10H]寄存器相对寻址,10110H
物理地址=DS×10H+BX+10H=10000H+0100H+10H=10110H
(7)MOVAX,[BP]寄存器间接寻址,35200H
物理地址=SS×10H+BP=35000H+0200H=35200H
(8)MOVAX,VAL[BP][SI]相对基址变址寻址,352D0H
物理地址=SS×10H+BP+SI+VAL
=35000H+0200H+00A0H+0030H=352D0H
(9)MOVAX,VAL[BX][DI]相对基址变址寻址,10154H
物理地址=DS×10H+BX+DI+VAL
=10000H+0100H+0024H+0030H=10154H
(10)MOVAX,[BP][DI]基址变址寻址,35224H
物理地址=SS×10H+BP+DI
=35000H+0200H+0024H=35224H
6.
(1)MOVDL,AX
错,寄存器寻址方式中,目的操作数与源操作数长度必须一致
(2)MOV8650H,AX
错,目的操作数不可以是立即数
(3)MOVDS,0200H
错,MOV指令不允许将立即数传入段寄存器
(4)MOV[BX],[1200H]
错,MOV指令的两个操作数不能同时为存储器
(5)MOVIP,0FFH
错,IP不能作为MOV指令的目的操作数
(6)MOV[BX+SI+3],IP
错,IP不能作为MOV指令的源操作数
(7)MOVAX,[BX][BP]
错,BX与BP不可以同时出现在源操作数当中
(8)MOVAL,ES:
[BP]对
(9)MOVDL,[SI][DI]
错,SI与DI是两个变址寄存器,不可以同时出现在源操作数中。
(10)MOVAX,OFFSET0A20H
错,OFFSET后面跟的应该是符号地址,再把符号地址的值作为操作数。
(11)MOVAL,OFFSETTABLE
错,TABLE的偏移地址是16位,目的与源长度不一致
(12)XCHGAL,50H
错,交换指令可以在寄存器之间,寄存器和存储器之间进行,不可以是立即数。
(13)INBL,05H
错,BL不能作为IN指令的目的操作数,只能用AL或AX
(14)OUTAL,0FFEH
错,端口地址0FFEH>FFH,应用DX间接寻址,同时源操作数和目标操作数的位置颠倒了,应改为OUTDX,AL。
8.SS=1050H,SP=0100H,AX=4860H,BX=1287H
10.ARRAYDB…………
NEWDB7DUP(?
)
SUMDW0
AVERAGEDB0
(1)MOVCX,07H
MOVBX,00H
NEXT:
MOVAL,ARRAY[BX]
ADDAL,5
DAA
MOVNEW[BX],AL
INCBX
LOOPNEXT
HLT
(2)MOVCX,06H
MOVBX,01H
MOVAH,00H
MOVAL,ARRAY
L1:
ADDAL,ARRAY[BX]
DAA
ADCAH,00H;将进位加到AH中
INCBX
LOOPL1
MOVSUM,AX
(3)MOVDX,SUM;DX=0×××H(BCD码)
MOVBL,07H
MOVAX,DX;取千位、百位数
ANDAL,0F0H
MOVCL,04H
ROLAL,CL;AX=0×0×H
AAD;AL←AH×10+AL,AH←00
DIVBL;十位商在AL中,余数在AH中
MOVAVERAGE+1,AL;存平均成绩十位
MOVAL,DL;取个位和数
ANDAL,0FH
AAD;AL←AH×10+AL,AH←00
DIVBL;个位商在AL中,余数在AH中
MOVAVERAGE,AL;存平均成绩个位
MOVAVERAGE+2,AH;存余数
11.AX=2508H,BX=0F36H,CX=0004H,DX=1864H
(1)ANDAH,CL
AH=04H,CF=0;(00100101B与00000100B)
(2)ORBL,30H
BL=36H,CF=0;(00110110B或00110000B)
(3)NOTAX
AX=DAF7H,CF无影响;(0010010100001000B取反后1101101011110111B)
(4)XORCX,0FFF0H
CX=FFF4H,CF=0;(0000000000000100B和1111111111110000B异或后1111111111110100B)
(5)TESTDH,0FH
TEST操作并不修改结果,CF=0;
(6)CMPCX,00H
CMP操作并不修改结果,CF=0;
(7)SHRDX,CL
DX=0186H,CF=0;
(8)SARAL,1
AH=04H,CF=0;
(9)SHLBH,CL
BH=F0H,CF=0;
(10)SALAX,1
AX=4A10H,CF=0;(0010010100001000B左移)
(11)RCLBX,1
若程序执行之前CF=0,BX=1E6CH,CF=0;
若程序执行之前CF=1,BX=1E6DH,CF=0。
(12)RORDX,CL
DX=4186H,CF=0。
12.DATASEGMENT
STRINGDB‘Thepersonalcomputer&TV’
DATAENDS
EDATASEGMENT
GET_CHARDB26DUP(?
)
NEW_STRDB‘Thecomputer’
EDATAENDS
(1)MOVSI,OFFSETSTRING
MOVDI,OFFSETGET_CHAR
MOVCX,001AH
CLD
REPMOVSB
(2)MOVSI,OFFSETSTRING
MOVDI,OFFSETNEW_STR
MOVCX,001AH
CLD
REPZCMPSB;DS:
SI-ES:
DI
JNECLR_AL
MOVAL,1
JMPSET_BL
CLR_AL:
MOVAL,0
SET_BL:
MOVBL,001AH
SUBBL,CL
HLT
(3)MOVDI,OFFSETSTRING
MOVCX,001AH
MOVAL,‘&’
CLD
L1:
SCASB;AL-ES:
DI
JZFIND
NEXT:
LOOPL1
HLT
FIND:
MOVBL,‘’
MOV[DI-1],BL;用空格替换&
JMPNEXT
(4)MOVSI,OFFSETSTRING;数据段,源串
MOVDI,OFFSETCAPS;附加段,大写字符
MOVBX,OFFSETCHART;附加段,其它字符
MOVCX,001AH
CLD
L1:
LODSB;AL←DS:
SI
MOV[SI-1],00H;取出字符后该单元清零
CMPAL,‘A’
JBOTHER
CMPAL,‘Z’
JAOTHER
STOSB;存大写字符
JMPL2
OTHER:
XCHGBX,DI;存其它字符
STOSB
XCHGBX,DI
L2:
LOOPL1
HLT
14.
(1)JMPPROG_N
段内直接近转移,目的地址为1200H:
0278H(或12278H)
(2)JMPBX
段内寄存器间接转移,目的地址为1200H:
0300H(或12300H)
(3)JMP[BX]
物理地址=DS×10H+BX=2000H×10H+0300H=20300H
(20300H)=4800H®IP
段内存储器间接转移,目的地址为1200H:
4800H(或16800H)
(4)JMPFARPROG_F
段间立接转移,目的地址为3400H:
0ABCH(或34ABCH)
(5)JMPDWORDPTR[BX]
物理地址=DS×10H+BX=2000H×10H+0300H=20300H
(20300H)=4800H®IP,(20302H)=00FFH®CS
段间存储器间接转移,目的地址为00FFH:
4800H(或057F0H)
JMP改为CALL后,目的地址与JMP相同。
(1)CALLPROG_N
段内直接调用,3字节指令,0103H入栈
(2)CALLBX
段内寄存器间接调用,2字节指令,0102H入栈
(3)CALL[BX]
段内存储器间接调用,2字节指令,0102H入栈
(4)CALLFARPROG_F
段间直接调用,5字节指令,1200H和0105H分别入栈
(5)CALLDWORDPTR[BX]
段间间接调用,2字节指令,1200H和0102H分别入栈
15.
(1)LOOPNEXT
(2)LOOPENEXT
(3)LOOPNENEXT
START:
MOVAX,01H
MOVBX,02H
MOVDX,03H
MOVCX,04H
NEXT:
INCAX
ADDBX,AX
SHRDX,1
()
程序运行前DX=00000011B
(1)AX=05HBX=10HCX=00HDX=00H
(2)AX=02HBX=04HCX=03HDX=01H
(3)AX=03HBX=07HCX=02HDX=00H
18.
(1)中断类型号为0040H/4=10H
(2)中断服务程序的段地址为D169H,偏移地址为240BH,即D169H:
240BH,物理地址为D169H×10H+240BH=D3A9BH
第4章作业习题课
1.下列变量各占多少字节?
A1DW23H,5876H
A2DB3DUP(?
),0AH,0DH,‘$’
A3DD5DUP(1234H,567890H)
A4DB4DUP(3DUP(1,2,‘ABC’))
解:
A1变量占4个字节;
A2变量占6个字节;
A3变量占5×8=40个字节;
A4变量占4×3×5=60个字节;
3.有符号定义语句如下:
BUFDB3,4,5,‘123’
ABUFDB0
LEQUABUF-BUF
求L的值为多少?
解:
BUF共定义了6个字节,则ABUF的地址为ABUF+6,因此L的值为6。
19.应考虑数组中可能出现多个0的情况
程序如下:
EDATASEGMENT;定义数据段
BUFFDBN,XXH,……
MEQU0
EDATAENDS
;
STACKSEGMENTSTACK;定义堆栈段
DW50HDUP(?
)
TOPLABELWORD
STACKENDS
;
CODESEGMENT;定义代码段
ASSUMECS:
CODE,ES:
EDATA,DS:
EDATA,SS:
STACK
MAINPROCFAR
START:
MOVAX,STACK;初始化堆栈段
MOVSS,AX
MOVSP,OFFSETTOP
PUSHDS;程序段前缀
MOVAX,0
PUSHAX
MOVAX,EDATA;初始化ES,DS
MOVES,AX
MOVDS,AX
MOVAL,M;关键字M存入AX
MOVDI,OFFSETBUFF
MOVCX,[DI];数组长度存入CX
INCDI;指向数组起始地址
CLD;清方向标志
L1:
REPNESCASB;重复搜索关键字
JNZSTOP;未找到,转STOP结束
JCXZSTOP;最后一个数是M,转STOP
PUS