习题与思考题(参考答案)第一章1.6 将下列十进制数转换成二进制数。
256D =10000000B 237.135D=11101101.0010001B12.58D=1100.100101B 0.374D=0.0101B1.7 写出下列二进制数对应的十进制数、八进制数、十六进制数。
1101110B=110D=156Q=6EH 111011000B=472D=730Q=1D8H1101111.1001B=111.5625D=157.44Q=6F.9H1.8 填空:10101.001B=(21.125)D=(25.1)Q=(15.2)H2DE.6H=(1011011110.011)B=(1336.3)Q=(734.375)D1.9 试写出下列用补码表示的二进制数的真值。
00111010 →00111010→+5810000000→-12810000101→11111011→-123 11111110→10000010→-201111110→01111110→+1261.10 已知X=35,Y=-89,试用补码运算法则,求出:X+Y=?[X]补=00100011 [Y]原=11011001 [Y]补=10100111[X+Y]补=[X]补+[Y]补=00100011+10100111=11001010X+Y=10110110B=-541.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=3FFFH3.6采用Intel 2114(1K×4位)RAM芯片,组成64K×8位的存储器,需要多少片2114?答:需要128块。
注:扩展时需要的芯片数量可以这样计算:要构成一个容量为M×N 位的存储器,若使用p×k 位的芯片(p<M,k<N),则构成这个存储器需要( M/p )×( N/k )个这样的存储器芯片。
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译码器进行全译码,请画出这些芯片与系统总线连接的示意图。
74LS138G1 G2A G2B&OA19 A18 A17 A16 A15 A14 A13 ABC2764 (1)2764 (2)2764 (3)2764 (4)A12~A0CECECECEY4Y5Y6Y7O第四章4.1 试出指令MOV BX,3040H和MOV BX,[3040H]有什么不同?1、寻址方式不同:立即数寻址和直接寻址。
2、运行结果不同:MOV BX,3040H ;BX=3040HMOV BX,[3040H] ;将DS段3040H和3041H的内容送BX4.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,200SUB BL,AL或:NEG ALADD AL, 2004.5 编程求AX累加器和BX寄存器中两个无符号数之差的绝对值,结果放内存(2800H)单元中。
解:CMP AX , BX CMP AX , BX CLCJA PT1 JA PT1 SUB AX , BXSUB BX , AX XCHG AX , BX JC PT1MOV DX , 2800H PT1:SUB AX , BX MOV DI , 2800HMOV DX ,BX MOV [2800H] , AX MOV [DI] , AXHLT HLT HLTPT1: SUB AX , BX PT1:SUB BX ,AXMOV DX ,2800H MOV DI ,2800HMOV DX , AX MOV [DI] , BXHLT HLT4.6 若有两个4字节的无符号数相加,这两个数分别存放在2000H和3000H开始的存储单元,将所求的和存放在2000H开始的内存单元中,试编制程序。
MOV DI , 2000HLEA SI , 3000HMOV AX , [DI]MOV DX , [DI+2]ADD AX , [SI]ADC DX , [SI+2]MOV [DI], AXMOV [DI+2] , DX4.7 用两种方法写出从88H端口读入信息的指令,再用两种方法写出从44H端口输出数据56H的指令。
方法一:IN AL , 88H 方法二:MOV DX,0088HIN AX , DXMOV AL , 56H MOV AL ,56HOUT 44H , AL MOV DX ,0044HOUT DX , AL4.19 指出以下四条指令的作用(HEX为数据段的一个变量名)⑴MOV BX, HEX ;将变量HEX的内容传送到BX寄存器⑵LEA BX, HEX ;取变量HEX的偏移地址送BX⑶MOV BX, OFFSEG HEX ;BX指向变量HEX的偏移地址⑷MOV BX, SEG HEX ;将变量HEX所在段的段地址传送到BX4.20 下面是变量定义伪指令,DA TA SEGMENTBUF DW 3 DUP(5,2 DUP(8))CED DB ‘Welcome to you’, ODH , OAH ,‘$’ADDR DW BUFCOUNT EQU $-CEDDA TA 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 = 6TYPE CED = 1 LENGTH CED = 1 SIZE CED = 1TYPE ADDR = 2 LENGTH ADDR = 1 SIZE ADDR = 2⑶COUNT的值为多少?194.22 编写一个将16位二进制数转换成BCD码数的程序。