盐城工学院微机复习答案

1. 在内存数据段中,从DATA开始的单元中存放6个如下

带符号数:10H, 84H,0ABH,39H,00H,96H.编写一个完整的汇编语言程序,统计其中的正数、负数和零的个数,分别放置在从MEM开始的三个单元中。 1、

DSEG SEGMENT

DATA DB 10H, 84H,0ABH,39H,00H,96H. MEM DB 3 DUP (0) DSEG ENDS CSEG SEGMENT

ASSUME CS:CSEG, DS:DSEG START:

MOV AX,DSEG MOV DS,AX XOR AX,AX XOR BX,BX XOR DX,DX LEA SI,DATA LEA DI,MEM MOV CX,6 NEXT:

MOV AL,[SI] INC SI CMP AL,0

JZ ZERO

JS FUSHU INC DH JMP END ZERO:

INC AH

JMP END FUSHU:

INC BH JMP END

END: LOOP NEXT

MOV [DI],BH MOV [DI+1],AH

MOV [DI+1],DH

CSEG ENDS END START

2、编制汇编语言源程序,求两个四字节无符号数 14B084A0H和23CA9460H 之和,设两个数据分别存放在 BUF1和BUF2开始的存储区中,和要求存放在 BUF3 开始的存储区中

DSEG SEGMENT

BUF1 DB 0A0H, 84H, 14H, 0B0H BUF2 DB 60H, 94H, 0ACH, 23H BUF3 DB 4 DUP(?) DSEG ENDS CSEG SEGMENT

ASSUME CS:CSEG,DS:DSEG START: MOV AX,DSEG MOV DS,AX

MOV CX,4 ;置循环次数 LEA SI,BUF1

CLC ;清进位标志CF LL: MOV AL,[SI] MOV BL,[SI+4] ADC AL,BL ;带进位加 MOV [SI+8],AL

INC SI ;(SI)+1 DEC CX ;(CX)-1

JNZ LL ;若(CX) 0,则转LL CSEG ENDS

END START HLT

8253的端口地址为40H~43H,CLK1=CLK2=1MHz,按下列要求编程:(24分)

1、若使OUT1输出500HZ的方波,OUT2的输出50Hz的方波,分别确定8253计数器CNT1、CNT2的初值及方式控制字;(4分)

2、编写初始化程序及应用程序。(6分)

N1 = 1000000/500 = 2000

N2= 1000000/50 = 20000 控制字1: 36H 控制字2: 74H CNT1初始化程序段:

MOV AL,36H OUT 43H,AL MOV AX,2000 OUT 40H,AL MOV AL,AH OUT 40H,AL CNT2初始化程序段: MOV AL,74H OUT 43H,AL MOV AX,20000 OUT 41H,AL MOV AL,AH OUT 41H,AL

4、电路如图,8255A的地址范围为 0340—0343H。编写程序实现下列功能:

K0、K1、K2全部闭合时,红灯亮;K0、K1、K2全部打开时,绿灯亮;其他情况黄灯亮。

MOV DX,0343H

MOV AL, 90H OUT DX,AL WAIT:

MOV DX, 0340H IN AL,DX CMP AL,00H

JZ RED CMP AL,07H JZ GREEN MOV DX, 0341H MOV AL, 01H OUT DX, AL JMP WAIT RED: MOV DX,0341H MOV AL,04H OUT DX,AL JMP WAIT GREEN: MOV DX,0341H MOV AL,02H OUT DX,AL

JMP WAIT

5、编制一程序,求两个数组对应的数据之差,并把结果存入新数组ARRAY之中。计算一直进行到两数之差为零或数组结束。将新数组的长度存于LEN单元中。设两数组如下:

ARRAY1 DB 71,21, 40,44,34,32,28,171 ARRAY2 DB 12,15,70,40,10,87,524,713

DSEG SEGMENT

ARRAY1 DB 71,21,40,44,34,32,28,171 ARRAY2 DB 12,15,70,40,10,87,224,213 CUNT EQU 8 LEN DB ?

SUM DB 20H DUP(0) DSEG ENDS

SSEG SEGMENT PARA STACK DW 20H DUP(?) SSEG ENDS

CSEG SEGMENT

ASSUME DS: DSEG, SS: SSEG, CS:CSEG START:

MOV AX,DSEG MOV DS,AX MOV CX,0

MOV CX,CUNT MOV BX,-1

NOZERO: INC BX

MOV AL,ARRAY1[BX] SUB AL,ARRAY2[BX] MOV SUM[BX],AL LOOPNE NOZERO JE ENDO INC BL

ENDO: MOV LEN,BL CSEG ENDS END START

6自BUFFER开始的缓冲区有6个字节型的无符号数:10,0,20,15,38,236,试编制8086汇编语言程序,要求找出它们的最大值,送到MAX内存单元

DSEG SEGMENT

DAT DB 10H,0H,20H,0D5H,38H,0FEH

MAX DB ?

DSEG ENDS

CSEG SEGMENT

ASSUME CS:CSEG,DS:DSEG START:

MOV AX,DSEG MOV DS,AX XOR AX,AX LEA SI,DAT MOV CX,6

MOV AL,[SI] NEXT:

INC SI

CMP AL,[SI] JC SWAP JMP SSS SWAP:

MOV AL,[SI] SSS: DEC CX JNZ NEXT

MOV MAX,AL

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4