CODE ENDS
A口输入,B 口输出: assume cs:code code segment public org 100h
start: mov dx,04a6h ;8255 控制端口地址 mov ax, 90h
out dx, ax ;设置 A口输入,B口输出 为什么8255A要提供三种工作方式 ?
END START
startl: mov dx, 04a0h ;A口地址 in ax, dx ;读开关量 mov dx, 04a2h ;B 口地址 out dx, ax ;写发光二极管状态 jmp startl code ends end start
为了满足并行输入输出的不同需要,实现可靠的数据传输。若不需要考虑外部设备的状态,则可以选择方式0,若需要考虑外部设备的状态就需要用选通输入 输出,方式1,若需要双向传送则需要用方式2。
定义数据区 BUFFER1(5 个字节数),BUFFER2(5 个字节数),BUFFER3(保留5 个字节),实现 BUFFER1 区的第1个数与 BUFFER2 区的第5 个数相加,BUFFER1 区的第 2 个数与BUFFER2 区的第 4 个数相加......直到实现 BUFFER1 区的第 5 个数与 BUFFER2 区的第 1 个数相加, 且结果依次存储在 BUFFER3 区。 Data segment
Buffer1 db x0, x1, x2!-x4 Buffer2 db y0, y1, y2!-4 Buffer3 db 100 dup (?) Data ends Code segment
Assume cs: code, ds: data, es: data Main proc far Begin: push ds
mov ax,0000h push ax mov ax, data
mov ds, ax ;初始化数据段 mov es, ax ;初始化附加段 lea si, buffer1 lea bx, buffer2
LED显示开关状态 assume cs:code code segment public org 100h
start:mov dx,04a0h ; 74LS244地址
8255A的典型应用编程 CODE SEGMENT ASSUME CS:CODE, DS:DATA MAIN PROC FAR START: PUSH DS PUSH AX
MOV AL,90H ;方式控制字 MOV DX,22BH OUT DX,AL add bx, 4 lea di, buffer3 mov cx,5
m: mov al, [si] add al, [bx] mov [di], al
in al,dx ;读输入开关量 mov dx,04b0 ;74LS273 地址
out dx,al 输出至LED jmp
start code ends
end start
MOVAX,0
inc si dec bx inc di dec cx jnz m mov ah,4ch
int 21h ;返回 DOS ret
Main endp Code ends end begin
LED流水显示 assume cs: code
code segment public org 100h
start: mov al, 01h;读输入开关 s1: mov dx,04b0h ;74LS273地址out dx, al ;输出至LED Rol al,01h call delay Jmp s1 code ends end start
LP: MOV DX,228H IN AL,DX ;读入A口开关状态 MOV DX,229H
八个发光管滚动显示
code segment org 100h assume cs:code go:mov al,80h mov dx,203h out dx,al
OUT DX,AL ;B口输出 JMP LP RET MAIN ENDP CODE ENDS
END START
ASSUME CS:CODE CODE SEGMENT PUBLIC ORG 100H
START: MOV DX,04A6H ;8255控制端口地址
MOV AL,0B4H
OUT DX,AL ;设置A口输入,B口输出
MOV DX,04A4H AG1: IN AL,DX TEST AL,20H JZ AG1
MOV DX,04A0H ;A口地址 IN AL,DX ;读开关量 MOV BL,AL
MOV DX,04A4H ;C口地址 AG2: IN AL,DX TEST AL,02H JZ AG2 MOV DX,04A2H MOV AL,BL OUT DX,AL CODE ENDS
END START
mov al,01h m: mov dx,201h out dx,al rol al,1 call delay jmp m
delay: mov si,6fffh dec si jnz delay
编程实现从键盘输入20个以内字符,并换行显示
DATA SEGMENT BUFFER DB 20 BUFFER1 DB ?
BUFFER2 DB 20 DUP(?),\ DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA MAIN PROC FAR
START: PUSH DS MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX LEA DX,BUFFER
8086/8088的两种工作方式也称为最小组态和最大组态两种工作组态。最小组态: 系统中只有一片8088,其存储容量不大,所要连的I/O端口也不多,总线控制逻辑电路被减到最小。最大组态:构成的系统较大,可能包含不只一片微处理器,或要求有较强的驱动能力,带有一个总线控制器8288。 DOS软件中断调用过程
(1)将功能调用号传送到AH中;
(2)把调用参数(入口参数)送到规定寄存器或存储器区域中; (3)发中断命令INT 21H;
(4)在返回参数(出口参数)寄存器或存储器区查询执行结果;
在CRT显示器上显示“Hello World!”: DATA SEGMENT
ret code ends end go
MOV AH,0AH
INT 21H MOV AH,02H MOV DL,0DH INT 21H
MOV AH,02H MOV DL,0AH INT 21H
LEA DX,BUFFER2 MOV AH,09H INT 21H RET
MAIN ENDP CODE ENDS END START
从键盘输入一个字符回显并保存:
DATA SEGMENT
BUFFER DB 10 DUP(?) DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA MAIN PROC FAR START: PUSH DS MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX LEA BX,BUFFER MOV AH,01H INT 21H
MOV [BX],AL RET MAIN ENDP CODE ENDS
END START BUFFER DB \ DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA MAIN PROC FAR START: PUSH DS MOV AX,0 PUSH AX
DATA SEGMENT FI DB '34567' SE DB '76543' TH DB 6 DUP(?) DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA MAIN:MOV AX,DATA MOV DS,AX MOV ES,AX LEA SI,FI LEA DI,TH MOV CL,5 CLD CLC PUSHF CICLE:LODSB SUB AL,30H
MOV BL,[SI+4] SUB BL,30H POPF ADC AL,BL AAA PUSHF ADD AL,30H STOSB DEC CL JNZ CICLE MOV AL,0 POPF ADC AL,0 AAA ADD AL,30H STOSB
MOV AX,DATA MOV DS,AX MOV AH,09H LEA DX,BUFFER
INT 21H ; RET MAIN ENDP CODE ENDS
END START CODE ENDS END MAIN
从键盘输入10个字母,并改变大小写换行显示 DATA SEGMENT
CRLF DB 0DH,0AH,'$' MAXLEN DB 11,0,11 DUP(?) CSH1 DB 'please make sure','$' BUFFER DB 'please put','$' jIEG DB 10 DUP(?),'$' DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA DX,BUFFER MOV AH,9 INT 21H MMM: LEA DX,MAXLEN MOV AH,0AH
INT 21H LEA DX,CRLF MOV AH,9 INT 21H LEA BX,JIEG LEA SI,MAXLEN+2 MOV CX,10 MOV DL,[SI] NAA: CMP DL,'z' JG CSH CMP DL,'a' JB DAX SUB DL,20H JMP PP DAX: CMP DL,'Z' JG CSH CMP DL,'A' JB CSH ADD DL,20H PP: MOV [BX],DL INC BX INC SI MOV DL,[SI] LOOP NAA LEA DX,JIEG MOV AH,9 INT 21H LEA DX,CRLF MOV AH,9 INT 21H JMP JSH CSH: LEA DX,CSH1 MOV AH,9 INT 21H LEA DX,CRLF MOV AH,9 INT 21H JMP MMM
JSH: MOV AH,4CH INT 21H CODE ENDS
END START