INC ENDP ENDS
TEST JE INC LOOP RET
AL,80H BX LP
CONT RS
CONT:
START CODE
END START
答:程序空处可填CNT,字节变量RS的最后结果是04H。该程序实现的功能是:统计数据段中以BUF为首址的带符号字节数据表中负数的个数,CNT为表中所有数据的个数,即表的长度。需要注意的是:十进制数据―145‖在以二进制带符号字节数据形式存放时相当于―-111‖。
13.试编写一个汇编语言程序段,要求对键盘输入的小写字母用大写字母显示出来。 答案: abc: mov
int cmp jb cmp ja sub mov mov int jmp
ah,1
21h al,‘a‘ stop al,‘z‘ stop al,20h dl,al ah,2 21h abc
stop: ret
14.编写程序,比较两个字符串STRING1和STRING2所含字符是否完全相同,若相同则显示―MATCH‖,若不同则显示―NO MATCH‖。 答案:datarea segment
string1 string2 mess1 mess2 datarea
db db db db ends
?asfioa‘ ?xcviyoaf‘ ?MATCH‘,‘$‘ ?NO MATCH‘,‘$‘
prognam segment main
start:
proc
far
assume cs:prognam,ds:datarea push ds
16
sub ax,ax
;返回DOS
push ax mov ax,datarea mov ds,ax mov es,ax
begin: mov cx, string2-string1
;赋初值
mov bx, mess1-string2 cmp bx,cx jnz lea lea lea repe jne mov lea int ret
dispno
dx,addr ;若长度相同 si,string1
di,string2 ;地址指针赋初值 cmpsb dispno ah,9 dx,mess1 21h
;相同,显示MATCH
;比较
;比较两字符串的长度
dispno:
mov lea int
ret
ah, 9
;不同,显示NO MATCH
dx, mess2 21h
main prognam
endp ends end
start
15.编写一个完整的源程序,将数据35、-27、-13、6、-47、52、9、-3中的正数放入以BUFFER为首址的数据缓冲区中。 答:一种可能的程序如下实现: DATA
DATA STACK
STACK CODE
BEGIN: AGAIN: GO: CODE
SEGMENT BLOCK DB 35,-27,-13,6,-47,52,9,-3 COUNT EQU $-BLOCK BUFFER DB COUNT DUP(?) ENDS
SEGMENT PARA STACK?STACK‘ DW 40 DUP(?) ENDS
SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK MOV AX,DATA MOV DS,AX MOV ES,AX ;需用STOS串操作指令 MOV CX,COUNT LEA SI,BLOCK ;源数据区指针 LEA DI,BUFFER ;正数存放区指针 CLD ;自动增量 LODSB ;取源数据,并修改SI TEST AL,80H ;取符号位,不影响AL JS GO ;符号位=1,是负数,不存 STOSB ;存正数并修改DI LOOP AGAIN MOV AH,4CH ;退出循环,返回DOS INT 21H ENDS END BEGIN
17
16.从内存单元BUF开始的缓冲区中有7个8位无符号数,依次为13H、0D8H、92H、2AH、66H、0E0H、3FH。编程找出它们的中间值并放入RES单元,且将结果以―(RES) = ?‖的格式显示在屏幕上。
答:一种可能的程序如下实现: DATA
BUF RES STR
SEGMENT DB DB ENDS
SEGMENT PARA STACK?SSEG‘ ENDS SEGMENT ASSUME PROC
FAR PUSH XOR PUSH MOV MOV MOV MOV
CS:CODE,SS:SSEG,DS:DATA,ES:DATA DS AX,AX AX AX,DATA DS,AX ES,AX CX,6
;有STOS指令,需用ES ;外循环次数,比6次
;主程序
DB
100 DUP(?)
DB DB
13H,0D8H,92H,2AH,66H,0E0H,3FH
?
;中间数的存放单元
?(RES)=‘ ?,?,?$‘
;结果字符串
STR1 DATA SSEG
SSEG CODE
MAIN
AGN: MOV
INC
SI,OFFSET BUF MOV
DI,SI
DI MOV
;SI、DI指向相邻2数
;内循环次数,比6次
DX,6
AGN1: MOV
AL,[SI] CMP JB
AL,[DI]
;两个无符号数相比较
;小于则转,不互换
UNCH
EXCH: XCHG AL,[ DI ]
MOV INC DEC JNZ LOOP
;前1单元较大,则互换
;大数放在后面
;修改指针,指向下一个数
[ SI ],AL SI DX AGN
AGN1 DI
UNCH: INC
;未处理完,继续内循环
;外循环
DONE: MOV
AL,[SI-3] MOV AND MOV SHR CALL LEA CLD STOSB MOV AND CALL STOSB
;排序完成,取中间数
RES,AL AL,0F0H CL,4 AL,CL BATR
;调子程序,将AL值转换为ASCII码 ;DI指向结果单元
;分离高半字节
DI,STR1
;存放转换结果
AL,RES AL,0FH BATR
;分离并转换低半字节
18
MAIN
ENDP
LEA MOV INT RET
DX,STR AH,09H
21H
;显示整个字符串
;主程序MAIN结束
;子程序BATR,实现16进制数到ASCII码的转换 BATR
PROC
NEAR CMP JB ADD AL,‘0‘ RET
;子程序结束
AL,10
NUM
;字母
;入口参数为AL
;是数字,则转NUM
AL,‘A‘-10-‘0‘
NUM: ADD BATR CODE
ENDP ENDS
END MAIN
简析:本例的基本思路是:先把7个无符号数按大小排序,排序完成之后取位于中间的一个数即为中间值。然后将该16进制数转换为两个对应的ASCII码,再与要求的格式字符一起输出送显即可。
数据排序可以是从大到小、或从小到大排列,本参考程序完成从小到大排序,由一个双重循环结构实现。内循环完成一个数与其它数之间的一一比较,并使每次比较所得的小数置于低地址单元。外循环实现所有数之间的两两相较。共7个数据,故内、外循环中的比较次数均为6次。
编程时需注意:无符号数比较大小应使用JA、JB、JAE、JBE指令,本例完成从小到大的排列,故用JB控制转移到UNCH;若要从大到小排列,则用JA代替JB即可。 对两个循环体进行初始化时,需仔细考虑指针和循环控制寄存器的初值。在数据段的定义中,分别定义STR、STR1两个变量名字,是为了便于在STR1处存放转换结果;显示时使DX直接指向STR,以STR1末尾的―$‖为结束符。中间值找出之后,应把高、低半字节相分离,并分别转换为各所对应的ASCII码。
17.设某测试系统中,1号端口为测试口,所得数据是0~9之间的十进制整数;2号端口为显示口,对应于数字0~9的LED七段共阴显示码依次为:3FH、06H、5BH、4FH、66H、6DH、3DH、07H、7FH、6FH。编写一段查表送显的程序,要求:先从测试口读入一个数据,再查表将相应的显示码从显示口送出,如此反复进行直至读入数据―0FFH‖为止。
答:一种可能的程序如下实现: DATA TAB
SEGMENT
DB 3FH,06H,5BH,4FH,66H DB 6DH,3DH,07H,7FH,6FH ;0~9的七段码
DATA ENDS STACK SEGMENT PARA STACK?STACK‘
DW 50 DUP(?)
STACK ENDS CODE SEGMENT ASSUME CS:CODE,SS:STACK,DS:DATA START: MOV AX,DATA MOV DS,AX LE BX,TAB ;BX指向表首址 NEXT: IN AL,1 ;从测试口输入 CMP AL,0FFH JE STOP ;是0FFH,结束 XLAT TAB ;不是0FFH,查表转换 OUT 2,AL ;向显示口输出七段码 JMP NEXT ;继续测试 STOP: MOV AH,4CH INT 21H CODE ENDS END START
第6章 存储器系统
一、选择题
1.下列(B)不是半导体存储器芯片的性能指标。
A. 存储容量 B. 存储结构 C. 集成度 D. 最大存储时间 2.高速缓存由(B)构成。
19
A. SRAM B. DRAM C. EPROM D. 硬磁盘
3.由2K×1bit的芯片组成容量为4K×8bit的存储器需要(D)个存储芯片。 A. 2 B. 8 C. 32 D. 16
4.安排2764芯片内第一个单元的地址是1000H,则该芯片的最末单元的地址是(D)。 A. 1FFFH B. 17FFH C. 27FFH D. 2FFFH
5.一片容量为8KB的存储芯片,若用其组成1MB内存,需( C )片。 A. 120 B. 124 C. 128 D. 132 6.外存储器包括 ( A B E F )。
A. 软磁盘 B. 磁带 C. SRAM D. BIOS E. 硬磁盘 F. 光盘 7.在多级存储体系结构中,Cache-主存结构主要用于解决( D )的问题。 A. 主存容量不足
B. 主存与辅存速度不匹配
C. 辅存与CPU速度不匹配 D. 主存与CPU速度不匹配
8.动态RAM的特点之一是( BD )。 A. 能永久保存存入的信息 C. 不需要刷新电路 二、填空题
1.在分层次的存储系统中,存取速度最快、靠CPU最近且打交道最多的是 Cache 存储器,它是由 DRAM 类型的芯片构成,而主存储器则是由 SRAM 类型的芯片构成。 2.将存储器与系统相连的译码片选方式有 线选法、部分地址译码法和 全地址译码 法。
3.若存储空间的首地址为1000H,存储容量为1K×8、2K×8、4K×8H 和8K×8的存储器所对应的末地址分别为 13FFH 、 17FFH 、 1FFFH 和 2FFFH 。 4.微机系统中存储器通常被视为 Cache 、 主存 、辅存 三级结构。 三、综合题
1.某微机系统中内存的首地址为3000H,末地址为63FFH,求其内存容量。 答:存储区总的单元数为:63FFH-3000H+1=3400H,故总容量13KB。
计算方法:若直接用十六进制表示,则总容量=(3*163+4*162)/1024;
若将地址表示成二进制,则总容量= 213B+212B+210B;
2.下图为SRAM6116芯片与 8088系统总线的连接图。 答:
(1)6116芯片的存储容量是2k*8bit
(2)第一片6116的内存地址范围是F1000H~F17FFH
第二片6116的内存地址范围是F1800H~F1FFFH
(1)写出6116芯片的存储容量;
(2)分析每片6116所占的内存地址范围。
B. 需要刷新电路
D. 存取速度高于静态RAM
20