文档库 最新最全的文档下载
当前位置:文档库 › 微机原理课后答案

微机原理课后答案

微机原理课后答案。。。。救星啊啊
来源: 吴慧的日志
习题与思考题(参考答案)

第一章

1.6 将下列十进制数转换成二进制数。

256D =10000000B 237.135D=11101101.0010001B

12.58D=1100.100101B 0.374D=0.0101B

1.7 写出下列二进制数对应的十进制数、八进制数、十六进制数。

1101110B=110D=156Q=6EH 111011000B=472D=730Q=1D8H

1101111.1001B=111.5625D=157.44Q=6F.9H

1.8 填空:

10101.001B=(21.125)D=(25.1)Q=(15.2)H

2DE.6H=(1011011110.011)B=(1336.3)Q=(734.375)D

1.9 试写出下列用补码表示的二进制数的真值。

00111010 →00111010→+58 10000000→-128

10000101→11111011→-123 11111110→10000010→-2

01111110→01111110→+126

1.10 已知X=35,Y=-89,试用补码运算法则,求出:X+Y=?

[X]补=00100011 [Y]原=11011001 [Y]补=10100111

[X+Y]补=[X]补+[Y]补=00100011+10100111=11001010

X+Y=10110110B=-54

1.11 已知[X]补=10011011,[X+Y]补=10111001,试求:

① [X-Y]补=? (有溢出,结果出错。)

因为[X+Y]补=[X]补+[Y]补=10111001

所以[Y]补=[X+Y]补-[X]补=00011110

[-Y]补=11100010

[X-Y]补=[X]补+[-Y]补=10011011+11100010=01111101

② X、Y的真值各为多少?

[X]原=11100101,X的真值为-101;[Y]原=00011110,Y的真值为30

第二章

2.3 8086CPU的ALE信号的功能是什么?

答:ALE(Address Latch Enable)是8086CPU提供给地址锁存器的控制信号,在任何一个总线周期的T1状态,ALE输出有效电平(正脉冲),以表示当前地址/数据、地址/状态复用总线上输出的是地址信息,锁存器可利用它的下降沿将地址锁存起来。ALE信号不能浮空。

2.4 8086CPU内部的寄存器由哪几种类型组成?各自的作用是什么?

答:8086CPU内部有14个16位寄存器,可以分为以下三组:分别是通用寄存器组,段寄存器组,控制寄存器。

通用寄存器组可以分为两组:数据寄存器和地址指针与变址寄存器。

数据寄存器主要用来保存算术、逻辑运算的操作数、中间结果和地址。

地址指针与变址寄存器主要用于存放或指示操作数的偏移地址。

段寄存器组:8086/8088CPU内部设置了4个16位段寄存器,它们分别是代码段寄存器CS、数据段寄存器DS、堆栈段寄存器SS、附加段寄存器ES,由它们给出相应逻辑段的首地址,称为“段基址”。

控制寄存器:含指令指针IP及标志位寄存器FR。

IP用来存放将要执行的下一条指令在现行

代码段中的偏移地址。

标志寄存器FR用来存放运算结果的特征。

2.6 8086的存储器采用什么结构?

答:8086的存储器采用分体结构。1M的存储空间分成两个存储体:偶地址存储体和奇地址存储体,各为512K字节。

2.7 8086CPU访问存储器时物理地址是如何形成的?

答:8086CPU访问存储器时根据所执行的操作,自动选择某个段寄存器,将其中的内容(16位)自动左移4位形成20位地址的高16位,而20位地址的低4位自动添0,然后通过20位地址加法器再与16位偏移量相加,形成对应的物理地址。

2.10 名词解释

(1) 时钟周期:一个时钟脉冲的时间长度,CPU的时钟频率的倒数,也称T状态。

(2) 总线周期:CPU中,BIU完成一次访问存储器或I/O端口操作所需要的时间,称作一个总线周期,也称机器周期(Machine Cycle)。

(3) 指令周期:执行一条指令所需的时间称为指令周期。

(4)等待周期:在T3和T4之间插入的周期。

(4) 空闲状态:CPU不执行总线周期时的状态。

(5) 时序:计算机操作运行的时间顺序。

2.12 如果8086的CLK引脚输入的时钟脉冲频率为4MHz,那么一个基本的总线周期是多少?

答:T=1/4μs,那么一个基本的总线周期是4T=1μs。

第三章

3.5 已知某个系统的ROM容量为6K字节,首地址为2800H,求其最后一个单元的地址。

答:最后一个单元的地址=2800H+17FFH=3FFFH

3.6采用Intel 2114(1K×4位)RAM芯片,组成64K×8位的存储器,需要多少片2114?

答:需要128块。

注:扩展时需要的芯片数量可以这样计算:要构成一个容量为 M×N 位的存储器,若使用 p×k 位的芯片(p
3.7某RAM芯片的存储容量为4096×8位,则该芯片的引脚中有几条数据线和几条地址线?已知某RAM芯片引脚中有8条数据线,12条地址线,那么该芯片的存储容量是多少?

答:该芯片的外部引脚应有8条数据线,12条地址线。

RAM芯片引脚中有8条数据线,12条地址线,那么该芯片的存储容量是4K×8位。

3.8在8086存储器系统的最高地址区组成32KB的ROM,要求采用2764芯片(8K×8的EPROM),以及利用74LS138译码器进行全译码,请画出这些芯片与系统总线连接的示意图。




















74LS138



G1



G2A



G2B







&





O



A19



A18



A17



A16



A15



A14



A13



A



B



C



2764

(1)



2764

(2)



2764

(3)



2764

(4)



A12~A0



CE



CE



CE



CE



Y4



Y5



Y

6



Y7



O





第四章

4.1 试出指令MOV BX,3040H和MOV BX,[3040H]有什么不同?

1、寻址方式不同:立即数寻址和直接寻址。

2、运行结果不同:

MOV BX,3040H ;BX=3040H

MOV BX,[3040H] ;将DS段3040H和3041H的内容送BX



4.2 指出下列指令是否有错,并说明理由。

(1)MOV [DI],[SI] ;错,内存单元之间不能直接进行数据传送

(2)MOV CS,AX ;错,CS不能做目的操作数

(3)MOV 1200,AX ;错,立即数不能做目的操作数

(4)MOV DS,CS ;错,段寄存器之间不能互相传送

(5)POP CS ;错,CS不能做目的操作数

(6)MOV CL,AX ;错,源、目的操作数长度不一致

(7)MOV [5000H],[1000H];错,内存单元之间不能直接进行数据传送



4.3 在8086中,堆栈操作是字操作还是字节操作?已知SS=1050H,SP=0006H,AX=1234H,若对AX执行压栈操作(即执行PUSH AX);试问AX的内容存放在何处?

答:堆栈操作是字操作。

入栈时“先减后压”(SP先减2,再压入操作数),执行压栈操作后AL的内容存放在10504H,AH的内容存放在10505H。



4.4 假如要从200中减去AL中的内容,用SUB 200,AL对吗?如果不对,应采用什么方法?

答:不对,立即数不能作为目的操作数。先把立即数传送到一个存储器或寄存器当中。

例如:MOV BL,200

SUB BL,AL

或: NEG AL

ADD AL, 200

4.5 编程求AX累加器和BX寄存器中两个无符号数之差的绝对值,结果放内存(2800H)单元中。

解: CMP AX , BX CMP AX , BX CLC

JA PT1 JA PT1 SUB AX , BX

SUB BX , AX XCHG AX , BX JC PT1

MOV DX , 2800H PT1:SUB AX , BX MOV DI , 2800H

MOV DX ,BX MOV [2800H] , AX MOV [DI] , AX

HLT HLT HLT

PT1: SUB AX , BX PT1:SUB BX ,AX

MOV DX ,2800H MOV DI ,2800H

MOV DX , AX MOV [DI] , BX

HLT HLT



4.6 若有两个4字节的无符号数相加,这两个数分别存放在2000H和3000H开始的存储单元,将所求的和存放在2000H开始的内存单元中,试编制程序。

MOV DI , 2000H

LEA SI , 3000H

MOV AX , [DI]

MOV DX , [DI+2]

ADD AX , [SI]

ADC DX , [SI+2]

MOV [DI], AX

MOV [DI+2] , DX

4.7 用两种方法写出从88H端口读入信息的指令,再用两种方法写出从44H端口输出数据56H的指令。

方法一:IN AL , 88H 方法二:MOV DX,0088H

IN AX , DX

MOV AL , 56H MOV AL ,56H

OUT 44H , AL MOV DX ,0044H


OUT DX , AL

4.19 指出以下四条指令的作用(HEX为数据段的一个变量名)

⑴ MOV BX, HEX ;将变量HEX的内容传送到BX寄存器

⑵ LEA BX, HEX ;取变量HEX的偏移地址送BX

⑶ MOV BX, OFFSEG HEX ;BX指向变量HEX的偏移地址

⑷ MOV BX, SEG HEX ;将变量HEX所在段的段地址传送到BX



4.20 下面是变量定义伪指令,

DATA SEGMENT

BUF DW 3 DUP(5,2 DUP(8))

CED DB ‘Welcome to you’, ODH , OAH ,‘$’

ADDR DW BUF

COUNT EQU $-CED

DATA ENDS

问:

⑴ 按内存单元存放的先后次序,按字节写出数据段中的数据。

05H, 00H, 08H, 00H, 08H, 00H,

05H, 00H, 08H, 00H, 08H, 00H,

05H, 00H, 08H, 00H, 08H, 00H,

57H, 65H, 6CH, 63H, 6FH, 6DH, 65H, 20H, 74H, 6FH, 20H, 79H, 6FH, 75H,

0DH, 0AH, 24H, 00H, 00H

⑵ 说明 对BUF, CED, ADDR等变量施行TYPE, LENGTH SIZE运算符后,其结果分别为多少?

TYPE BUF = 2 LENGTH BUF = 3 SIZE BUF = 6

TYPE CED = 1 LENGTH CED = 1 SIZE CED = 1

TYPE ADDR = 2 LENGTH ADDR = 1 SIZE ADDR = 2

⑶ COUNT的值为多少?

19



4.22 编写一个将16位二进制数转换成BCD码数的程序。

DATA SEGMENT

BIN DB 5C0EH ;待转换数为23567

ADEC DB 5 DUP(?)

TAB DW 10000,1000,100,10,1

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DATA,

BXEDC PROC FAR

START: MOV AX, DATA

MOV DS, AX

LEA SI, TAB

LEA DI, ADEC

MOV AX, BIN

LOP0: XOR CL, CL

MOV BX, [SI]

LOP1: SUB AX, BX

JB NEXT

INC CL

JMP LOP1

NEXT: ADD AX, BX

MOV [DI], CL

INC SI

INC SI

INC DI

CMP BX, 1

JNZ LOP0

RET

BXEDC ENDP

CODE ENDS

END START



4.24 编写一个将16位二进制数转化为四位十六进制数的程序,并将十六进制数的各位显示出来。

注:答案中给了一个假定的16位二进制数。

DATA SEGMENT

BIN DW 1001110101111011B

HEXASC DB 4 DUP(20H)

DB ‘$’

DATA ENDS

STACK1 SEGMENT PARA STACK

DW 20H DUP(0)

STACKl ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DATA, SS:STACKl

BINHEX: MOV CH, 4 ;十六进制数的位数

MOV BX,BIN ;取待转移数据

MOV DI,OFFSET HEXASC ;取存放ASCII码首地址

CONV1: MOV CL,4

ROL BX,CL ;取4位二进制数

MOV AL,BL

AND AL,0FH

CMP AL,09H ;是0-9吗?

JBE ASCI ;是,转移

ADD AL,07H ;是A-F,先加07H

ASCI: ADD AL,30H ;加30H

MOV [DI],AL ;存结果

INC DI ;修

改指针

DEC CH

JNE CONVI ;计数未完,继续

LEA DX, HEXASC

MOV AH,09H

INT 21H

CODE ENDS

END BINHEX

很多同学的答案:

DATA SEGMENT

A DW 4

X DW (16位二进制数)

Y DB 4 DUP(?)

DATA ENDS

……

START: MOV CX, A

LEA DI, Y

AGAIN: MOV BX, X

PUSH CX

DEC CX

MOVING:SHR BX, 4

LOOP MOVING

POP CX

AND BL, 0FH

CMP BL, 09H

JG DAYU

ADD BL, 30H

JMP XIAOYU

DAYU: ADD BL, 37H

XIAOYU:MOV [DI], BL

INC DI

LOOP AGAIN

LEA DX, Y

MOV AH, 09H

INT 21H

CODE ENDS

END START



4.26 从BUF单元开始有10个带符号数:-1,3,248,90,42,9042,-4539,0,-28792。试找出它们的最大值、最小值和平均值,并分别送MAX、MIN和AVG单元。试编写完整的汇编语言程序。

DATA SEGMENT
BUFER DW -1,3,248,90,42,9042,-4539,0,-28792

MAX DW 0

MIN DW 0

AVG DW 0

DATA ENDS

STACK SEGMENT PARA STACK‘STACK’

DW 100 DUP (?)

STACK ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

START PROC FAR

BEGIN:PUSH DS

MOV AX,0

PUSH AX

MOV AX,DATA

MOV DS,AX

LEA SI,BUFFER

MOV AX,SI ; 和清0

MOV BX,AX ; 最大值

MOV DX,AX ; 最小值

INC SI

INC SI

MOV CX,9

LOP1: ADD AX,[SI]

CMP DX,[SI] ;与最小值单元中的值相比较

JE NEXT1 ;相等转至NEXT1

JG NEXT2 ;若大于转至NEXT2

MOV DX,[SI] ;把小的值送至DX

NEXT1: CMP BL,[DI] ;

JB NEXT2 ; 若低于转移

MOV BL,[DI]; 小值?BL (2分)

NEXT2: MOV DL,[DI];取一字节数据

ADD AX,DX ; 累加和

INC DI

LOOP LOP1

MOV MAX,BH;送大值

MOV MIN, BL;送小值

MOV DL, 6

DIV DL, ;求平均值

MOV AVI, AL;送平均值

RET

START ENDP

CODE ENDS

END BEGIN







5.1 8086CPU对其I/O端口的寻址采用哪种方式?它的四条输入指令:

IN AL,PORT;IN AL,DX ;IN AX,PORT;IN AX,DX的作用有何区别?

答:8086CPU对其I/O端口的寻址采用I/O端口单独寻址方式。

IN AL,PORT;直接寻址,从PORT端口读入(输入)一个字节到AL。

IN AL,DX ;间接寻址,从DX所指端口读入(输入)一个字节到AL。

IN AX,PORT;直接寻址,从PORT和PORT+1两个端口读入(输入)一个

字到AX。

IN AX,DX;间接寻址,从DX和DX+1两个端口读入(输入)一个字到AX。



5.5 某输入设备的接口电路中,其数据端口的地址为3F8H;状态端口地址为3FEH,当其D7位为1时,表示输入数据已准备好。试编写采用查询方式的数据传送程序段,要求从该设备读取100个字节,并存放到自2000H:2000H开始的内存单元之中。

MOV AX, 2000H

MOV DS, AX ;设定段基址

MOV DI, 2000H ;目的地址送DI

MOV CX, 100 ;字节数

READ:MOV DX, 3FEH ;指向状态口

IN AL, DX ;读入状态位

TEST AL, 80H ;数据准备好否?

JZ READ ;否,循环检测

MOV DX, 3F8H ;指向数据口

IN AL, DX ;已准备好,读入数据

MOV [DI], AL ;存到内存缓冲区中

INC DI ;修改地址指针

LOOP READ ;未传送完,继续传送

5.6 设计一个采用74LS138的I/O端口地址译码器,要求能寻址的端口地址范围分别是:

①340H~347H;②348H~34FH;③350H~357H;④378H~37FH。

答案不唯一。

①340H~347H
















74LS138



G1



G2A



G2B







&





A9



A8



A7



A2



A1



A0



A



B



C



Y0



Y7



A6



A5



A4



A3







&





5.16 某8086系统中有三片8259A安排为非缓冲、级连使用,两从片A、B分别接主片的IR2、IR4;三片8259A的端口地址分别为20H、22H、30H、32H、40H、42H;主片及从片A、从片B的IR5 上各接有一个外部中断源,其中断类型号分别为75H、7DH、85H;所有中断都采用电平触发方式、全嵌套、非自动EOI方式。试完成:

① 画出该系统中三片8259A级连部分简要的电器原理图;

② 编写出全部初始化程序








































8259A







8259A



CS



CS



INT



INT



Y3



Y2



A0



G1

G2A



G2B



AB6

AB5

AB4



AB7







M/IO

AB3

AB2

AB0



138



A0







8259A



CS



INT



A0



C

B

A



Y4



AB1



IR2



IR4



WR



IOR



IOW







去 CPU INTR



主片



A



B



RD



WR



RD



WR



RD



主片:ICW1=00011001B=19H ICW2=01110000B=70H ICW3=00010100B=14H ICW4=00000001B=01H

从片A:ICW1=00011001B=19H ICW2=01111000B=78H ICW3=00000010B=02H ICW4=00000001B=01H

从片B:ICW1=00011001B=19H

ICW2=10000000B=80H ICW3=00000100B=04H ICW4=00000001B=01H



主片初始化程序:

ICW1写入到偶端口地址20H;ICW2写入到奇端口地址22H

MOV AL, 19H

OUT 20H, AL ;写入ICW1

MOV AL, 70H

OUT 22H, AL ;写入ICW2

MOV AL, 02H

OUT 22H, AL

MOV AL, 01H

OUT 22H, AL



6.4 设8253计数器0~2和控制字寄存器的I/O地址依次为F8H~FBH,说明如下程序的作用。

MOV AL, 33H ;00110011B 计数器0,先低位后高位,方式1,BCD码计数

OUT 0FBH, AL ;写控制字

MOV AL, 80H ;置计数初值低位字节80H

OUT 0F8H, AL ;先写低位字节

MOV AL, 50H ;置计数初值高位字节50H

OUT 0F8H, AL ;写高位字节

程序的作用为:使计数器0工作在方式1,用BCD码计数,计数初值为5080。



6.5 设8253的4个端口地址分别为300H、302H、304H和306H,由CLK0输入计数脉冲频率为2MHz。要求通道0输出1.5kHz的方波,通道1、通道2均用通道0的输出作计数脉冲,通道1输出频率为300Hz的序列负脉冲,通道2每秒钟向CPU发50次中断请求。试编写初始化程序,并画出8253相关引脚的连线图。

通道0:输出方波则工作在方式3;计数初值为n0=2MHz/1.5kHz≈1334=536H(1.499kHz)

控制字为:00110110B=36H

通道1:输出序列负脉冲则工作在方式2;计数初值为n1=1.5kHz/300Hz=5=05H

控制字为:01010100B=54H

通道2:每秒钟向CPU发50次中断请求则工作在方式2;计数初值为n2=1500/50=30=1EH

控制字为:10010100B=94H

初始化程序:

通道0: MOV DX , 306H

MOV AL , 36H

OUT DX , AL

MOV DX , 300H

MOV AL , 36H

OUT DX , AL

MOV AL , 05H

OUT DX , AL


















GATE0

GATE1

GATE2



OUT0

CLK1

CLK2



2MHz



1.5KHz方波



300Hz序列负脉冲



每秒50次中断信号



CS



A1

A0



D7~D0



I/O

译码



M/IO



A7~A0



A2

A1



D7~D0



+5V



OUT2



CLK0



OUT1



WR



RD



WR



RD



7.3编程使8255A的PC5端输出一个负跳变。如果要求PC5端输出一个负脉冲,则程序又如何编写?

设端口地址分别为:B0H B2H B4H B6H。系统复位后8255A的所有端口都被置为输入。

控制字为:10000000B=80H

输出负跳变:

MOV AL, 80H

OUT B6H, AL

MOV AL, 0BH

OUT B6H, AL

……

MOV AL, 0AH

OUT B6H, AL

输出负脉冲:

MOV AL, 80H

OUT B6H, AL

MOV AL, 0BH

OUT B6H, AL

……

MOV AL, 0AH

OUT B6H, AL

……

MOV AL, 0BH

OUT B6H, AL

7.4假设图7.15键盘接口电路中8255A的A、B、C口和控制口地址为218H~21BH,写出完整的行反转法键盘扫描子程序。

KEY1: … ;

设置行线接输出端口ROWPORT,列线接输入端口COLPORT,并判断是否有键按下

KEY2: MOV AL, 00H

MOV DX, ROWPORT

OUT DX, AL ;行线全为低

MOV DX, COLPORT

IN AL, DX ;读取列值

CMP AL,0FFH

JZ KEY2 ;无闭合键,循环等待

PUSH AX ;有闭合键,保存列值

PUSH AX

… ;设置行线接输入端口ROWPORT,列线接输出端口COLPORT

MOV DX, COLPORT

POP AX

OUT DX,AL ;输出列值

MOV DX, ROWPORT

IN AL,DX ;读取行值

POP BX ;结合行列值,此时

MOV AH,BL ;AL=行值,AH=列值

;查找键代码

MOV SI, OFFSET TABLE ;TABLE为键值表

MOV DI, OFFSET CHAR ;CHAR为键对应的代码

MOV CX, 64 ;键的个数

KEY3: CMP AX, [SI] ;与键值比较

JZ KEY4 ;相同,说明查到

INC SI ;不相同,继续比较

INC SI

INC DI

LOOP KEY3

JMP KEY1 ;全部比较完,仍无相同,说明是重键

KEY4: MOV AL,[DI] ;获取键代码送AL

… ;判断按键是否释放,没有则等待

CALL DELAY ;按键释放,延时消除抖动

… ;后续处理

TABLE DW 0FEFEH ;键0的行列值(键值)

DW 0FDFEH ;键1的行列值

DW 0FBFEH ;键2的行列值

… ;全部键的行列值

CHAR DB … ;键0的代码

DB … ;键1的代码

… ;全部键的代码



7.5设某工业控制系统中,有四个有触点开关K0~K3控制,分别用于代表四种不同的工作状态,另有四个发光二极管L0~L3,要求CPU反复检测K0~K3的状态,并控制L0~L3的发光用来表示四个开关的状态,其中L0~L3分别与K0~K3对应,即当某Ki开关闭合时,则使对应的发光二极管Li点亮发光,开关Ki打开则对应发光二极管Li不亮。试画出系统的电器原理图并编写相应的程序。

设端口地址分别为:B0H B2H B4H B6H






















+5V



K3

K2

K1

K0



LED3

LED2

LED1

LED0



PA3

PA2

PA1

PA0



PB3

PB2

PB1

PB0



D7~D0

RD

WR

RESET



8255A



CS



A1

A0



Y3



C

B

A



G1

G2A

G2B







D7~D0

RD

WR

RESET



M/IO



A2

A1



A3

A4

A5



A0

A6



A7



8086



≥1



A口、B口都工作在

方式0,A口输入,B口输出,C口未用

控制字为:10010000B=90H

MOV AL,90H

OUT 0B6H,AL ;写入控制字

TEST:IN AL,0B0H ;从A口读入开关状态

OUT 0B2H,AL ;B口控制LED,指示开关状态

JMP TEST ;循环检测



8.4 设16550采用18.432MHZ基准时钟,端口地址为3F8~3FFH,要求的波特率为19200,字符格式为8位数据位、偶校验、1个停止位,试写出其初始化程序。

LCR地址:3FBH

① DL地址:3F8(DLAB=1) DH地址:3F9(DLAB=1) 除数=60=003CH

② LCR的值:00011011B=1BH

③ FIFO地址:3FAH;赋值10000111B=87H

MOV DX, 3FBH ;DX指向LCR

MOV AL,80H ;置DLAB=1

OUT DX,AL

MOV DX, 3F8H ;DX指向DL

MOV AL,3CH ;

OUT DX,AL ;送除数低字节

INC DX ;DX指向DH

MOV AL,00H

OUT DX,AL ;送除数高字节

MOV DX, 3FBH ;DX指向LCR

MOV AL,1BH ;8位数据位、偶校验、1个停止位

OUT DX,AL

MOV DX, 3FAH

MOV AL,87H ;允许FIFO

OUT DX,AL

相关文档
相关文档 最新文档