内容发布更新时间 : 2025/1/4 17:00:11星期一 下面是文章的全部内容请认真阅读。
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