📄 3_flashm.lst
字号:
Microsoft (R) Macro Assembler Version 5.00 1/22/4 Page 1-1
;//********************************************
*********
;文件名: FlashM for 8088
;功能: 闪存读写实验
;接线: 用导线连接闪存模块的CS_FLASH到地。
; 扩展输出模块的CS_273到CPU模块的200H;
; 扩展输出模块的JD1C到八位逻辑电平显示模块
的JD4B。
;//********************************************
*********
= 0000 ADDR1 EQU 0000H
= 0010 ADDR2 EQU 0010H
= 0200 D273 EQU 200H
0000 data segment
0000 data ends
0000 stack segment
0000 0032[ sta dw 50 dup(?)
????
]
= 0032 top equ length sta
0064 stack ends
0000 CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA
0000 START:
0000 0E PUSH CS
0001 1F POP DS
0002 90 NOP
0003 90 NOP
0004 E8 003B R CALL CHIP_ERASE ; 芯片擦除
0007 E8 00B7 R CALL DELAY
000A 90 NOP ; 运行到这一行,
观察附加段数据
000B BB 0000 MOV BX,ADDR1
000E B4 55 MOV AH,55H ; 向设定的位
置写入55H
0010 E8 008F R CALL BYTE_WRITE
0013 90 NOP ; 运行到这一行,
观察附加段ADDR1数据
0014 BB 0000 MOV BX,ADDR1
0017 26: 8A 17 MOV DL,ES:[BX] ; 读数据1
001A 90 NOP ; 运行到这一行,
Microsoft (R) Macro Assembler Version 5.00 1/22/4 Page 1-2
观察DL数据
001B 8A C2 MOV AL,DL
001D BA 0200 MOV DX,D273 ; 并行输出口地址
0020 EE OUT DX,AL ; 输出数据1
0021 90 NOP ; 运行到这一行,
LED显示数据1
0022 BB 0010 MOV BX,ADDR2
0025 B4 AA MOV AH,0AAH ; 向设定的位
置写入0AAH
0027 E8 008F R CALL BYTE_WRITE
002A 90 NOP ; 运行到这一行,
观察附加段ADDR2数据
002B BB 0010 MOV BX,ADDR2
002E 26: 8A 17 MOV DL,ES:[BX] ; 读数据2
0031 90 NOP ; 运行到这一行,
观察DL数据
0032 8A C2 MOV AL,DL
0034 BA 0200 MOV DX,D273 ; 并行输出口地址
0037 EE OUT DX,AL ; 输出数据2
0038 90 NOP ; 运行到这一行,
LED显示数据2
0039 EB FE JMP $
;**********************************************
************************************
; 芯片擦除
003B CHIP_ERASE proc near
003B 53 push bx
003C 52 push dx
003D CE_START:
003D B8 5000 MOV AX,5000H
0040 8E C0 MOV ES,AX
0042 BB 5555 MOV BX,5555H
0045 B2 AA MOV DL,0AAH
0047 26: 88 17 MOV ES:[BX],DL ;5555H/AAH
004A BB 2AAA MOV BX,2AAAH
004D B2 55 MOV DL,55H
004F 26: 88 17 MOV ES:[BX],DL ;2AAAH/55H
0052 BB 5555 MOV BX,5555H
0055 B2 80 MOV DL,80H
0057 26: 88 17 MOV ES:[BX],DL ;5555H/80H
Microsoft (R) Macro Assembler Version 5.00 1/22/4 Page 1-3
005A BB 5555 MOV BX,5555H
005D B2 AA MOV DL,0AAH
005F 26: 88 17 MOV ES:[BX],DL ;555H/AAH
0062 BB 2AAA MOV BX,2AAAH
0065 B2 55 MOV DL,55H
0067 26: 88 17 MOV ES:[BX],DL ;2AAAH/55H
006A BB 5555 MOV BX,5555H
006D B2 10 MOV DL,10H
006F 26: 88 17 MOV ES:[BX],DL ;5555H/10H
0072 CE_WAIT:
0072 26: 8A 07 MOV AL,ES:[BX]
0075 A8 80 TEST AL,80H
0077 75 12 JNZ CE_OK
0079 A8 20 TEST AL,20H
007B 74 F5 JZ CE_WAIT ;等待擦除
完成
007D 26: 8A 07 MOV AL,ES:[BX]
0080 A8 80 TEST AL,80H
0082 75 07 JNZ CE_OK
0084 B2 F0 MOV DL,0F0H ;擦除
不成功,复位
0086 26: 88 17 MOV ES:[BX],DL
0089 EB B2 JMP CE_START ;重试
008B CE_OK:
008B 90 NOP
008C 5A POP DX
008D 5B POP BX
008E C3 RET
008F CHIP_ERASE ENDP
;**********************************************
************************************
008F BYTE_WRITE PROC NEAR;处理字节写入前的命令序
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -