第一章
1.将下列十进制数转换成二进制数。
(1)49 (2)49.75 (3) 100 (4)100.8125 解:(1) (49)10=(110001)2
(2) (49.75)10=(110001.11)2 (3) (100)10=(1100100)2
(4) (100.8125)10=(1100100.1101)2
2.将下列十六进制数转换成二进制数和十进制数。 (1)FAH (2) 78A2H (3) FFFFH (4)3CH 解:(1) (FA)16=(11111010)2=(250)10
(2) (78A2)16=(111100010100010)2=(30882)10 (3) (FFFF)16=(1111111111111111)2=(65535)10 (4) (3C)16=(111100)2=(60)10
3.将下列二进制数转换成十六进制数和八进制数。
(1)101101.11 (2)1111111 (3)1101001011.01 (4) 10111101 解:(1) (101101.11)2=(2D.C)16=(55.6)8 (2) (1111111)2=(7F)16=(177)8
(3) (1101001011.01)2=(34B.4)16=(1513.2)8 (4) (10111101)2=(BD)16=(275)8
4.设机器字长为8位,写出下列各二进制数的原码、反码和补码。 (1)+1010101 (2)-1000000 (3)+1111111 (4)-1111111 解:(1) 原码:01010101;反码:01010101;补码:01010101。 (2) 原码:11000000;反码:10111111;补码:11000000。 (3) 原码:01111111;反码:01111111;补码:01111111。 (4) 原码:11111111;反码:10000000;补码:10000001。
5.设下列四组为8位二进制补码表示的十六进制数,计算a+b和a-b,并判断其结果是否溢出。
(1)a=0F6H,b=0D5H (2) a=0B7H,b=0C7H
(3)a=37H,b=67H (4) a=73H,b=7BH 解:(1) a+b=CBH,没有发生溢出;a-b=21H,没有发生溢出。 (2) a+b=7EH,发生溢出;a-b=F0H,没有发生溢出。 (3) a+b=9EH,发生溢出;a-b=D0H,没有发生溢出。 (4) a+b=EEH,发生溢出;a-b=F8H,没有发生溢出。
6.已知a=00111000B,b=11110011B,计算下列逻辑运算。 (1) a AND b (2) a OR b (3) a XOR b (4) NOT a
解:(1)a AND b=00110000B (2)a OR b=11111011B (3)a XOR b=11001011B (4)NOT a=11000111B
7.将下列算式中的十进制数表示成组合BCD码进行运算,并根据需要进行调整。 (1)38+42 (2) 56+77 (3) 99+77 (4)34+7 解:(1)00111000 + 01000010 01111010
+ 0110 10000000(80) (2)01010110 + 01110111 11001101 + 01100110
000100110011(133) (3)10011001 + 01110111 100010000 + 01100110
000101110110(176) (4)00110111 + 00000111 00111011 + 0110
01000001(41)
8.将下列字符串表示成相应的ASCII码(用十六进制数表示)。 (1) 102 (2) ABC (3) ASCII (4) abc 解:(1)313032H (2)414243H
(3)4153434949H (4)616263H
9.已知[X]原=10101100B,计算[(1/2)X]补及[(-1/2)X]补的值。 解:∵[X]原=10101100B ∴[(1/2)X]原=10010110B,[(-1/2)X]原=00010110B ∴[(1/2)X]补=11101010B,[(-1/2)X]补=00010110B
10.请将十进制数7.5表示成二进制浮点规格化数(阶符1位,阶码2位,数符1位,尾数4位)。
解:十进制数7.5用二进制表示为:111.1B 111.1B=0.1111×2+3
浮点规格化数表示成:01101111。
第二章
1.8086/8088微处理器从逻辑结构上可以分成哪两部分?试说明每一部分的组成与功能。
答:8086/8088微处理器从逻辑结构上可以分成执行单元(EU)和总线接口单元(BIU)。
执行部件(EU)包含一个16位的算术逻辑单元(ALU)、一个16位反映CPU状态和控制标志的状态标志寄存器(FLAG)、一组8个16位通用寄存器组、数据暂存寄存器和EU的控制电路。总线接口部件(BIU)包含一组段寄存器(CS,SS,DS和ES)、一个指令指针寄存器(IP)、4或6个字节的指令队列、地址形成器件和总线控制逻辑。
EU的功能是负责指令的执行;BIU的功能是根据EU的请求,完成CPU与存储器或I/O接口间的数据传送。
2.写出8086/8088 CPU中14个16位寄存器的名称。 答:8086/8088 CPU中14个16位寄存器的名称如下: AX:累加器。 BX:基址寄存器。 CX:计数寄存器。 DX:数据寄存器。 SP:堆栈指针寄存器。 BP:基地址指针寄存器。 SI:源变址寄存器。 DI:目的变址寄存器。 CS:代码段寄存器。 DS:数据段寄存器。 SS:堆栈段寄存器。 ES:附加段寄存器。 IP:指令指针寄存器。 FLAG:标志寄存器。
3.写出8086/8088 CPU标志寄存器中的6个状态标志位和3个控制标志位的定义。 答:6个状态标志位的定义如下:
CF:进位标志;当最高位有进位或借位时,CF=1;否则CF=0;
PF:奇偶标志;当运算结果中低8位中“1”的个数为偶数时,PF=1;否则PF=0; AF:辅助进行标志;当D3向D4有进位或借位时,AF=1;否则AF=0; ZF:零标志;运算结果每位都为0时,ZF=1;否则ZF=0; SF:符号标志;运算结果的最高位为1时,SF=1;否则SF=0;
OF:溢出标志;两个符号数进行运算产生溢出时,OF=1;否则OF=0。 3个控制标志位的定义如下:
TF:陷阱标志;当TF=1时,CPU将进入单步执行工作方式;
IF:中断标志;当IF=1时允许CPU响应可屏蔽中断;当IF=0时禁止CPU响应可屏蔽中断;
DF:方向标志;当DF=0时,串操作指令时地址朝增加方向;当DF=1时,串操作指令时地址朝减少方向。
4.在8086/8088 CPU中,十六进制补码数8070H与9E85H进行加法运算,请写出运算结束后SF、OF、CF、AF、ZF及PF标志位的值?
解:8070H 1000000001110000
+ 9E85H 1001111010000101 128F5H +10010100011110101
从运算结果可以看出:SF=0;OF=1;AF=0;CF=1;ZF=0;PF=1。
5.写出8086/8088 CPU引脚中ALE、NMI、INTR、INTA及DT/R的含义及输入/输出方向。
答:ALE:地址锁存输出信号。
NMI:非屏蔽中断请求输入信号。 INTR:可屏蔽中断请求输入信号。
INTA:中断响应输出信号。 DT/R:数据传送方向输出信号。
6.8088 CPU中的RESET、READY信号的作用分别是什么?
答:RESET:CPU复位输入信号,高电平有效。当此输入线有效并维持至少4个时钟周期时完成CPU内部复位操作。复位后CPU内的寄存器及引脚处于初始状态。
READY:准备就绪输入信号,高电平有效。用于协调CPU与存储器或I/O端口之间的数据传送。当CPU对存储器或I/O进行操作时,在T3周期开始采样READY信号。若其为低电平,表明被访问的存储器或I/O还未准备就绪;若其为高电平,表明被访问的存储器或I/O已准备就绪。
7.写出段基址、偏移地址、逻辑地址和物理地址的含义,同时写出它们之间的联系。 答:段基址:段首地址的高16位地址码,常存于相应的段寄存器中; 偏移地址:段内的相对地址,也称有效地址;
逻辑地址:由段基址与段内偏移地址组合表示存储单元地址; 物理地址:用20位二进制编号表示存储单元地址; 物理地址=段基址×16+段内偏移地址。 8.试填写物理地址。
(1)CS=1200H,IP=2500H,物理地址为 14500H 。 (2)DS=39A0H,BX=4700H,物理地址为 3E100H 。 (3)ES=6200H,DI=2000H,物理地址为 64000H 。 (4)SS=8200H,BP=1050H,物理地址为 83050H 。 9.请画出8088 CPU一个基本的存储器写总线周期时序图。 答:
一个总线周期
CLK T1 T2 T3 T4
A19 ~A16/S6~S3 地址输出 状态输出
A15~A8 地址输出
AD7~AD0 地址输出 数据输出
ALE
IO/M
WR
DT/R
DEN
10.请写出时钟周期、总线周期与指令周期的含义。
答:时钟周期是CPU的基本时间计量单位,即计算机主频的倒数。
总线周期是指CPU通过总线对存储器或I/O端口进行一次访问(读/写操作)所需
的时间;一个总线周期至少包含4个时钟周期,即T1、T2、T3、T4。
指令周期是指计算机完成一条指令的执行所需要的时间。
11.在总线周期的T1、T2、T3和T4状态,CPU分别执行什么动作?什么情况下需要插入等待状态TW?TW插入的位置?
答:在T1状态,BIU把要访问的存储器单元或I/O端口的地址输出到总线。
在T2状态,地址/数据复用总线停止输出地址信号。若是读周期,T2中地址/数据复用总线处于高阻状态,CPU有足够的时间使其从输出方式变为输入方式;若为写周期,CPU不必转变输出方式。
在T3~T4状态,CPU与存储器或I/O接口进行数据传送。CPU若与慢速的存储器或I/O端口之间的数据传送,READY信号在T3状态时仍为低电平,则在T3之后插入等待状态TW,加入TW的个数由外设的速度与CPU速度匹配决定。
12.8088 CPU 工作在最小模式下,请回答以下问题: (1)CPU访问存储器时,需要哪些信号? (2)CPU访问I/O接口时,需要哪些信号?
(3)当HOLD有效并得到响应时,CPU的哪些信号置高阻状态?
答:(1)利用A15~ A8,AD7~AD0,ALE,WR,RD,DT/R,DEN,IO/M。 (2)利用A15~ A8,AD7~AD0,ALE,WR,RD,DT/R,DEN,IO/M。 (3)当HOLD有效并得到响应时,CPU中呈高阻状态的信号有:A15~ A8,AD7~AD0,
ALE,WR,RD,DT/R,DEN,IO/M。
第三章
1.按照题目中提出的要求,写出能达到要求的一条(或几条)汇编形式的指令。 (1) 将立即数1234H送入寄存器BX; (2) 将立即数1234H送入段寄存器DS;
(3) 将变址寄存器DI的内容送入数据段中2000H的存储单元; (4) 把数据段中2000H存储单元的内容送段寄存器ES; (5) 将立即数0ABH与AL相加,结果送回AL; (6) 把BX与CX寄存器内容相加,结果送入BX;
(7) 寄存器BX中的低4位内容保持不变,其它位按位取反,结果仍在BX中; (8) 实现AX与8位数-128的乘积运算; (9) 实现CX中高、低8位内容的交换;
(10) 将DX中D0、D5、D8位置1,其余位保持不变。 解: (1) MOV BX, 1234H
(2) MOV AX, 1234H
MOV DS, AX (3) MOV [2000H], DI (4) MOV ES,[2000H] (5) ADD AL,0ABH (6) ADD BX,CX (7) XOR BX,0FFF0H (8) MOV BL,80H IMUL BL
(9) XCHG CH,CL (10) OR DX,0121H
2.顺序执行下列指令,填写指令后的空格。
MOV AX,2000H ;AH= 20H MOV DS,AX ;AL= 00H ;DS= 2000H MOV BX,2030H ;BH= 20H ;BL= 30H MOV SI,BX ;SI= 2030H PUSH BX
POP CX ;BX= 2030H ;CX= 2030H XCHG AX,SI ;AX= 2030H ;SI= 2000H ADD AX,0F43H ;AX= 2F73H ;CF= 0 CWD ;AX= 2F73H ;DX= 0000H SHL AL,CL ;AL= 00H ;CL= 30H OR AX,5555H ;AX= 7F55H AND AX,0AA55H ;AX= 2A55H MOV BL,0FFH
MUL BL ;AX= 54ABH IMUL BL ;AX= 0055H 3.指出下列各条指令中源操作数字段的寻址方式。 (1) MOV AX,0ABH ;立即寻址方式 (2) MOV AX,BX ;寄存器寻址方式
(3) MOV AX,[1234H] ;直接寻址方式 (4) MOV AX,[BX] ;寄存器间接寻址方式 (5) MOV AX,[BX+10] ;寄存器相对寻址方式 (6) MOV AX,[BX][SI] ;基址变址寻址方式 (7) MOV AX,03H[BX][SI] ;相对基址变址寻址方式 (8) ADD BX,[SI] ;寄存器间接寻址方式 (9) AND AX,1234H ;立即寻址方式 (10)XOR CX,AX ;寄存器寻址方式
4.如果TABEL为数据段中0032H单元的符号名,其中存放的内容为1234H,填写下列指令执行后空格中的内容。
MOV AX,TABEL ;AX= 1234H LEA AX,TABEL ;AX= 0032H
5.画出执行下列指令过程中堆栈区和SP的内容变化过程示意图,并标出存储单元的物理地址。
MOV AX,1000H MOV SS,AX
MOV SP,0100H;① MOV BX,SP
PUSH AX ;② PUSH BX ;③ POP CX ;④ HLT 解:
③ 00H
01H
最后指令位置 00H ② ④
10H ①
6.标出下列指令的执行顺序。 (1) MOV AX,1234H (2) CMP AX,8234H (3) JC NEXT1 (4) CBW
(5)NEXT1:MOV BX,9876H (6) CMP BX,AX (7) JB NEXT2 (8) SHR AX,1 (9)NEXT2:AND BX,1010H
100FCH
100FEH
10100H
(10) HLT
解:指令的执行顺序:
(1)→(2)→(3)→(5)→(6)→(7)→(8)→(9)→(10)。
7.指令REP MOVSB,REP LODSB,REP STOSB及REPE SCASB中,哪一条能替代以下程序段。
ABC:MOV AL,[SI]
MOV ES:[DI],AL INC SI INC DI
LOOP ABC 解:指令REP MOVSB能替代上述程序段。 8.顺序执行下列各条指令,填写空格。
MOV BX,6534H ;BX= 6534H XOR BX,0FFFFH ;BX= 9ACBH AND BX,15A0H ;BX= 1080H OR BX,2379H ;BX= 33F9H TEST BX,0002H ;BX= 33F9H 9.试写出执行下列3条指令后BX寄存器的内容。
MOV CL,21H MOV BX,6D16H SHR BX,CL
解:BX=0000H
10.试分析以下程序段所完成的功能。
MOV CL,04 SHL DX,CL MOV BL,AH SHL AX,CL SHR BL,CL OR DL,BL
解:程序段完成由DX和AX共同组成的32位数向左移动4位。
11.假定AX和BX中内容为有符号数,CX和DX中的内容为无符号数,请用比较指令和条件转移指令实现以下判断:
(1)若DX的内容超过CX的内容,则转去执行EXCEED; (2)若BX的内容大于AX的内容,则转去执行EXCEED; (3)BX的内容大于等于AX的内容,则转去执行EXCEED; (4)若CX的内容等于0,则转去执行ZERO; (5)若BX与AX的内容相等,则转去执行EQ;
(6)若BX的内容小于等于AX的内容,则转去执行EQSMA; (7)若CX的内容等于5678H,则转去执行EQ;
(8)若DX的内容低于CX的内容,则转去执行EQSM; (9)若AX的内容为正,则转去执行ABC; (10)若AX的内容为负,则转去执行ABC1。 解:(1) CMP DX,CX
JA EXCEED
(2) CMP BX, AX JG EXCEED (3) CMP BX,AX JGE EXCEED (4) CMP CX,0 JZ ZERO
(5) CMP BX,AX JZ EQ (6) CMP BX,AX JLE EQSMA (7) CMP CX,5678H JZ EQ (8) CMP DX,CX JB EQSM (9) ADD AX,0 JNS ABC
(10) ADD AX,0 JS ABC1
12.编写程序段,实现十六进制数12345678H与76543210H相减运算,运算结果存入DX、AX中,其中DX存放高位。
解:参考程序段如下:
MOV AX,5678H SUB AX,3210H MOV DX,1234H SBB DX,7654H HLT 13.编写程序段,实现十进制数12345678与76543210相加运算,运算结果用BCD码表示,并存入DX、AX中,其中DX存放高位。
解:MOV AL,78H
ADD AL,10H DAA
MOV BL,AL MOV AL,56H ADC AL,32H DAA
MOV AH,AL MOV AL,34H ADC AL,54H DAA
MOV DL,AL MOV AL,12H ADC AL,76H DAA
MOV DH,AL
MOV AL,BL HLT
14.编写程序段,将附加段中1000H单元开始的100字节单元清零。 解:参考程序段如下:
MOV CX,0064H MOV DI,1000H CLD
MOV AL,00H REP STOSB HLT 15.编写程序段,将数据段中1000H单元开始的100字节单元均存放23H。 解:参考程序段如下:
MOV CX,0064H MOV AX,DS MOV ES,AX MOV DI,1000H CLD
MOV AL,23H REP STOSB HLT
第四章 汇编语言源程序设计
1.画出数据段汇编后相应存储单元中的内容并标出存储单元的逻辑地址。 DATA SEGMENT ORG 0100H
ABC0 EQU 78H ABC DB 09H,-2,45H, 2 DUP(01H,?),‘AB’ ABC1 DW -2, 34H+ABC0,$ ABC2 DD 12H ABC3 DW ABC DATA ENDS 解:
DS:0100H DS:0101H DS:0102H DS:0103H DS:0104H DS:0105H DS:0106H DS:0107H DS:0108H DS:0109H DS:010AH DS:010BH DS:010CH DS:010DH DS:010EH DS:010FH DS:0110H DS:0111H DS:0112H DS:0113H DS:0114H
ABC→ ABC1→ ABC2→ ABC3→
09H FEH 45H 01H - 01H - 41H 42H FEH FFH ACH 00H 0DH 01H 12H 00H 00H 00H 00H 01H 2.设程序中的数据定义如下: PARTNO DW ? PNAME DB 16 DUP(?) COUNT DD ? PLENTH EQU $-PARTNO
问PLENTH的值为多少?它的含义是什么? 解:PLENTH的值为22(16H)。表示当前位置与PARTNO之间有22个字节空间。 3.假设程序中的数据定义如下: LNAME DB 30 DUP(?)
ADDRESS DB 30 DUP(?) CITY DB 15 DUP(?) CODE_LIST DB 1,7,8,3,2
(1)用一条MOV指令将LNAME的偏移地址放入AX; (2)用一条指令将CODE_LIST的头两个字节的内容放入SI:
(3)写一条伪操作使CODE_LENGTH的值等于CODE_LIST域的实际长度。 解:(1)MOV AX,OFFSET LNAME (2)MOV SI,WORD CODE_LIST
(3)CODE_LENGTH EQU $-CODE_LIST
4.执行下列程序段后,AX、BX的内容各是什么?
MOV AX,0001H MOV BX,8000H NEG AX MOV CX,4 AA:SHL AX,1
RCL BX,1 LOOP AA HLT
解:AX=0FFF0H,BX=000FH 5.阅读以下程序,回答问题 DATA SEGMENT
ABC DB 90H,12H,43H,56H,04H,01H
COUNT EQU $-ABC RESULT DW ? DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:PUSH DS
MOV AX,DATA
MOV DS,AX XOR AX,AX
MOV CX,COUNT LEA SI,ABC LEA DI,RESULT AA:MOV BL,[SI]
INC SI
CMP BL,80H JC NEXT1 NEG BL
NEXT1:ADD AL,BL
ADC AH,00H LOOP AA MOV [DI],AX MOV AH,4CH
INT 21H CODE ENDS
END START (1)程序完成什么功能?
(2)程序中NEG BL指令的作用是什么?
(3)程序执行结束后RESULT字单元的内容是什么?
(4)能否用MOV SI,OFFSET ABC代替程序中LEA SI,ABC指令? (5)汇编结束后符号COUNT的值是什么?
解:(1)程序完成求一组有符号字节数的绝对值之和。 (2)程序中NEG BL指令的作用是求负数的绝对值。 (3)程序执行结束后RESULT字单元的内容是0120H。 (4)能。
(5)汇编结束后符号COUNT的值是06H。
6.阅读以下程序,回答问题 DSEG SEGMENT
ARRAY DB 34H,56H,23H,70H,96H COUNT EQU $-ARRAY
DSEG ENDS
SSEG SEGMENT PARA STACK ‘STACK’
DB 256 DUP(0)
SSEG ENDS CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG,SS:SSEG
START:MOV AX,DSEG
MOV DS,AX
MOV SI,OFFSET ARRAY MOV CX,COUNT CLD
NEXT: LODSB
MOV BL,AL AND AL,0F0H PUSH CX MOV CL,4 SHR AL,CL
OR AL,30H CALL DISP MOV AL,BL AND AL,0FH OR AL,30H CALL DISP DEC CX JCXZ DONE
MOV AL,2CH ;逗号的ASCII码为2CH
CALL DISP JMP NEXT
DONE:MOV AH,4CH ;终止当前进程,返回调用进程
INT 21H
DISP PROC NEAR
MOV AH,14 ;写字符到当前光标位置,光标前进一格 INT 10H RET
DISP ENDP
CSEG ENDS END START
(1)程序执行结束后,屏幕上显示的内容是什么?
(2)程序中带下划线的指令可以用什么指令替代(仅一条)?
(3)程序中空格处应填入什么指令,才能保证程序按要求正常执行? 解:(1)程序执行结束后,屏幕上显示的内容是34,56,23,70,96。 (2)程序中带下划线的指令可以用LEA SI,ARRAY指令替代。
(3)程序中空格处应填入POP CX指令,才能保证程序按要求正常执行。
7.AX寄存器中存有4位压缩BCD码,试编写程序将这4位数字分开,并分别存入BH、BL、CH和CL寄存器中。
解: 参考程序段如下:
??
MOV DX,AX MOV CL,04H ROL AX,CL AND DX,0F0FH MOV BL,DH MOV CL,DL AND AX,0F0FH MOV BH,AL MOV CH,AH
??
?X/8,(0?X?20)8.已知X、Y是字节型的无符号整数,编写程序计算Y??。
X?15,(20?X?30)?解:参考程序如下:
DATA SEGMENT
X DB ? ;运行程序时取X分别位于两个分支 Y DB ? DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX MOV AL,X
CMP AL,20 JNC NEXT
MOV CL,03H SHR AL,CL JMP NEXT1
NEXT:SUB AL,15 NEXT1:MOV Y,AL
MOV AH,4CH
INT 21H
CODE ENDS END START
9.编写程序,统计寄存器BX中二进制位“1”的个数,结果存在AL中。 解:参考程序如下: CODE SEGMENT
ASSUME CS:CODE
START: MOV AL,00H MOV DX,BX MOV CX,16 AA: CMP DX,0 JZ NEXT SHL DX,1
JNC NEXT1 INC AL NEXT1: LOOP AA
NEXT: MOV AH,4CH
INT 21H CODE ENDS END START
10.编写程序段将计算机日期设置为2009年10月1日。 解:参考程序段如下:
MOV CX,2009H ;设置年 MOV DH,10H ;设置月 MOV DL,01H ;设置日 MOV AH,2BH INT 21H HLT
11.编写程序实现接收一个字符的输入,并在屏幕上用二进制形式(0/1)显示出它的ASCII码值。
解:参考程序如下: CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AH,01H ;键盘输入
INT 21H MOV BL,AL
MOV CX,0007H
SHL BL,1 AA:SHL BL,1
JC NEXT1 MOV DL,’0’ JMP NEXT
NEXT1:MOV DL,’1’
NEXT: MOV AH,02H ;显示输出7位ASCII码值
INT 21H
LOOP AA MOV AH,4CH
INT 21H CODE ENDS
END START
12.设数据块存放在BUFFER开始的50个字节单元中,试编写程序统计数据块中正数(不包括0)的个数,并将统计的结果存放到NUMBER单元中。
解:参考程序如下: DATA SEGMENT
BUFFER DB 23H,00H,56H,89H,09H,30H DB 98H,11H,07H,? COUNT EQU $-BUFFER NUMBER DB 00H DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX MOV CX,COUNT LEA SI,BUFFER AA:MOV AL,[SI] CMP AL,00H JZ NEXT JS NEXT
INC NUMBER NEXT:INC SI
LOOP AA
MOV AH,4CH INT 21H CODE ENDS END START
13.内存的一个区域中有100个字符是用小写字母表示的,试编写一个程序,把它们转换成大写字母,并送屏幕显示。 解:参考程序如下:
DATA SEGMENT
ABC DB 61H,65H,62H,63H,?;(100个小写字母) DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX MOV CX,0064H LEA SI,ABC AA:MOV DL,[SI]
SUB DL,20H MOV [SI],DL MOV AH,02H INT 21H INC SI LOOP AA
MOV AH,4CH INT 21H
CODE ENDS END START 14.“9876”是将输入数据字符“3268”通过密码表“3589027164”加密而得,编写解密程序,求任意输入四位密码的原码。
解:参考程序如下:
DATA SEGMENT
ABC DB 33H,35H,38H,39H,30H DB 32H,37H,31H,36H,34H ABC1 DB 4DUP(00H) ABC2 DB 00H DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX LEA SI,ABC1 LEA DI,ABC2 MOV CX,0004H AA: MOV AH,01H INT 21H MOV [SI],AL INC SI LOOP AA LEA SI,ABC1 MOV DX,0000H
MOV CX,0004H AA0: LEA BX,ABC
AA1: MOV AL,[SI] CMP AL,[BX] JZ NEXT INC BX INC DL JMP AA1 NEXT:PUSH CX
CMP CX,01H JZ NEXT1 MOV CL,04H SHL DX,CL NEXT1:POP CX LOOP AA0 MOV [DI],AX
MOV AH,4CH
INT 21H CODE ENDS END START
15.在STRING单元开始存放着一字符串,字符串以“$”结束,试编制一程序测试该字符串中是否有数字0~9,如有则将CL中的第5位置1,否则将该位清0。
解:参考程序如下:
DATA SEGMENT
ABC DB ‘ABCDS9KL$’ DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX LEA SI,ABC MOV CL,00H AA: MOV AL,[SI]
CMP AL,’$’ JZ NEXT1 CMP AL,30H JC NEXT CMP AL,3AH JNC NEXT OR CL,20H JMP NEXT1
NEXT: INC SI JMP AA
NEXT1: MOV AH,4CH
INT 21H CODE ENDS
END START
16.编写程序完成把DX中的16进制数转换为ASCII码,并将对应的ASCII码依次存入MEM开始的存储单元中。例如,当DX的内容为2A49H时,程序执行结束后,MEM单元开始的4个字节的内容依次为39H,34H,41H,32H。
解:DATA SEGMENT
MEM DB 4 DUP(?) DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA
MOV DS,AX MOV CH,04H
MOV BX,OFFSET MEM MOV CL,04H AA1:MOV AX,DX AND AL,0FH ADD AL,30H CMP AL,3AH JC NEXT ADD AL,07H NEXT:MOV [BX],AL INC BX ROR DX,CL DEC CH JNZ AA1 MOV AH,4CH INT 21H CODE ENDS END START
17.现有一个以“$”结尾的字符串,编写程序完成剔除字符串中的空格字符。 解:参考程序如下:
DATA SEGMENT
ABC DB ‘ABC DS9KL$’ DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX LEA SI,ABC MOV BX,SI AA: MOV AL,[SI]
CMP AL,’$’ JZ NEXT
CMP AL,20H ;空格的ASCII码值为20H
JZ NEXT1 MOV AL,[SI] MOV [BX],AL INC SI INC BX JMP AA
NEXT1:INC SI
JMP AA NEXT: MOV AH,4CH
INT 21H CODE ENDS END START
18.编一程序,在STRING开头的数据区中查找WE字符串,数据区以$符作为结束符号。如查到,给出HAVE FOUND提示;如查不到,给出NOT FOUND提示。
解:参考程序如下:
DATA SEGMENT
STRING DB ‘ABCWE5$’
RE DB ‘NOT FOUND$’ RE1 DB ‘HAVE FOUND$’
DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA BEGIN:MOV AX,DATA
MOV DS,AX LEA SI,STRING
AA: MOV AL,[SI] CMP AL,’$’ JZ NEXT
CMP AL,’W’ JNZ NEXT1 INC SI MOV AL,[SI] CMP AL,’E’ JNZ AA LEA DX,RE1 JMP NEXT2 JMP AA
NEXT1:INC SI NEXT:LEA DX,RE NEXT2:MOV AH,09H
INT 21H INT 21H
MOV AH,4CH
CODE ENDS END BEGIN
19.设在A、B和C单元中分别存放着三个数,若三个数都不是0,则求出三数之和并存放在D单元中;若三个数中有一个为0,则把其余两个单元也清0。试编写此程序。 解:参考程序如下:
DATA SEGMENT
A DB ? B DB ?
C DB ? ;程序运行前修改A、B和C单元的内容 D DB ? DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA
MOV DS,AX MOV AL,A CMP AL,00H JZ NEXT MOV AL,B CMP AL,00H JZ NEXT MOV AL,C CMP AL,00H JZ NEXT MOV AL,A ADD AL,B ADD AL,C MOV D,AL JMP NEXT1
NEXT: MOV A,00H
MOV B,00H
MOV C,00H NEXT1: MOV AH,4CH INT 21H
CODE ENDS
END START
20.在以DA1为首地址的内存中有50个无符号字节数,编写程序统计其中素数的个数,结果以十进制形式在屏幕上显示。要求分别用子程序完成素数个数统计及十进制数显示。 解:分析: 素数,又称质数,是这样的整数:它除了能表示为它自己和1的乘积以外,不能表示为任何其他两个整数的乘积。判断一个整数是否为素数的方法:用这个数除以2到它本身,如果只能被它本身整除则为素数。参考程序如下: DATA SEGMENT
TTL DB 'TOTAL NUMBER OF PRIME NUMBER(S): $' TEN DW 10
PCOUNT DB 0
DA1 DB 1,2,3,4,5,6,7,8,9,10
DB 11,12,13,14,15,16,17,18,19,20 DB 21,22,23,24,25,26,27,28,29,30 DB 31,32,33,34,35,36,37,38,39,40 DB 41,42,43,44,45,46,47,48,49,50 DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA MAIN: MOV AX,DATA
MOV DS,AX LEA SI,DA1
MOV DI,50 ;用 DI 做主循环计数器 CLD
M_1: LODSB ;从DS:SI取一个无符号整数到AX
CALL ISPRIME JNC M_2 INC PCOUNT
CALL PRINTAX ;是素数则输出AX里的十进制数 MOV DL,9 ;用制表符分隔 CALL PUTC M_2: DEC DI
JNZ M_1 ;50个数完成?
MOV DX,OFFSET TTL ;输出素数总数 CALL PUTS
MOV AL,PCOUNT ;输出素数总数 XOR AH,AH CALL PRINTAX MOV AH,4CH INT 21H ISPRIME PROC
CBW TEST AX,1 ;是否为偶数
JNZ IP_1 ;若是偶数直接返回 IP_0: CLC ;CF=0表示是合数
RET
IP_1: CMP AX,1 ;1或0?
JBE IP_0 ;不是素数 CMP AX,3
JE IP_4 ;3是素数直接返回 MOV CX,3 ;从3开始循环 IP_2: MOV BX,AX ;留个副本在BX里
XOR DX,DX ;为除法清除DX DIV CX
MOV AX,BX ;恢复AX里的数 OR DX,DX ;余数为0否 JZ IP_0 ;为0为合数
ADD CX,3 ;本来是除数加2,只尝试除数为奇数的情况即可,直接加3是为了比较CX是否以及到了AX-1
CMP CX,AX
JB IP_3 ;若CX高于或等于AX,说明除数已经尝试到了N-1,AX是素数,直接返回,否则继续到IP_3
IP_4: STC ;CF=1表示是素数
RET IP_3: DEC CX ;CX-1才是真正下个要尝试的除数
JMP IP_2 ;继续试 ISPRIME ENDP PUTS PROC MOV AH,9 INT 21H RET
PUTS ENDP PUTC PROC MOV AH,2 INT 21H RET
PUTC ENDP PRINTAX PROC
XOR DX,DX DIV TEN MOV CX,AX OR CX,DX ;若商与余数都为0则结束递归 JZ P_1
PUSH DX ;留存DX中的余数以在递归后输出 CALL PRINTAX ;递归
POP DX ;从最高位开始恢复余数
ADD DL,'0' ;原来的输出语句ADD一下就好了 CALL PUTC P_1: RET
PRINTAX ENDP CODE ENDS END MAIN
第五章
1.选择题
(1)关掉工作电源后,其中存储的数据立即丢失的存储器是 。 A.硬盘 B.ROM C.光盘 D.RAM (2)下面说法正确的是 。 A.EPROM是不能改写的存储器
B.EPROM是可以改写的,因此它也是一种随机存取存储器
C.EPROM只能改写一次 D.EPROM可以改写,但它不是随机存取存储器 (3)某DRAM芯片有8条地址线,因些可以推断其存储容量不超过 。 A.512个存储单元 B.65536个存储单元 C.8192个存储单元 D.256个存储单元
(4)对于地址总线为20位的微处理器来说,其直接寻址的范围可达 。 A.16MB B.1MB C.64MB D.1GB
(5)在研制某一计算机应用系统的过程中,存储其监控程序可选用 。 A.RAM B.EPROM C.PROM D.ROM (6)下列四条叙述中,正确的一条是 。
A.硬盘和光盘都属于外存储器 B.计算机的外存比内存存取速度快 C.虚拟存储器属外存储器
D.计算机系统中的任何存储器在断电情况下,所存信息都不会丢失 (7)常用的虚拟存储器寻址系统由 两级存储器组成。 A.Cache-外存 B.Cache-Cache C.Cache-主存 D.主存-外存
(8)下列关于外存、内存以及Cache的不正确的说法是 。 A.内存通常由RAM、ROM芯片组成 B.Cache可以在CPU内部或外部
C.Cache只占用部分内存空间 D.外存的信息必须调入内存才能被CPU执行 (9)虚拟存储器由 实现。
A.硬件和用户编程 B.硬件和操作系统 C.ROM-BIOS D.用户编程和操作系统
(10)不能与CPU总线直接相连的存储器是 。 A.内存储器 B.ROM C.硬盘 D.RAM 解:参考答案: 题号 (1) (2) (3) (4) (5) 答案 D D B B B 题号 (6) (7) (8) (9) (10) 答案 A D B B C 2.简答题
(1)简述SRAM芯片与DRAM芯片的共同点与不同点。
答:SRAM与DRAM的共同点:都属于随机存取存储器,具有易失性。 SRAM与DRAM的不同点:SRAM利用双稳态触发器电路保存信息,集成度比DRAM低,功耗比DRAM大;DRAM利用MOS管栅极和源极之间的极间电容C保存信息,需要刷新电路保证信息较长时间保存。
(2)叙述ROM芯片的常见分类,各种ROM芯片的特点及其适用场合。
答:ROM的常用分类、特点及应用场合:
①掩膜ROM:生产完成的芯片已保存了信息,保存的信息无法修改,适用于大批量的定型产品中。
②PROM:PROM可以一次写入信息,一旦写入无法更改,适用于小批量的定型产品中。 ③EPROM:紫外线擦除可多次编程的存储器,适用于新产品的开发。 ④EEPROM:电擦除可多次编程的存储器,适用于需要在线修改的场合。 (3)主存储器的地址译码方式有哪几种?各有什么特点? 答:主存储器的地址译码方式分为全部译码与部分译码。 全部译码:把剩余的高位地址线全部作为译码器的输入,用译码器输出来作为片选信号的方法就是全部译码。采用全译码时各芯片(组)的地址范围是唯一的,即每个存储单元的地址唯一,没有地址重叠,地址空间可以得到充分利用。
部分译码:用剩余高位地址线的一部分作为译码器的输入,用译码器的输出来作为片选信号的方法就是部分译码。采用部分译码时,存储器单元的地址不唯一,存在地址重叠。没有参加译码的地址线越多,地址重叠就越严重。
(4)利用4片6116(2K×8位)芯片设计存储器系统时,采用全译码法并且保证存储器地址的连续,若起始地址为60000H,则存储器系统的最后一个单元地址是什么?
答:存储器系统的最后一个单元地址是61FFFH。
(5)某微机系统中ROM区有首地址为90000H,末地址为FFFFFH,求其ROM区域的存储容量。
答:其ROM区域的存储容量为448K。
(6)对于下列芯片,它们的片内地址线各有多少根?若分别用以下芯片组成容量为64KB的模块,请指出分别需要多少片芯片? ① Intel 2114(1K×4位的SRAM) ② Intel 6116(2K×8位的SRAM) ③ Intel 2764(8K×8位的EPROM)
答:①Intel 2114的片内地址线为10根,组成容量为64KB的存储器模块需要128片。
② Intel 6116的片内地址线为11根,组成容量为64KB的存储器模块需要32片。 ③ Intel 2764的片内地址线为13根,组成容量为64KB的存储器模块需要8片。 (7)简述高速缓冲存储器Cache的基本工作原理以及它与主存的关系。
答:在某一时间间隔内,CPU对局部范围的存储器访问较频繁,而对其它地址的访问较少。使用高性能的SRAM芯片组成容量较小的Cache,存放当前常用的代码,保证CPU读取Cache中数据的命中率较高,缩短相应的存取时间。
(8)采用虚拟存储技术能解决什么问题?虚拟存储器的管理方式有哪几种?
答:使用虚拟存储器可以保证计算机在不提高成本的前提下,提高有效的存储空间。 虚拟存储器的管理方式有:段式、页式、段页式。
3.设计题 (1)在8088CPU的系统中扩展32K字节的RAM,其扩充存储空间的起始地址为80000H。设系统的地址总线为A19~A0,数据总线为D7~D0,存储器芯片选用6264。采用74LS138译码器设计译码电路,画出扩展的存储器系统的连线图。 解:系统BUS D0~D7 D~D MEMW MEMR A0~A12
A19 A18 A17 A16 A 15 A14
A13 07 R/W D0~D7 6264 1# CS OE A0~A12 R/W D0~D7 6264 2# CS OE A0~A12 R/W D0~D7 6264 3# CS OE A0~A12 R/W D0~D7 6264 4# CS OE A0~A12
G1 Y1 G2A Y2 G2B 74LS138 Y3 C B A Y0 A0~A12 图5.7 习题3(1)连接 根据要求存储器系统的连接如图5.7所示。
(2)某微机系统的CPU为8088,且工作于最小方式,原有系统RAM存储器模块的容量为128KB,其首地址为40000H,现用6264RAM芯片(8K×8位)扩展一个容量为16KB的存储器模块,地址紧接原有RAM模块,试完成该扩展RAM模块设计(可选用译码器、与门、或门及非门等)。
解:原RAM存储器系统的容量为128KB,且首地址为40000H,则末地址为5FFFFH,现RAM存储器的首地址为60000H。该RAM扩展模块采用2片6264,其设计如图5.8所示。
A18 A17 G1Y0 Y1 A16
G 2AA19 Y2
G2B M/IO Y3 74LS138 A C 15?
A14 B Y7 A13 A D7~D0
MEMW
D7~D0 D7~D0 CS CS 8088系统 总线 WE 6264(1) WE 6264(2)
A12~A0 A12~A0 OE OE
MEMR
A12~A0
图5.8 习题3(2)连接 第六章
1. 填空题
(1)I/O数据缓冲器主要用于协调CPU与外部设备在 速度 上的差异。
(2)一般I/O接口的编址方式可以分成 存储器映像方式 和 I/O映像方式 两种。 (3)在微机系统中使用 地址 来区分不同的外部设备。 (4)CPU与I/O设备之间的数据传送方式有 无条件传送方式 、程序查询传送方式 、 中断控制方式 和 DMA方式 。
(5)一片Intel8255A一般占用 4 个端口地址。
(6)Intel8255A的端口C的按位置位/复位功能的控制字写入 控制寄存器 端口。 (7)Intel8255A工作在方式0时,端口A、B和C的输入/输出可以有 16 种组合。 (8)在DMA传送过程中完成数据传送功能是由 DMA控制器 硬件直接控制。 (9)在DMA方式下, DMA控制器 控制总线。
(10)在DMA数据传送方式中,实现地址的修改与传送字节数计数的主要功能部件是DMA控制器。
2. 画出程序查询数据传送方式的流程图。 解:程序流程如图6.6所示。
读取状态信息
否 准备就绪吗? 是
传送数据
图6.6 查询方式程序流程
3.假设某一计算机系统中有一片Intel8255A接口芯片,初始化时将它的A口、B口均设置成方式1输出,请写出这时Intel8255A与外设的联络信号名称与信号方向。
答:A口设置成方式1输出时的联络信号有:
OBFA:输出缓冲器缓信号,8255A输出给外设; ACKA:应答信号,外设给8255A;
INTRA:中断请求信号,8255A输出给CPU。 B口设置成方式1输出时的联络信号有:
OBFB:输出缓冲器缓信号,8255A输出给外设; ACKB:应答信号,外设给8255A;
INTRB:中断请求信号,8255A输出给CPU。
4.假设Intel8255A的A口地址为300H,B口地址为301H,C口地址为302H,控制口地址为303H,请编写程序段,分别完成:
(1) 设置A口和B口均为方式0输入,C口为方式0输出; (2) 设置A口为方式2,B口为方式1输入;
(3) 设置A口为方式1输入,B口为方式1输入,PC6,PC7为输出。 解:(1)MOV DX,303H
MOV AL,10010010B
OUT DX,AL (2)MOV DX,303H
MOV AL,11011111B OUT DX,AL
(3)MOV DX,303H
MOV AL,10110111B OUT DX,AL
5.写出图6.7中Intel8255A占用的四个端口地址。
D0~D7 D0~D7 IOR RD IOW WR A2 A1 A15
A1 A0 ?
A4 8255A
A3 A0 CS AEN
解:8255A的A口地址为:FFF0H;
B口地址为:FFF2H; C口地址为:FFF4H; 控制口地址为:FFF6H。
6.假设Intel8255A的端口地址为120H~123H,编写程序段使它的PC4产生一个正脉冲。 解:参考程序段如下:
MOV DX,0123H MOV AL,10000000B
OUT DX,AL ;初始化8255A MOV AL,00001000B OUT DX,AL NOP NOP INC AL
OUT DX,AL NOP NOP DEC AL
OUT DX,AL HLT
7.一个具有16键的简易键盘,若只允许使用Intel8255A的一个端口作键盘接口电路,请问应选用哪一个端口?若一片Intel8255A的三个端口均直接用于控制非编码键盘,最多的键数为多少?
解:一个具有16键的简易键盘,若只允许使用Intel8255A的一个端口作键盘接口电路,应选用C口。
图6.7 习题5的硬件连接
若一片Intel8255A的三个端口均直接用于控制非编码键盘,最多的键数为144。
8.图6.8是一片Intel8255A与软盘控制器连接的信号分配,箭头标明了I/O的方向。假设Intel8255A的端口地址为1200H~1203H,根据该图编写Intel8255A的初始化程序。
方式0 方式2 PC3 中断请求
PA0 PA1 ?PA7 PC4 PC5 PC6 PC7 PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7 PC0 PC1 PC2
选响响就选步读写磁启磁电同索D D ? D 017 通应应绪择进选选盘用头机步引道((选使准传驱方通通选 出入择能备感动向择软盘驱动器 ))器器好
图6.8 习题8的图示
0 CRC 解:Intel8255A的初始化程序为:
MOV DX,1203H MOV AL,0C0H OUT DX,AL
MOV AL,00001001B
OUT DX,AL ;开放输入中断,PC4=1 MOV AL,00001101B
OUT DX,AL ;开放输出中断,PC6=1
9.在8088最小系统中,由一片Intel8255A构成输入/输出接口,要求端口地址为240H~243H,Intel8255A的A口接输入设备,从A口读入数据并对这一数据的低4位取反(高4位不变)后,从B口输出。请完成下列问题:
(1) 设计Intel8255A片选信号的译码电路;
(2) 编写Intel8255A的初始化及输入/输出程序段。 解:(1)一种参考译码电路:
图6.9 习题9的参考译码电路
(2)MOV DX,0243H MOV AL,10011001B OUT DX,AL MOV DX,0240H
IN AL,DX XOR AL,0FH MOV DX,0241H OUT DX,AL HLT
10.简要说明Intel8237A的四种传送方式。 答:8237A在DMA传送时的四种工作方式: (1)单字节传送方式
每次DMA请求仅传送一个字节内容。 (2)数据块传送方式
当8237A工作在数据块传送方式下,一旦开始了DMA操作,就连续地进行字节数据传送直到当前字节计数器减到0,再减至0FFFFH后,产生有效的EOP信号为止。
(3)请求传送方式
请求传送方式类似于数据块传送方式,但每传送一个字节后,8237A都要对DREQ信号进行检查,若DREQ信号无效,就暂停传送数据。
(4)级联方式
8237A可以多片级联使用,以扩展DMA通道数。
复习纲要:
第一章 计算机基础知识
知识要点:R进制数表示 数制间转换 有符号数表示 浮点数的规格化表示
数的运算(算术运算、逻辑运算、补码运算) BCD码、ASCII码、汉字编码 奇偶校验
第二章 8086/8088系统结构 知识要点:
8086/8088的内部结构 8086/8088的内部寄存器 8086/8088的外部引脚 8086/8088读/写操作时序 逻辑地址与物理地址
8086系统存储器结构及读/写操作过程 堆栈
第三章 8086/8088系统结构 知识要点: 寻址方式 指令系统
第四章 汇编语言源程序设计 知识要点: 基本概念 伪指令
汇编语言程序设计 INT 21H指令的使用 第五章 存储器组织 知识要点: 存储器分类
存储系统的分级结构 存储器的主要指标 半导体存储器 存储器的扩展 片选信号的处理
第六章 并行输入/输出接口 知识要点: I/O接口的功能 I/O接口的基本结构 I/O接口的编址方式 CPU与外设的信息交换方式 简单I/O并行接口 Intel8255A及其应用