MOV AL,0FFH
12、下面的程序段是统计AX中16位二进制数1的个数,并将结果放在CX中,填空使程序完成预定的功能。
XOR CX,CX L1: AND AX,AX JZ STOP SHL AX,1 (CMC) (JNZ L2) INC CX L2: JMP L1 STOP:HLT
13、下面的程序段是求8个无符号数累加和, 最后结果用双字表示,存在YAH和YAL单元,填空使程序完成预定的功能。 DATA SEGMENT
TABLE DW 34,789,67,78,345,89,78,60 YAH DW 0 YAL DW 0 DATA ENDS CODE SEGMENT
ASSUME CS:CODE, DS:DATA START: MOV AX,DATA MOV DS,AX MOV DX,0
XOR AX, AX ;清AX MOV BX, OFFSET TABLE MOV CX, 8 CLC
LP: ADD AX, [BX] (ADC DX,0 )
( CLC ) DON: INC BX
INC BX
LOOP LP MOV YAL,AX ;存和 MOV YAH,DX MOV AH,4CH INT 21H CODE ENDS
END START
14、8086系统中接口连接关系如下图所示。要求回答以下问题:
(1) 试分别确定8255,8253,8259及8251的端口地址;
(2) 设8255的PA口为输出,PB口为输入,试写出对PA口和PB口执行输入/输出操作的指令。 ( STOB )
ALEAD7~AD0G373A7~A08086CPUM/IOA6A5A4C B AA7A0Y0Y1CSA2G1G2AG138Y2Y3A1CS8253A1A0A2A1A1A08255
8255的端口地址为:___________________________________; 8253的端口地址为:___________________________________; 8259的端口地址为:___________________________________; 8251的端口地址为:___________________________________; 对PA口操作的I/O指令为_______________________________; 对PB口操作的I/O指令为______________________________。
A7 A6 A5 A4 A3 A2 A1 A0
1 0 0 0 任意 ? ? 0 Y0 1 0 0 1 任意 ? ? 0 Y1
1 0 1 0 任意 ? ? 0 Y2
1 0 1 1 任意 ? ? 0 Y3 ? 8255的端口地址为 80H, 82H, 84H, 86H
8253的端口地址为 90H, 92H, 94H, 96H 8259的端口地址为 A0H, A2H,
8251的端口地址为 B0H, B2H,
(2) OUT 80H, AL
IN AL, 82H 源程序如下:
MOV AH, 0 MOV AL, 9 MOV BL, 8 ADD AL, BL AAA AAD DIV AL
结果AL=01H,AH=00 H,BL=08H。
15、源程序如下:
MOV AX, SEG TABLE ;TABLE为表头 MOV ES, AX
MOV DI, OFFSET TABLE MOV AL, ‘0’ MOV CX, 100 CLD
REPNE SCASB
问:1) 该段程序完成什么功能?
2) 该段程序执行完毕之后,ZF和CX有几种可能的数值?各代表什么含义?
答:(1) 从目的串中查找是否包含字符 ‘0’,若找到则停止,否则继续重复搜索。明已找到字符
ZF=0, 说明未找到字符 CX?0,说明中途已找到字符退出 CX=0,且ZF=0说明串中无字符 ‘0’
16、源程序如下:
CMP AX, BX
JNC L1 JZ L2
JNS L3 JNO L4 JMP L5
设AX=74C3H,BX=95C3H,则程序最后将转到哪个标号处执行?试说明理由。 ∵ 74C3H ? 95C3H
说
(2) ZF=1,
DF00H
且有:CF=1, ZF=0, SF=1, OF=1 程序将转到L5标号处执行。
17、源程序如下:
MOV DX, 143H MOV AL, 77H OUT DX, AL MOV AX, 0 DEC DX DEC DX OUT DX, AL MOV AL, AH OUT DX, AL
设8253的端口地址为140H~143H,问: (1)程序是对8253的哪个通道进行初始化? (2)该通道的计数常数为多少?
(3)若该通道时钟脉冲CLK的周期为1μs,则输出脉冲OUT的周期为多少μs? 答:
(1) 程序对8253的通道1进行初始化。 (2)计数常数为10000D,BCD计数。 (3)工作在方式3,方波速率发生器 周期=10000?1μs=10000μS=10ms
六、编程题
1、将AL中的数,高4位保持不变,低4位置零。 参考程序: CODE SEGMENT
ASSUME CS:CODE,DS:CODE GO: MOV AX,DATA
MOV DS,AX AND AL,0F0H
EXIT: CODE ENDS END GO
2.从1000H单元开始,连续存放100个字符串,要查出第一个$符号, 编程序将第一个$字符地址送BX中。 参考程序: DATA SEGMENT ORG 1000H
DAT DB DATA ENDS CODE SEGMENT
ASSUME START:
CS:CODE,DS:DATA,ES:DATA
AX,DATA DS,AX ES,AX BX,1000H CX,100 AX,AX AL,'$'
MOV MOV MOV CLD MOV MOV XOR MOV
FOUND PROC NEAR
'1234$567$8'
CALL FOUND
PUSH AX CLD REPNE XOR AND JZ
DEC MOV
OVER: RET
POP AX
FOUND ENDP
CODE
ENDS END START
3、假设某班80个学生某门课的成绩存放在数据区BUF开始的字节单元中,请编程统计小于60分的人数,60— 80分的人数,大于80分的人数,并将统计结果分别存于S1、S2、 S3字节单元中。 要求写出注释。 参考程序:
MOV BX,OFFSET BUF MOV CX,80 MOV S1,0 MOV S2,0 MOV S3,0
COMPARE:MOV AL,[BX]
CMP AL,60 JB DON1 CMP AL,80
JBE DON2 ;低于等于80,高于60转 INC S3 ;高于80,S3+1 JMP LP
DON1:INC S1
JMP LP
DON2:INC S2 LP: INC BX
LOOP COMPARE HLT
4、从2000H单元开始的区域,存放100个字节的字符串,其中有几个#符号(#的ASCII码为23H),将第一个#符号替换成0,并
将地址送DX,试写出程序段。 参考程序:
MOV DI,2000H CLD
MOV AL,23H MOV CX,100
REPNZ SCASB ;AL -‘#’ JNZ STOP DEC DI MOV DX,DI
STOP:HLT
5、从地址2100H单元开始,连续存放8个字节的无符号数,现在用BX作地址指针,编程序求和,并将结果存在210AH单元中。 ORG 2100H DATA SEGMENT
DAT1 DB 1,2,3,4,5,6,7,8 DB 1,2,3,4,5,6,7,8 DB 0,0,0,0,0,0,0,0 SUM DB ?
;没找到,退出 ;替换为0 ;找到,退回到原地址
;低于60转 SCASB AX,AX CX,0FFH OVER BX AL,[DI]
MOV [DI],00H