>>EXER3.ASM ;A2.asm ;数据传送实验 DDATA SEGMENT CBCC6 EQU 00000H;计 CBFC6 EQU CBCC6+32;科 CD7A8 EQU CBFC6+32;专 CD2B5 EQU CD7A8+32;业 CD6DC EQU CD2B5+32;周 CD3C0 EQU CD6DC+32;永 CC7BF EQU CD3C0+32;强 HZDOT: ;计 CBCC6 DB 002H,004H,004H,004H,00CH,004H,004H,004H DB 000H,004H,0CFH,07FH,008H,004H,008H,004H DB 008H,004H,008H,004H,008H,004H,048H,004H DB 028H,004H,018H,004H,008H,004H,000H,004H ;科 CBFC6 DB 060H,010H,01EH,011H,010H,012H,010H,012H DB 07FH,010H,018H,011H,038H,012H,054H,012H DB 014H,070H,012H,01EH,0D1H,011H,010H,010H DB 010H,010H,010H,010H,010H,010H,010H,010H ;专 CD7A8 DB 080H,000H,080H,000H,0FCH,01FH,040H,000H DB 040H,000H,0FFH,07FH,020H,000H,010H,004H DB 0F0H,00FH,000H,004H,000H,002H,040H,001H DB 080H,000H,000H,001H,000H,002H,000H,000H ;业 CD2B5 DB 020H,002H,020H,002H,020H,002H,020H,022H DB 022H,062H,024H,032H,024H,012H,028H,00AH DB 038H,00AH,028H,006H,020H,002H,020H,002H DB 020H,022H,0FFH,07FH,000H,000H,000H,000H ;周 CD6DC DB 000H,000H,0F8H,03FH,008H,021H,0C8H,027H DB 008H,021H,008H,021H,0E8H,02FH,008H,020H DB 0C8H,027H,048H,024H,048H,024H,0C8H,027H DB 044H,024H,004H,020H,002H,028H,001H,010H ;永 CD3C0 DB 040H,000H,080H,001H,000H,001H,0F8H,000H DB 080H,010H,080H,018H,0BEH,005H,0A0H,002H DB 090H,004H,090H,004H,088H,008H,088H,010H DB 084H,060H,083H,000H,0A0H,000H,040H,000H ;强 CC7BF DB 000H,000H,09EH,01FH,090H,010H,090H,010H DB 09EH,01FH,002H,002H,0C2H,03FH,042H,022H DB 05EH,022H,050H,022H,0D0H,03FH,010H,002H DB 010H,012H,010H,022H,0D4H,07FH,018H,080H ADDR DW ? DDATA ENDS EXDA SEGMENT MSD DB 64 DUP(?) EXDA ENDS SSTACK SEGMENT STACK DW 256 DUP(?) SSTACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DDATA,ES:EXDA START: MOV AX,DDATA MOV DS,AX ;调用显示 L1: MOV ADDR, CBCC6 MOV CX, 112 L2: CALL DISPLY INC ADDR INC ADDR LOOP L2 JMP L1 MOV AX,4C00H INT 21H ;延时程序 ;================================================== DELAY PROC NEAR PUSH CX PUSH AX MOV CX, 0FH D1: MOV AX, 5000H D2: DEC AX JNZ D2 LOOP D1 POP AX POP CX RET DELAY ENDP ;==================================================== .386 ;;=================================================== DISPLY PROC NEAR PUSH CX ;行码 MOV CX, 128 HEAD: MOV BX, 0FFFEH MOV SI, ADDR;OFFSET CBFC6 PUSH CX MOV CX, 16 DY: MOV AX, [SI] SHL EAX, 16 MOV AX, BX INC SI INC SI ROL BX, 1 NOT EAX MOV DX, 9C40H OUT DX, EAX CALL DELAY LOOP DY POP CX LOOP HEAD POP CX RET DISPLY ENDP ;======================================================= CODE ENDS END START >>EXER4.ASM ;exe4.asm ;数据传送实验 IOY0 EQU 9C00H ;IOY0起始地址 DMA_0 EQU IOY0+00H*4 ;通道0当前地址寄存器 DMA_1 EQU IOY0+01H*4 ;通道0当前字节计数寄存器 DMA_2 EQU IOY0+02H*4 ;通道1当前地址寄存器 DMA_3 EQU IOY0+03H*4 ;通道1当前字节计数寄存器 DMA_4 EQU IOY0+04H*4 ; DMA_5 EQU IOY0+05H*4 ; DMA_6 EQU IOY0+06H*4 ; DMA_7 EQU IOY0+07H*4 ; DMA_8 EQU IOY0+08H*4 ;写命令寄存器/读状态寄存器 DMA_9 EQU IOY0+09H*4 ;请求寄存器 DMA_A EQU IOY0+0AH*4 ; DMA_B EQU IOY0+0BH*4 ;工作方式寄存器 DMA_C EQU IOY0+0CH*4 DMA_D EQU IOY0+0DH*4 ;写总清命令/读暂存寄存器 DMA_E EQU IOY0+0EH*4 DMA_F EQU IOY0+0FH*4 ;屏蔽位寄存器 DDATA SEGMENT DDATA ENDS STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS EXDA SEGMENT MSD DB 256 DUP(?) EXDA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DDATA,ES:EXDA START: MOV AX,DDATA MOV DS,AX ;主清除寄存器 ;MOV DX, DMA_D ;OUT DX, AL ;禁止8237工作 MOV AL, 4 MOV DX, DMA_8 OUT DX, AL ;设置0,1通道基地址 ;0 ADDR MOV DX, DMA_0 MOV AL, 00H OUT DX, AL MOV AL, 00H OUT DX, AL ;1 ADDR MOV DX, DMA_2 MOV AL, 08H OUT DX, AL MOV AL, 00H OUT DX, AL ;设置0,1基字计数器 ;0 MOV DX, DMA_1 MOV AL, 08H OUT DX, AL MOV AL, 00H OUT DX, AL ;1 MOV DX, DMA_3 MOV AL, 08H OUT DX, AL MOV AL, 00H OUT DX, AL ;设置0,1工作方式 ;0 read MOV AL, 88H MOV DX, DMA_B OUT DX, AL ;1 write MOV AL, 85H MOV DX, DMA_B OUT DX, AL ;清除通道0屏蔽 MOV AL, 0 MOV DX, DMA_A OUT DX, AL ;清除通道1屏蔽 MOV AL, 1 MOV DX, DMA_A OUT DX, AL ;允许8237工作 MOV AL, 41H MOV DX, DMA_8 OUT DX, AL ;0工作 MOV AL, 4 MOV DX, DMA_9 OUT DX, AL ;1工作 MOV AL, 5 MOV DX, DMA_9 OUT DX, AL WAITF: MOV DX, DMA_8 IN AL, DX AND AL, 03 CMP AL, 03 JNZ WAITF MOV AX,4C00H INT 21H CODE ENDS END START >>EXER5.ASM ;A2.asm IOY0 EQU 9C00H JADDR EQU IOY0+100B OADDR EQU IOY0+000B STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS DDATA SEGMENT MES DB 'Press any key to exit!',0AH,0DH,0AH,0DH,'$' D0 DB '0$' D1 DB '1$' DDATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DDATA START: MOV AX,DDATA MOV DS,AX MOV DX,OFFSET MES ;显示退出提示 MOV AH,09H INT 21H HEAD: ;================== ;ICW1 MOV DX, OADDR MOV AL, 13H OUT DX, AL ;ICW2 MOV DX, JADDR MOV AL, 80H OUT DX, AL ;ICW3 OUT DX, AL ;ICW4 MOV AL, 00H OUT DX, AL ;OCW1 MOV AL, 0FCH OUT DX, AL ;OCW2 MOV DX, OADDR MOV AL, 20H OUT DX, AL ;================== ;OCW3 MOV DX, OADDR MOV AL, 0EH OUT DX, AL ;读查询字 IN AL, DX MOV BL, AL ;判断是不是有中断 AND AL, 80H JZ EXIT ;判断是不是0或1中断 MOV AL, BL AND AL, 1 JNZ IR1 JMP IR0 IR0: LEA DX, D0 MOV AH, 09H INT 21H JMP EXIT IR1: LEA DX, D1 MOV AH, 09H INT 21H JMP EXIT EXIT: MOV AH, 1 INT 16H JZ HEAD ;================== MOV DX,OFFSET MES ;显示退出提示 MOV AH,09H INT 21H KEY: MOV AH,1 ;判断是否有按键按下? INT 16H JZ KEY MOV AX,4C00H INT 21H CODE ENDS END START >>EXER6.ASM ;exer6 IOY0 EQU 9C00H INTA EQU IOY0+0*4 INTB EQU IOY0+1*4 INTC EQU IOY0+2*4 CTL EQU IOY0+3*4 STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS DDATA SEGMENT MES DB 'Press any key to exit!',0AH,0DH,0AH,0DH,'$' DDATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DDATA START: MOV AX,DDATA MOV DS,AX MOV DX,OFFSET MES ;显示退出提示 MOV AH,09H INT 21H HEAD: ;写控制字 MOV AL, 80H MOV DX, CTL OUT DX, AL CALL ALLRED ;================================= ;点亮1.3路口绿灯 MOV AL, 03H MOV DX, INTA OUT DX, AL ;DELAY MOV BX, 16 CALL NDELAY ;黄灯闪烁8次 MOV DX, INTA MOV CX, 8 LP1: MOV AL, 18H OUT DX, AL ;DELAY CALL DELAY MOV AL, 00H OUT DX, AL CALL DELAY LOOP LP1 ;CALL ALLRED CALL ALLRED ;================================= ;点亮2.4路口绿灯 MOV AL, 03H MOV DX, INTB OUT DX, AL ;DELAY MOV BX, 16 CALL NDELAY ;黄灯闪烁8次 MOV DX, INTB MOV CX, 8 LP4: MOV AL, 18H OUT DX, AL ;DELAY CALL DELAY MOV AL, 00H OUT DX, AL CALL DELAY LOOP LP4 ;CALL ALLRED CALL ALLRED MOV AH,1 ;判断是否有按键按下? INT 16H JZ HEAD MOV AX,4C00H INT 21H ;======================================== DELAY PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX MOV CX, 0FFFFH LP2: PUSH CX MOV CX, 02FFH LP3: INC BX DEC BX LOOP LP3 POP CX LOOP LP2 POP DX POP CX POP BX POP AX RET DELAY ENDP ;========================================= ALLRED PROC NEAR PUSH AX PUSH DX ;================================= ;写入 MOV AL, 0C0H ;写入pa MOV DX, INTA OUT DX, AL ;写入pb MOV DX, INTB OUT DX, AL POP DX POP AX RET ALLRED ENDP ;======================================== NDELAY PROC NEAR PUSH CX MOV CX, BX LP5: CALL DELAY LOOP LP5 POP CX RET NDELAY ENDP CODE ENDS END START >>EXER7.ASM ;exer7_1 IOY1 EQU 9C40H CHN0 EQU IOY1+0*4 CHN1 EQU IOY1+1*4 CHN2 EQU IOY1+2*4 CTL EQU IOY1+3*4 DDATA SEGMENT MES DB 'Press any key to exit!',0AH,0DH,0AH,0DH,'$' DDATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DDATA START: MOV AX,DDATA MOV DS,AX MOV DX,OFFSET MES ;显示退出提示 MOV AH,09H INT 21H ;设置通道2,工作方式3 MOV AL, 0B6H MOV DX, CTL OUT DX, AL ;设置初值64H MOV DX, CHN2 MOV AL, 64H OUT DX, AL MOV AL, 00H OUT DX, AL ;设置通道0,工作方式3 MOV AL, 036H MOV DX, CTL OUT DX, AL ;设置初值4800H MOV DX, CHN0 MOV AL, 00H OUT DX, AL MOV AL, 48H OUT DX, AL KEY: MOV AH,1 ;判断是否有按键按下? INT 16H JZ KEY MOV AX,4C00H INT 21H CODE ENDS END START ;exer7_2 IOY0 EQU 9C00H IOY1 EQU 9C40H JADDR EQU IOY0+100B OADDR EQU IOY0+000B CHN0 EQU IOY1+0*4 CHN1 EQU IOY1+1*4 CHN2 EQU IOY1+2*4 CTL EQU IOY1+3*4 STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS DDATA SEGMENT MES DB 'Press any key to exit!',0AH,0DH,0AH,0DH,'$' D0 DB '7$' D1 DB '0$' DDATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DDATA START: MOV AX,DDATA MOV DS,AX MOV DX,OFFSET MES ;显示退出提示 MOV AH,09H INT 21H ;======================================== ;设置通道2,工作方式3 MOV AL, 0B6H MOV DX, CTL OUT DX, AL ;设置初值64H MOV DX, CHN2 MOV AL, 64H OUT DX, AL MOV AL, 00H OUT DX, AL ;设置通道0,工作方式3 MOV AL, 036H MOV DX, CTL OUT DX, AL ;设置初值4800H MOV DX, CHN0 MOV AL, 00H OUT DX, AL MOV AL, 48H OUT DX, AL ;============================================== ;================== ;ICW1 MOV DX, OADDR MOV AL, 13H OUT DX, AL ;ICW2 MOV DX, JADDR MOV AL, 80H OUT DX, AL ;ICW3 OUT DX, AL ;ICW4 MOV AL, 00H OUT DX, AL ;OCW1 MOV AL, 0FCH OUT DX, AL HEAD: ;OCW2 MOV DX, OADDR MOV AL, 20H OUT DX, AL ;================== ;OCW3 MOV DX, OADDR MOV AL, 0EH OUT DX, AL ;读查询字 IN AL, DX MOV BL, AL ;判断是不是有中断 AND AL, 80H JZ EXIT ;判断是不是0或1中断 MOV AL, BL AND AL, 1 JNZ IR1 JMP IR0 IR0: LEA DX, D0 MOV AH, 09H INT 21H JMP EXIT IR1: LEA DX, D1 MOV AH, 09H INT 21H JMP EXIT EXIT: MOV AH, 1 INT 16H JZ HEAD ;================== MOV DX,OFFSET MES ;显示退出提示 MOV AH,09H INT 21H KEY: MOV AH,1 ;判断是否有按键按下? INT 16H JZ KEY MOV AX,4C00H INT 21H CODE ENDS END START >>EXER8.ASM ;exer8 IOY0 EQU 9C00H IOY1 EQU 9C40H MY8255_A EQU IOY0+00H*4 ;8255的A口地址 MY8255_B EQU IOY0+01H*4 ;8255的B口地址 MY8255_C EQU IOY0+02H*4 ;8255的C口地址 MY8255_MODE EQU IOY0+03H*4 ;8255的控制寄存器 DDATA SEGMENT MES DB 'Press any key to exit!',0AH,0DH,0AH,0DH,'$' TAB: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH DB 6FH, 77H, 7CH, 39H, 5EH, 79H, 71H, 00H, 0E3H DAREA DB 1, 2, 3, 4, 5, 6 ;显示缓冲区 DDATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DDATA START: MOV AX,DDATA MOV DS,AX MOV DX,OFFSET MES ;显示退出提示 MOV AH,09H INT 21H ;设置8255工作方式 MOV AL, 89H ;控制方式89h MOV DX, MY8255_MODE OUT DX, AL CALL MY_DISPLAY KEY: MOV AH,1 ;判断是否有按键按下? INT 16H JZ KEY MOV AX,4C00H INT 21H ;============================================================= ;显示子程序 MY_DISPLAY PROC NEAR PUSH CX PUSH BX MOV CL, 0DFH ;GET DAREA TO AL LEA BX, DAREA J3: MOV SI, 0 J2: MOV AL, [BX+SI] J1: ;转换al为码 PUSH BX LEA BX, TAB XLAT POP BX ;要显示的内容 MOV DX, MY8255_B OUT DX, AL ;要显示的位置 MOV AL, CL MOV DX, MY8255_A OUT DX, AL ;右移显示下一位 ROR CL, 1 CMP CL, 7FH JE J4 JMP J5 J4: MOV CL, 0DFH ;CL重置 J5: INC SI CMP SI, 6 ;为六,则重为0 JE J3 CMP SI, 6 JNE J2 RET MY_DISPLAY ENDP ;============================================================= CODE ENDS END START
接口代码
最新推荐文章于 2022-04-26 10:44:14 发布