资源描述
程序设计题
1、统计从01000H内存单元开始的100个字(WORD)型带符号数中的正数,负数和零的字(WORD)个数?
解:设正数个数存放于BX中,负数个数存放于DI中,零的个数存放于DX中
MOV AX,0100H JZ ZERO
MOV DS,AX JL NEGAT
MOV BX,0 INC BX
MOV DX,0 JMP NEXT1
MOV DI,0 ZERO: INC DX
MOV SI,0 JMP NEXT1
MOV CX,100 NEGAT: INC DI
NEXT: MOV AX,[SI] NEXT1: ADD SI,2
CMP AX,0 LOOP NEXT
2、实现两个十六位二进制的加法,要求加数放在FIRST开始单元,被加数放在SECOND 开始单元,和数放在SUM单元
解:MOV AX, FIRST
ADD AX, SECOND
MOV SUM, AX
3 从BUFF单元起有一个字符串(长度小于65535),以'*'结束,编写一个完整程序求该字符串长度存入LENT单元,并统计字符串中含有大写英文字符的个数并存入COUNT单元。要求源程序具备必要的伪指令和段说明。
1.
DATA SEGMENT
INC CX
BUFF DB 'ABCD…….*'
CMP AL,'A'
LENT DW ?
JC NEXT
COUNT DW ?
CMP AL,'Z'
DATA ENDS
JNC NEXT
CODE SEGMENT
INC DX
ASSUME CS:CODE,DS:DATA
NEXT:
INC BX
START:MOV AX,DATA
JMP LP
MOV DS,AX
DONE:
INC CX
LEA BX,BUFF
MOV LENT,CX
MOV CX,0
MOV COUNT,DX
MOV DX,0
MOV AH,4CH
LP: MOV AL,[BX]
INT 21H
CMP AL,'*'
CODE
ENDS
JZ DONE
END START
4.有一带符号8位数X存于DAT单元.编一个程序段判断该数,若x小于0则将0FFH送MARK单元;若X等于0则将MARK+1单元置0FFH;若X大于0则置MARK+2单元为0FFH。
MOV AL,DAT
JMP DONE
AND AL,AL
LPl:
MOV MARK,0FFH
JS LP1
JMP DONE
JZ LP2
LP2:
MOV MARK+1,0FFH
MOV MARK+2,0FFH
DONE:
HLT
5.已知有X、Y、Z三个字变量,存放无符号整数,请编一个完整的程序实现公式Z=(X+Y)/(X-Y+600)(不考虑溢出情况)。
DSEG SEGMENT SUB BX,Y
X DW ? ADD BX,600
Y DW ? MOV AX,X
Z DW ? ADD AX,Y
DSEG ENDS MOV DX,0
CSEG SEGMENT DIV BX
ASSUME CS:CSEG,DS:DSEG MOV Z,AX
MAIN PROC FAR MOV AH,4CH
BEGIN: MOV AX,DSEG INT 21H
MOV DS,AX MAIN ENDP
MOV BX,X CSEG ENDS
END BEGIN
6.AX寄存器中存放着4位十六进制数。试编写一个汇编语言程序,将这4位十六进制数分别转换为相应的ASCII码,并依次存放到RESULT数组的4个字节中去,要求用调用子程序的方法实现。
CODE SEGMENT HASC PROC NEAR
ASSUME CS:CODE,DS:CODE MOV DL,AL
START: MOV BX,CODE AND DL,0FH
MOV DS,BX CMP DL,9
MOV CL,4 JA L2
MOV BL,4 ADD DL,30H
MOV SI,OFFSET RESULT L1: RET
LP: CALL HASC L2: ADD DL,37H
MOV [SI],DL JMP L1
INC SI HASC ENDP
SHR AX,CL RESULT DB 4 DUP(?)
DEC BL CODE ENDS
JNZ LP END START
EXIT: MOV AH,4CH
INT 21H
7.写出对存放在DX和AX中的双字长数求补的指令序列。
方法1 方法2 方法3
MOV CX,0 NOT AX NEG DX
SUB CX,AX NOT DX NEG AX
MOV AX,CX ADD AX,1 SBB DX,0
MOV CX, 0 ADC DX,0
SBB CX, DX
MOV DX, CX
8.设有两个等长字符串。试编写一个汇编语言程序,比较它们是否完全相同;若相同,则将字符"Y"送入AL中,否则,将字符"N"送入AL中。
CODE SEGMENT
REPE CMPSB
ASSUME CS:CODE,DS:CODE
JNZ NE
START: MOV AX,CODE
MOV AL,'Y'
MOV DS,AX
JMP EXIT
MOV ES,AX
NE:
MOV AL,'N'
CLD
EXIT:
MOV AH,4CH
LEA SI,STRING1
INT 21H
LEA DI,STRING2
STRING1 DB'…'
MOV CX,DI
STRING2 DB'…'
SUB CX,SI
CODE
ENDS
XOR AX,AX
END START
9.写出程序段,把DX,AX中的双字右移四位。
MOV CL,4 SHR DX,CL
SHR AX,CL SHL BL,CL
MOV BL,DL OR AH,BL
9.编写一个完整的8086汇编语言程序,从附加段中首地址为ADR1(变量名)连续存放的100个字型无符号整数中找出最大数,并将此数及其偏移地址分别放入变量MAX和MAXM中
DATA SEGMENT
MOV AX,ES:[SI]
ADR1 DW 100 DUP(?)
LOP1:
CMP AX,ES:[SI]
MAX DW ?
JAE LOP3
MAXM DW ?
MOV AX,ES:[SI]
DATA ENDS
MOV ES:[MAXM],SI
CODE SEGMENT
LOP3:
ADD SI,2
ASSUME CS:CODE,DS:DATA,ES:DATA
LOOP LOP1
MAIN PROC FAR
MOV ES:[MAX],AX
MOV AX,DATA
MOV AH,4CH
MOV ES,AX
INT 21H
MOV SI,OFFSET ADR1
MAIN
ENDP
MOV CX,100
CODE
ENDS
MOV ES:[MAXM],SI
END MAIN
10.已知(AX)=4BD5H,统计AX中1的个数和0的个数,并分别放在BL和DL中。编写程序段实现该功能。
MOV AX,4BD5H INC DL
MOV BL,0 JMP L3
MOV DL,0 L2: INC BL
MOV CX,16 L3: LOOP L1
L1: SHL AX,1 HLT
JC L2
11.有一个首地址为ARRAY的N个字的数组,请编程序使该数组中的数按照从大到小的次序排序。(采用冒泡排序算法)
DATA SEGMENT
MOV BX,0
ARRAY DW A1,A2,A3,…,AN
LOOP2:
MOV AX,ARRAY[BX]
DATA ENDS
CMP AX,ARRAY[BX+2]
PROG SEGMENT
JGE CONTINUE
ASSUME DS:PROG,DS:DATA
XCHG AX,ARRAY[BX+2]
MAIN PROC FAR
MOV ARRAY[BX],AX
START: PUSH DS
CONTINUE:
ADD BX,2
SUB AX,AX
LOOP LOOP2
PUSH AX
MOV CX,DI
MOV AX,DATA
LOOP LOOP1
MOV DS,AX
RET
MOV CX,N
MAIN
ENDP
DEC CX
PROG
ENDS
LOOP1: MOV DI,CX
END START
存储器设计应用题
1.已知有SRAM芯片62256(32K×8)及EPROM芯片27256(32K×8),现用这两种芯片构成8088最小系统内存的一部分,其中SRAM所占的地址空间为40000H--47FFFH,EPROM所占的地址空间为F8000H--FFFFFH,试设计出其原理图。
2.给8088CPU系统扩展32K的ROM,且所选用的存储器芯片为8K×8,地址译码器为74LS138,ROM的地址范围从60000H~存储器芯片为8K×8,可知芯片容量为8K,地址线为13条,数据线为8条,而系统要求容量为32K,位数是8,因此为字扩展。需要的芯片为4个
存储器芯片的地址为:
1)、地址译码器:3个输入端的信号中必须有:A13,A14,其对应的位置不同,输出的引脚也不同。只要输入信号与输出信号一致,且连接到相应的存储器芯片上 。
2)、数据线连接正确
3)、地址线连接正确67FFFH,要求写出每一个存储器芯片的地址范围,
画出逻辑连线图。
3.设某系统的CPU有16根地址线A15-A0、8根数据线D7-D0。现需扩展6KB的ROM,地址范围为:0000H-17FFH,采用2716芯片。
(1) 请写出存储器器件2716的数据线和地址线的条数;
(2)计算ROM的芯片数量;
(3)设计存储器扩展原理图,并写出每片ROM的地址范围。
1)存储器2716的数据线有8条,地址线有11条。
2)因为2716的容量为2KB,要扩展6KB,所以需要三片。
3)原理图如下:
4.已知RAM芯片结构如图所示,回答下列问题:
1) 该芯片容量为多少?若要求构成一个2K×8的RAM阵列,需几个这样的芯片?4
2) 若RAM阵列组的起始地址为E1000H,画出存储器系统与8086的电路连接图(8086工作在最小模式),并写出每组RAM芯片的地址空间。
3) 编程:将缓冲区中的10个数据写进E1000开始的10个单元中,并说明如何查看结果?
MOV AX,0E100H MOV CX,10
MOV ES,AX CLD
MOV SI,OFFSET BUF REP MOVSB
MOV DI,O
查看结果 D E100:0
5.设某微机系统需要扩展内存RAM 32KB,扩充的存储器空间为10000H开始的连续存储区域。存储器芯片采用16K×8的RAM芯片,CPU使用8088。
1)选用芯片,画出逻辑连接图;
2)写出各片RAM的所在地址区域。
答案:2) 地址范围 第一片 10000H--13FFFH
第二片 14000H--17FFFH
6.用4K×4的EPROM存储器芯片组成一个16K×8的只读存储器。试问:
(1)该只读存储器的数据线和地址线的位数。
(2)根据题意需要多少个4K×4的EPROM芯片?
(3)画出此存储器的组成框图。
答案: (1)该存储器有14位地址线和8位数据线。
(2)共需总芯片数为8片。
8255编程题
1.一个8088系统中有一8255A,8255A各口设置如下:A组与B组均工作于方式0,A口为数输入,B口为输出,C口高位部分为输出,低位部分为输入,A口地址设为40H。
1) 写出工作方式控制字
2) 对8255A初始化
3) 从A口输入数据,将其取反后从B口送出
1)10010001B 即91H
2) MOV AL,91H; OUT 43H,AL
3)IN AL,40H; NOT AL; OUT 41H,AL
2.设8255A的4个寻址地址号为0060H~0063H,试编写下列各种情况下的初始化程序。
1) 将A组和B组设置成方式0,A口,B口为输入,C口为输出。
2) 将A组工作方式设置成方式2,B组为方式1,B口作为输出。
3) 将A口,B口均设置成方式1,均为输入,PC6和PC1为输出.
4) A口工作在方式1,输入;B口工作在方式0,输出;C口高4位配合A口工作,低4位为输入。
1) MOV AL,92H 2) MOV AL,0C4H 3) MOV AL,0B6H 4) MOV AL,0B1H
OUT 63H,AL OUT 63H,AL OUT 63H,AL OUT 63H,AL
3. 8255A控制字如下,8255A端口地址为:160H、162H、164H、166H,端口A方式0输出,端口B方式0输入,端口C方式0输出。编写程序实现初始化,并将端口B内容的2倍与端口C的内容求和后将结果取反送到端口A。
根据端口地址知,端口A地址为:160H,端口B地址为:162H,端口C地址为:164H,控制端口地址为:166H。端口A方式0输出,端口B方式0输入,端口C方式0输入知:控制字8BH。
MOV AL, 8BH MOV DX, 164H
MOV DX, 0166H IN AL, DX
OUT DX, AL ADD AL, BL
MOV DX, 0162H NOT AL
IN AL, DX MOV DX, 0160H
MOV BL, AL OUT DX, AL
ADD BL, AL
4 用一片8255 A芯片设计一基于PC系统总线的I/O接口板,要求:
1)8255A占用的端口地址为300H--306H,画出原理图。
2)设8255A的PA、PB、PC口均工作在方式0,PA口为输入,PB、PC口均为输出,编写8255的初始化程序片段(已知8255A控制字为10010000B)。
3)编写程序片段,将从PA口读入的状态送至PB口输出。
(2)MOV DX, 306H
MOV AL, 90H
OUT DX, AL
3) MOV DX, 300H
IN AL, DX
MOV DX, 302H
OUT DX, AL
5.已知8255的控制口地址为236H,开关信息接在PB口,发光二极管接在PA口,使用8255作为接口芯片,读开关量的状态,并用发光二极管显示输出。在将开关的信息存放在FIRST单元的同时,发光二极管完成其信息的显示。要求画出完整的线路连接图并设计相应的程序。(8086工作在最小模式,8255A相应的控制字为82H)。
MOV DX, 236H
MOV AL, 82H
OUT DX, AL
MOV AX, SEG FIRST
MOV DS, AX
MOV SI, OFFSET FIRST
LOP: MOV DX, 232H
IN AL, DX
MOV [SI], AL
MOV DX, 230H
OUT DX, A L
JMP LOP
6 8255A的工作方式控制字和C口的按位置位/复位控制字有何差别?若将C口的PC2引脚输出高电平(置位),假设8255A控制口地址是303H,程序段应是怎样的?
答:工作方式控制字的最高位为1,而C口的按位置位/复位控制字最高位为0
MOV DX,303H
MOV AL,80H
OUT DX,AL
MOV AL,05H
OUT DX,AL
7 已知8255A的控制口地址为236H,LED采用共阳级接法。字型信息接在PB口,字位信息接在PA口,使用8255A作为接口芯片,在两块LED上显示自己的学号。要求画出完整的线路连接图并设计相应的程序(8086工作在最小模式,8255A相应控制字为80H)。
答案:见图
MOV DX,236H LOP: LOOP LOP
MOV AL,80H MOV DX,232H
OUT DX,AL MOV AL,nn ;学号高位
MOV CX,000H OUT DX,AL
START:MOV DX,232H MOV AL,2
MOV AL,nn ; 学号低位 MOV DX,230H
OUT DX,AL OUT DX,AL
MOV AL,1 LOP1:LOOP LOP1
MOV DX,230H JMP START
OUT DX,AL
8.若打印机及其工作时序如图所示,当打印机不忙时(BUSY=0),向它送数据(设每次只传送1个字节)并在数据稳定时用 负脉冲将数据存于打印机内部,同时设置打印机忙信号,即BUSY =1。
1)用可编程接口芯片8255A将打印机与总线相连接起来。若规定8255A的地址为0320H~032FH任选,试画出连接电路图。
2)数据段中首地址为BUFFER的区域中存放着100字节要打印的字符,试编写包括8255A初始化的打印程序,并将100个字符打印出来。
9.在一个系统中,8255A的四个端口地址分别为:420H、422H、424H和426H。要求:
1)初始化8255A,使端口A、B、C均工作于方式0,端口A作为输入端口,端口B和C作为输出端口。
2)将端口A输入的信息取反后直接输出到端口B。
3)检测端口A输入的信息的PA7位。当PA7=1时,端口C输出FFH,否则,输出00H。
请编写程序段,完成上述功能(程序要加注解)。
答案: 1) MOV AL,90H
MOV DX,426H
OUT DX,AL
2) MOV DX,420H
IN AL,DX
MOV DX,422H
NOT AL
OUT DX,AL
3) MOV DX,420H ;从端口A输入信息
IN AL,DX
TEST AL,80H ;测试PA7是否为0
MOV AL,0
JZ KO ;如果为0,输出0
MOV AL,0FFH ;否则输出0FFH
KO:MOV DX,424H ;端口C的地址
OUT DX,AL
8253编程题
1 设8253A三个计数器的端口地址为100H、101H、102H,控制寄存器端口地址103H。输入时钟为2MHz,让1号通道周期性的发出方波,其周期为1ms,试编写初化程序段。
答: 要输出脉冲周期为1ms,输出脉冲的频率是,当输入时钟频率为2MHz时,计数器初值是。
使用计数器1,先加载低8位,后加载高8位,设为方式3,二进制计数,控制字是76H。设控制口的地址是103H,计数器1的地址是101H。程序段如下:
MOV
DX,103H
MOV
AX,2000
MOV
AL,76H
OUT
DX,AL
OUT
DX,,AL
MOV
AL,AH
MOV
DX,101H
OUT
DX,AL
2.某系统中8253芯片的通道0至通道2和控制端口的地址分别为0FFF0H~0FFF6H,定义通道0工作在方式2,CLK0=2MHz,要求输出OUT0为1KHz的速率波;定义通道1工作方式0,其CLK1输入外部计数事件,每计满1000个向CPU发出中断请求。试写出8253通道0和通道1的初始化程序。
MOV DX,0FFF6H MOV DX,0FFF6H
MOV AL,35H MOV AL,61H
OUT DX,AL OUT DX,AL
MOV AX,2000H MOV AL,10H
MOV DX,0FFF0H MOV DX,0FFF2H
OUT DX,AL OUT DX,AL
MOV AL,AH
OUT DX,AL
3. 若要采用一片8253产生近似为1Hz的对称方波,已知时钟频率为2MHz,8253地址为350-353H,试编写8253初始化程序,并说明通道引脚的连接方法。
答案: 时钟频率为2MHz,要分频至1Hz,分频系数为2000000。一个8253的计数器分频系数最大为65536,所以必须用两个计数器串联起来工作。即将2MHz的时钟连接到0#计数器的输入端CLK0,OUT0连接到CLK1,1Hz的对称方波由1#计数器的输出端OUT1输出。设0#计数器分频系数定为10000,则OUT0输出200Hz波形。1#计数器分频系数定为200。0#计数器输出的200Hz波形作为1#计数器的时钟信号,经1#计数器200分频后得到1Hz的波形。两个计数器均初始化为方式3,初始化程序如下:
MOV DX,353H OUT DX,AL
MOV AL,37H OUT DX,AL
OUT DX,AL INC DX
MOV AL,77H MOV AL,00H
OUT DX,AL OUT DX,AL
SUB DX,3 MOV AL,02H
MOV AL,00H OUT DX,AL
展开阅读全文