第一章
2. 第3项任务,根据状态标志位的状态决定转移方向。
3. 程序存储是将要执行的程序的全部指令存储到存储器中,程序控制指程序开始执行后,通过指令流控制数据或计算机,完成设定的任务。
4. 分BIU 总线接口部件和EI执行部件两大部件,其中总线接口部件BIU负责取指令和数据,执行部件EI负责执行指令及运算。在执行一条指令的同时可以取下一条指令,重叠运行,速度快。
5. 有6个状态标志,分别为进位标志CF、溢出标志OF、零标志ZF、奇偶标志PF、负标志SF、辅助进位标志AF。3个控制标志分别为中断允许标志IF、单步标志TF、方向标志DF。
标志位的内容可以通过标志位操作指令来操作,例如CLC指令清除进位位,即使CF=0,STC指令使CF=1,CLI指令使IF=0,禁止中断,STI指令使IF=1,允许中断。还可以通过LAHF指令取来标识寄存器的内容修改后用SAHF指令送回去。也可以用PUSHF/POPF指令来修改标志寄存器的内容。
6. 实模式下分段靠4个段寄存器实现。段寄存器中的值就是段地址,当偏移地址为0时的段地址+偏移地址就是该段的起始地址。 物理地址是由段地址左移4位后与偏移地址相加形成的20位地址。
7. 说法不一定正确。对顺序执行指令的计算机是对的。对重叠或流水线的计算机就不对了。
例如对8086CPU,由于采用了取指令与执行指令的一次重叠,尽管执行一条指令的总时间并没有变化,但连续执行n条指令时,总的时间会大大缩短,可以简单的比喻成总时间为原时间的二分之一,快了一倍。
8. 引入流水线后,执行一条指令的总时间并没有变化。
9. 高速缓存的目的是提高存储器的速度,进而提高了CPU的速度。虚拟存储器的目的是为了给程序员或程序一个大的存储或运行空间。
10。8086采用总线接口部件BIU与执行部件EU分开提高了速度,286将8086的BIU进一步分成3个部件,提高了并行性。386在286基础上进一步增加成6个逻辑部件,实现多条指令重叠,进一步提高了速度,486采用硬组合逻辑控制器,同时采用内嵌高速缓存,提高速度。Pentium采用多流水技术,指令cache数据cache技术提高速度。都采用扩展地址线数量来扩大容量。
第二章
1. (1)1000:0--1000:FFFFH, 即10000H--1FFFFH.(2)12340--2233FH(3)略(4)略。
2. (1) 逻辑1000H:2000H,物理12000H. (2)略(3)略(4)略。
3. DS 可以与BX,SI,DI等组合, ES可以与BX,SI,DI等组合,串指令约定与DI组合。 CS只与IP组合, SS一般只与SP组合,也可以与BP组合。
4. 便于程序运行空间保护,便于兼容早期的微处理器。
5. 尽管保护模式下的寻址系统有些复杂,但从用户的角度来说,没有什么不同。
6. 描述符包括基地址、界限、访问权限等信息。
7. 页表要映射到20位的物理地址中。
8. 段被访问时,置1,用于统计该段被访次数。这两个A位服务的对象不一样,不多余。
第三章 129页
1. 无符号分离式BCD码。0011表示3, 后面的4位可以是0-9,可以表示ASCII码0-9。
2. 由程序或程序员来定义。数据在计算机中都是用代码来表示的,一个数据(例如00110101)的意义是程序员自己掌握的,程序员把它当做一个字符,就是数字5的ASCII码。如果说他是一个无符号数,就是代表十进制数53,如果说是组合式BCD码,就代表十进制数35。
3. 段定义,包括数据段,堆栈段,代码段等。数据及变量定义,约定段寄存器与段名的映射,代码段开始,代码段编程,代码段结束,汇编程序结束等。
4. 操作符由控制器译码器解释执行,伪操作符由汇编程序(翻译程序)解释执行。
5. 转移指令后的标号是偏移地址。只有当应用该标号的转移指令位置确定后,在该指令地址正负128范围内的标号是短转移,类型是字节,在16位二进制数之内是段内的字类型,超出16位二进制数之外的是段间转移,是双字类型。
6. (1) DB 20, 20 DUP (0)
(2 ) DB “The course is easy ”, 0
(3) DB “hello…. !!!!!”, 0dh,0ah,” $”
(4) DW 100 DUP (0)
11. 数据定义语句表示,16进制书写。寻址方式包括立即数、直接、间接寻址等多种。逻辑地址。
12. 指令格式包括操作码、操作数(或地址)两部分, 这里的操作数不一定就是要处理的那个数据,也可以是那个数据的地址或寄存器等,是找到那个数的寻址方式。而参加操作的数据就是指具体的数据。
13. 判断操作数的寻址方式是否正确?说明原因。
•(1)[ AX] ;例如MOV BL, [ AX] ;错,AX不是地址寄存器
•(2)BP ;例如 MOV AX , BP; 正确, 寄存器寻址
•(3)[SI+DI] ;例如 MOV AL , [SI+DI] 错,不能有2个变址寄存器
•(4)[SP] ;例如 MOV AL , [SP], 错,不能用堆栈指针,堆栈指针只能由堆栈指令操作
•(5)CS ;例如 MOV AX ,CS; 正确, 寄存器寻址
•(6)BH ;例如 MOV AL ,BH; 正确, 寄存器寻址
•(7)[BX+BP+32] ;例如 MOV AL , [BX+BP+32]; 错,不能有2个基地址寄存器
•(8)[BL+44] ; 例如 MOV AL , [BL+44]; 错,BL不是完整的地址寄存器
•(9)[CX+90] ;例如 MOV AL , [CX+90]; 错,CX不是地址寄存器
•(10)[DX] ;例如 MOV AL , [DX]; 错,DX不是地址寄存器
•(11)BX+90H ;例如 MOV AX , BX+90H; 错,不能加
•(12)[BX*4] ; 例如 MOV AL , [BX*4] ;错,不能乘
•(13)SI[100H] ;例如MOV AX ,SI[100H]; 正确,相对变址寻址,但写法不好,最好是MOV AX , [SI+100H], MOV AX , 100[SI]
•(14)[DX+90H] ;例如 MOV AX , [DX+90H]; 错,DX不是地址寄存器
14题
•假定 DS=2000H
• ES=2100H
• SS=1500H
• SI=00A0H
• BX=0100H
• BP=0010H
•数据变量wVald的偏移地址为0050H
•指出下列指令源操作数的寻址方式?
•(1)MOV AX, 0ABH ;立即数寻址
•(2)MOV AX, [100H] ;直接寻址
•(3)MOV AX, wVald ;直接寻址,等于MOV AX, [0050H]
•(4)MOV BX, [SI] ;寄存器间接寻址
•(5)MOV AX, wVald[BX]; 相对寄存器寻址,等于MOV AX, [BX+0050H]
•(6)MOV CL,[BX][SI] ; 基址加变址寻址
•(7)MOV wVald [SI],BX ;源是寄存器寻址, 目是相对基址加变址寻址,等于MOV [SI+0050H],BX
•(8)MOV [BP][SI],100 ;源是立即数,相对基址加变址寻址
• 错,应该是MOV WORD[SI+BP],100 ; 说明是字或字节
15. 已知:SS=0FF10H, SP=00A0H.
•将8057H和0F79H入栈,再弹出一个数,画出堆栈区的变化。
•程序举例:
•MOV AX, FF10H
•MOV SS, AX
•MOV AX, 00A0H
•MOV SP,AX
•MOV AX, 8057H
•PUSH AX
•MOV AX, 0F79H
•PUSH AX
•POP BX
•答:已知SS+SP=FF100+00A0=FF1A0H
• 结果SP=009EH
•入堆栈时, 堆栈指针SP先减2,再压栈
•出堆栈时, 先弹出2个字节的,然后堆栈指针SP加2
栈的数据:
•FF198
•FF19A
•FF19C 0F79
•FF19E 0557
•FF1A0 ;栈底
•或用字节地址看
•FF199
•FF19A
•FF19B 0F
•FF19C 79
•FF19D 05
•FF19E 57
•FF19F
•FF1A0 ;栈底
23.试编程序。将内存从40000H到4AFFFH的每个单元中均写入20H,再逐个单元读出比较,看写入的与读出的是否一致。若全对,则将AL置0FFH;只要有错,则将AL置00H。
•参考程序:(仅提供小汇编语句)
•MOV AX,4000H
• MOV DS, AX
• MOV BX,0
• MOV CX, AFFFH
• MOV AL, 20H
•L1: MOV [BX], AL
• CMP [BX], AL
• JNZ ERROR
• INC BX
• DEC CX
• JNZ L1
• MOV AL,FFH
• JMP END1
•ERROR: MOV AL,0
•END1: RET
20.按下列要求编写指令序列
•1)清除DH中的最低三位而不改变其他位,结果存入DL中;
• AND DH, F8H
• MOV DL,DH
•2)把DI中的最高4位置1而不改变其他位;
• OR DI, F000H
•3)把AX中的0-3位置1,7-9位取反,13-15位置0;
• OR AX, 000FH
• XOR AX, 00000011 10000000B ;用二进制表示数
• AND AX, 00011111 11111111B
•4)测试BX中的第2、5和9位中是否有一位为1;
•TEST BX, 00000010 00100100B
•JZ 全0
•否则, 结果非0表示至少有一个1
•5)测试CX中的第1、6和11位是否同时为1;
•MOV AX, CX
•AND AX, 00001000 01000010B
•CMP AX, 00001000 01000010B
•JE 等于转,表示 3位全为1。
•6)测试AX中的第0、2、9和13位中是否有一位为0;
•AND AX,00100010 0000 0101; 只看这4位
•XOR AX, 0010 0010 0000 0101
•JZ ; 说明是全1,没有0
•至少1个0
•7)测试DX中的第1、4、11和14位是否同时为0;
•MOV AX, DX
•AND AX, 01001000 00010010B
•JZ =0
23.试编程序。将内存从40000H到4AFFFH的每个单元中均写入20H,再逐个单元读出比较,看写入的与读出的是否一致。若全对,则将AL置0FFH;只要有错,则将AL置00H。
•参考程序:(仅提供小汇编语句)
•MOV AX,4000H
• MOV DS, AX
• MOV BX,0
• MOV CX, AFFFH
• MOV AL,20H
•L1: MOV [BX], AL
• CMP [BX], AL
• JNZ ERROR
• INC BX
• DEC CX
• JNZ L1
• MOV AL,FFH
• JMP END1
•ERROR: MOV AL,0
•END1: RET
24.设变量单元A、B、C存放有3个数,若3个数都不为零,则求3个数的和,存放在D中;若有一个零,则将其余两个也清零,试编写程序。
•答: 先用机器指令编程(用小汇编编程)
• 实现此功能的程序方法很多,这里只举一个简单直观的例子。
•设:变量A、B、C变量存放在1000H开始的单元中,即:
•变量A存放在当前段的1000H单元,
•变量B在 1001H单元,
•变量C在 1002H单元。
•结果D的地址为 1003H单元。
•MOV BX,1000H
MOV AL, [BX]
CMP AL,0 ;第一个数A=0?
• JNZ L1 ;非0 转
• MOV [BX+1], AL ;其余2个清0
• MOV [BX+2], AL
• JMP END1
•L1: MOV AL,[BX+1] ;;第2个数B=0?
• CMP AL,0
• JNZ L2 ;非0 转
• MOV [BX], AL
• MOV [BX+2], AL
• JMP END1
•L2 : MOV AL,[BX+2] ;第3个数C=0?
• CMP AL,0
• JNZ L3 ;非0 转
• MOV [BX], AL
• MOV [BX+1], AL
• JMP END1
•L3: MOV AL, [BX] ; 3个数都不为零,求3个数的和
• ADD AL, [BX+1]
• ADD AL, [BX+2]
• MOV [BX+3], AL
•END1: INT 3 ; 结束,断点,停在此
26.试编写程序,统计由40000H开始的16K个单元中所存放的字符A的个数,并将结果存放在DX中。(仅提供小汇编语句)
• MOV AX, 4000H
• MOV DS, AX
• MOV BX, 0
• MOV CX, 4000H ; 16K个数
• MOV DX, 0 ; 用DX记录A的个数
•L1: MOV AL, [BX]
• CMP AL, 41H ; CMP AL , ’A’
• JNZ L2
• INC DX ; 累加器+1
•L2: INC BX
• DEC CX ; ( LOOP L1 )
• JNZ L1
30题。 键盘输入10个数,变成密码后存到BUFF缓冲区去
设密码缓冲区首地址=120H, 加密后的数字缓冲区BUFF首地址=130H(仅提供小汇编语句)
• MOV SI , 120H ;密码缓冲区首地址=120H
• MOV DI, 130H ;加密后的数字缓冲区首地址=130H
• MOV CX, 0AH ;共10个数字
• MOV BX, 0 ;偏移地址清0
•10C MOV AH, 1
• INT 21H ;等待输入一个数字
• CMP AL, 0DH ;是回车?
• JZ END1
• AND AL, 0FH ;留下低4位
• MOV BL, AL
• MOV AL, [ SI + BX ] ; 取1个数字的密码
• MOV [ DI ] , AL ; 送加密缓冲区
• INC DI
• DEC CX
• JNZ 10C
• END1: INT 3 ; 结束
•120 DB 7 5 9 1 3 6 8 0 2 4
第五章 169页
1.因为引脚不够,采用了复用技术,在外部必须用锁存器分开地址和数据线。主要是地址信息。
2.MEMR=1, MEMW=0,IOR=1,IOW=1.。反之,MEMR=0, MEMW=1,IOR=1,IOW=1。
3.地址数据线分时用,还有S0-S6,主要解决引脚不够的问题。
4.总线周期包括4个时钟周期,但存储器速度慢时,需要插入等待周期Tw。插入多少个由存储器的读写时间来决定。一般是1-2个。
5.复位后,只有CS=ffffh,其余都是0,系统从FFFF:0000=FFFF0H单元开始执行。
第六章 191页
1.尽管E2PROM速度已经很快,但还是跟不上CPU随机读写的速度,另外,E2PROM是快写,不能当RAM用。
2. E2PROM 是电信号擦除,擦写速度快,可以在线擦除与改写。EPROME是紫外线擦除,需要从电路板上取下来,紫外光照射10分钟,用专门的编程工具才能编程。E2PROM的优点是可以在线编程,编程速度快,但容易被病毒利用。计算机BIOS必须放在EPROME中,才能避免病毒破坏。
3.正比关系。
5.译码电路。
7.如果少用最高位2根地址线,重复空间有22=4块,。少用x根地址线,重复空间有2x块。。
9.(1)需128片。
10.
11.
12.
13.MOV AX,[2001H]不好,多用一个总线周期。慢。
14.
15. A1A0不参加译码。
16.2,4,8字节。
第八章
23题 MOV AL,36H, OUT D3H,AL
MOV AX,00H, OUT D0H,AL, MOV AL,AH, OUT D0H,AL
MOV AL,B0H, OUT D3H,AL
MOV AX,0032H, OUT D2H,AL , MOV AL,AH, OUT D2H,AL
24题 可以用中断方式或程序控制方式实现。
如果用程序控制方式,假设8255的A口接8个指示灯,B口PB7位做8254 定时时间到的 OUT输出线,设8255的口地址=60H, 设8254的口地址=40H,
设用8254的计数器1,工作在方式3方波发生器,已知CLK1=1000HZ,即Tclk= 1/1000=1ms,希望输出T=1s,分频系数=该是1ms x1000=1s。
主程序: MOV AL,82H ; 8255编程, A方式0 出,B方式0 入,C出;
OUT 63H ,AL ;
MOV AL,77H, OUT D3H,AL ; 8254计数器1方式3;BCD计数;
MOV AX,1000H, OUT D1H,AL ;
MOV AL,AH, OUT D1H,AL
MOV BL,01H
L1: IN AL,61H
AND AL,80H ;
JZ L1 ;= 0等待
L2: MOV AL,BL ;=1,输出1个灯亮
OUT 60H,AL ; 一个灯亮
ROL BL,1 ; 左循环移1位
L3: IN AL,61H ;
AND AL,80H
JNZ L3 ;= 1等待
JMP L1 ;
27题, 异步方式每个字节都需要加起始位、停止位等,传输效率就低了,单位时间传输的字符数就就低了。同步方式每个字节可以不要起始位、停止位及校验位, 直接连续传数据,效率高。单位时间内传输的字节数就多了。
28题, 先运行接收方程序。
29题, (仅供参考,基本意思到位就可以了,是否先复位等不要紧)
MOV CX,3
MOV AL,0
ST1: OUT 52H,AL ;先送3个0 ,复位
DEC CX
JNZ ST1
MOV AL,40H
OUT 52H,AL ;复位8251
MOV AL, 11 11 10 10B ; 2停止位,偶校验,7位数据, 波特率因子16
OUT 52H,AL
MOV AL, 00 01 01 11B ; 出错标志复位,允许接受,数据准备好,允许发送。
OUT 52H,AL
30题、已知一秒钟传输1200bps/10 位格式= 120Byte, 传1024字节需要 1024/120B=8.53秒。
第九章
1题、显示“5”的7段码是1011011= 5BH
2题, 这道题不用改了,原题不好。打个半对就行了。
3题。 (仅供参考方法不唯一,基本意思到位就可以了)
L1: IN AL,20H
CMP AL,0 ;有按键? 没有就等待
JZ L1
IN AL,20H ;取来按键的键号
MOV CX,8 ;共8个键
MOV BL,1 ; 初值1
L2: SHR AL,1 ;右移一位,最低位到进位位。
JC L3 ;
INC BL
DEC CX
JNZ L2
L3: MOV AL,BL
OUT 20H,AL ;显示
结束
7题、 行频= 262x60=15700HZ
8题、 原题是32K色,即15位色,考虑15位不是整数,不好计算, 题改成24位色,3个8位表示一个点的颜色。 满屏共1024x768个点。 每个点用3字节二进制表示它的颜色。故:
1)显示缓存应该有1024x768x3=2359296个单元,
2)设(x,y)坐标为列、行坐标,即x是列坐标。y是行坐标。从第0行0列开始。
(x,y)坐标的点在显示存储器中对应的单元为 (1024y+ x) x 3。
第十章
2题、已知端口地址为2F7H,
锯齿波: MOV DX,2F7H,
MOV AL,0
L0: OUT DX,AL
INC AL
JMP L0
3题、 ALE 和START信号是用户的OUT 指令经地址译码后产生的,宽度基本为转换周期128微秒。
5题、 500-200=300度,精度为0。1度, 应该有300x10=3000 个梯度,只有选用12位的A/D,D/A才能表达 3000 个梯度, 12位的A/D、D/A的分辨率是4096。