微机原理与接口技术课后答案第二版
【篇一:《微机原理与接口技术》(第二版)龚尚福-习题
解析和实验指导】
xt>2.2 8086微处理器由哪几部分组成?各部分的功能是什么?16355
【解】:按功能可分为两部分:总线接口单元biu(bus interface unit)和执行单元eu(execution unit)。
总线接口单元biu是8086 cpu在存储器和i/o设备之间的接口部件,负责对全部引脚的操作,即8086对存储器和i/o设备的所有操作都是由biu完成的。所有对外部总线的操作都必须有正确的地址和适当的控制信号,biu中的各部件主要是围绕这个目标设计的。它提供了16位双向数据总线、20位地址总线和若干条控制总线。
其具体任务是:负责从内存单元中预取指令,并将它们送到指令队列缓冲器暂存。cpu执行指令时,总线接口单元要配合执行单元,从指定的内存单元或i/o端口中取出数据传送给执行单元,或者把执行单元的处理结果传送到指定的内存单元或i/o端口中。
执行单元eu中包含1个16位的运算器alu、8个16位的寄存器、1个16位标志寄存器fr、1个运算暂存器和执行单元的控制电路。这个单元进行所有指令的解释和执行,同时管理上述有关的寄存器。eu对指令的执行是从取指令操作码开始的,它从总线接口单元的指令队列缓冲器中每次取一个字节。如果指令队列缓冲器中是空的,那么eu就要等待biu通过外部总线从存储器中取得指令并送到eu,通过译码电路分析,发出相应控制命令,控制alu数据总线中数据的流向。
2.3 简述8086 cpu的寄存器组织。
【解】:(1)通用寄存器:通用寄存器又称数据寄存器,既可作为16位数据寄存器使用,也可作为两个8位数据寄存器使用。当用作16位时,称为ax、bx、cx、dx。当用作8位时,ah、bh、ch、dh存放高字节,al、bl、cl、dl存放低字节,并且可独立寻址。这样,4个16位寄存器就可当作8个8位寄存器来使用。
(2)段寄存器:段寄存器共有4个cs、ds、ss、es。代码段寄存器cs表示当前使用的指令代码可以从该段寄存器指定的存储器段中取得,相应的偏移值则由ip提供;堆栈段寄存器ss指定当前堆栈的起始地址;数据段寄存器ds指示当前程序使用的数据所存放段的
起始地址;附加段寄存器es则指出当前程序使用附加段地址的起始位置,该段一般用来存放原始数据或运算结果。
(3)指针和变址寄存器:堆栈指针sp用以指出在堆栈段中当前栈顶的地址。入栈(push)和出栈(pop)指令由sp给出栈顶的偏移地址。基址指针bp指出要处理的数据在堆栈段中的基地址,故称为基址指针寄存器。变址寄存器si和di用来存放当前数据段中某个单元的偏移量。
(4)指令指针与标志寄存器:指令指针ip的功能跟z80 cpu中的程序计数器pc的功能类似。正常运行时,ip中存放的是biu要取的下一条指令的偏移地址。它具有自动加1功能,每当执行一次取指令操作时,它将自动加1,使它指向要取的下一内存单元,每取一个字节后ip内容加1,而取一个字后ip内容则加2。某些指令可使ip值改变,某些指令还可使ip值压入堆栈或从堆栈中弹出。标志寄存器flags是16位的寄存器,8086共使用了9个有效位,标志寄存器格式如图2.5所示。其中的6位是状态标志位,3位为控制标志位。状态标志位是当一些指令执行后,表征所产生数据的一些特征。而控制标志位则可以由程序写入,以达到控制处理机状态或程序执行方式的表征。
2.4 试述8086 cpu标志寄存器各位的含义与作用。 【解】:(1) 6个状态标志位的功能分别叙述如下:
cf(carry flag)——进位标志位。当执行一个加法(或减法)运算,使最高位产生进位(或借位)时,cf为1;否则为0。
pf(parity flag)——奇偶标志位。该标志位反映运算结果中1的个数是偶数还是奇数。当指令执行结果的低8位中含有偶数个1时,pf=1;否则pf=0。
af(auxiliary carry flag)——辅助进位标志位。当执行一个加法(或减法)运算,使结果的低4位向高4位有进位(或借位)时,af=1;否则af=0。
zf(zero flag)——零标志位。若当前的运算结果为零,zf=1;否则zf=0。
sf(sign flag)——符号标志位。它和运算结果的最高位相同。
of(overflow flag)——溢出标志位。当补码运算有溢出时,of=1;否则of=0。
(2) 3个控制标志位用来控制cpu的操作,由指令进行置位和复位。
df(direction flag)——方向标志位。它用以指定字符串处理时的方向,当该位置“1”时,字符串以递减顺序处理,即地址以从高到低顺序递减。反之,则以递增顺序处理。
if(interrupt enable flag)——中断允许标志位。它用来控制8086是否允许接收外部中断请求。若if=1,8086能响应外部中断,反之则不响应外部中断。
注意:if的状态不影响非屏蔽中断请求(nmi)和cpu内部中断请求。 tf(trap flag)——跟踪标志位。它是为调试程序而设定的陷阱控制位。当该位置“1”时,8086 cpu处于单步状态,此时cpu每执行完一条指令就自动产生一次内部中断。当该位复位后,cpu恢复正常工作。 2.5 8086中,存储器为什么采用分段管理?
【解】:8086/8088的地址总线宽度为20位,其最大寻址空间是1 mb。而其他微处理器则在实模式下只能访问前1 mb的存储器地址。实际上,实模式就是为8086/8088而设计的工作方式,它要解决在16位字长的机器里怎么提供20位地址的问题,而解决的办法是采用存储器地址分段的方法。程序员在编制程序时要把存储器划分成段,在每个段内地址空间是线性增长的。每个段的大小可达64 kb,这样段内地址可以用16位表示。存储器分段的方法虽然给程序设计带来一定的麻烦,但这种方法可以扩大存储空间,而且对于程序的再定位也是很方便的。
2.6 什么是逻辑地址?什么是物理地址?如何由逻辑地址计算物理地址?
【解】:物理地址:完成存储器单元或i/o端口寻址的实际地址成为物理地址,cpu型号不同其物理地址也不同。物理地址是指cpu和存储器进行数据交换时实际所使用的地址,而逻辑地址是程序使用的地址。物理地址由两部分组成:段基址(段起始地址高16位)和偏移地址。前者由段寄存器给出,后者是指存储单元所在的位置离段起始地址的偏移距离。当cpu寻址某个存储单元时,先将段寄存器的内容左移4位,然后加上指令中提供的16位偏移地址而形成20位物理地址。在取指令时,cpu自动选择代码段寄存器cs,左移4位后,加上指令提供的16位偏移地址,计算出要取指令的物理地址。堆栈操作时,cpu自动选择堆栈段寄存器ss,将其内容左移4位后,加上指令提供的16位偏移地址,计算出栈顶单元的物理地址。每当存取操作数时,cpu会自动选择数据段寄存器(或附加段寄存器es),
将段基值左移4位后加上16位偏移地址,得到操作数在内存的物理地址。
2.9 在80x86微机的输入/输出指令中,i/o端号通常是由dx寄存器提供的,但有时也可以在指令中直接指定00h~0ffh的端口号。试问可直接由指令指定的i/o端口数是多少?
【解】:由于在80x86的输入/输出指令中,可以直接在00h~0ffh指定,所以直接由指令指定的i/o端口数是256。 3.1 指令分成几部分?每部分的作用是什么?
【解】:每条指令由两部分组成:操作码字段和地址码字段。操作码字段:用来说明该指令 所要完成的操作。
地址码字段:用来描述该指令的操作对象。一般是直接给出操作数,或者给出操作数存放的寄存器编号,或者给出操作数存放的存储单元的地址或有关地址的信息。
3.2 指出下列mov指令的源操作数的寻址方式: mov ax,1234h mov mov mov mov mov mov
mov ax,bx ax,[bx] ax,table;table ;table是一个变量名 ax,[1234h] ax,[bx+1234h] ax,[bp][si] ax,[bx+si-1234h] 【解】:mov ax,1234h 立即寻址 mov ax,bx 寄存器寻址
mov ax,[bx] 寄存器间接寻址
mov ax,table ;table是一个变量名 直接寻址方式 mov ax,[1234h] 直接寻址方式
mov ax,[bx+1234h]寄存器相对寻址 mov ax,[bp][si] 基址变址寻址
mov ax,[bx+si-1234h] 相对地址变址寻址
3.3 设:(ds)=2000h,(bx)=0100h,(ss)=1000h,(bp)=0010h,table的物理地址为2000ah,(si)=0002h。求下列每条指令源操作数的存储单元地址: mov ax,[1234h]
相关推荐: