惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

AI
AI
Cloudbric
Cloudbric
Schneier on Security
Schneier on Security
V2EX - 技术
V2EX - 技术
N
News and Events Feed by Topic
Hacker News: Ask HN
Hacker News: Ask HN
L
LINUX DO - 最新话题
V
Visual Studio Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
W
WeLiveSecurity
博客园 - 司徒正美
Jina AI
Jina AI
S
Secure Thoughts
罗磊的独立博客
Hugging Face - Blog
Hugging Face - Blog
有赞技术团队
有赞技术团队
WordPress大学
WordPress大学
Security Archives - TechRepublic
Security Archives - TechRepublic
博客园 - 三生石上(FineUI控件)
The Last Watchdog
The Last Watchdog
S
Security @ Cisco Blogs
S
SegmentFault 最新的问题
Attack and Defense Labs
Attack and Defense Labs
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
SecWiki News
SecWiki News
Google DeepMind News
Google DeepMind News
T
Troy Hunt's Blog
H
Heimdal Security Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
N
News and Events Feed by Topic
雷峰网
雷峰网
Last Week in AI
Last Week in AI
IT之家
IT之家
Project Zero
Project Zero
O
OpenAI News
腾讯CDC
The Hacker News
The Hacker News
L
Lohrmann on Cybersecurity
T
Tenable Blog
博客园_首页
C
Cisco Blogs
酷 壳 – CoolShell
酷 壳 – CoolShell
S
Schneier on Security
Scott Helme
Scott Helme
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
人人都是产品经理
人人都是产品经理
P
Privacy International News Feed
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻

Yesterday17's Blog

2026 新年解密红包 / Melody Flag | Yesterday17's Blog 谈谈 Iori 的设计思路(二):如何实现一个 Showroom 录制工具? | Yesterday17's Blog 谈谈 Iori 的设计思路(一):从 Nico Timeshift 说起 | Yesterday17's Blog Iori Minyami 0.1.0 发布 | Yesterday17's Blog 2025 新年解密红包 / Melody Flag | Yesterday17's Blog 使用 Cloudflare Warp 解决罗森票务的海外登录问题 | Yesterday17's Blog How To Blog 04: The Astro v5 Era | Yesterday17's Blog 谈谈 tokio::select! 的公平性 | Yesterday17's Blog Learning Pingora 05 - Connect with TLS | Yesterday17's Blog Leaving Bytedance | Yesterday17's Blog 大橋彩香 AsiaTour「Reflection」上海公演 个人向记录 & Repo | Yesterday17's Blog Recoving from burnout - What happened? | Yesterday17 Yubikey 重建手册 | Yesterday17's Blog How To Blog 03: Heimus | Yesterday17's Blog 🪧 Blog Migration Accouncement | Yesterday17's Blog Learn Your IDE - VSCode 是如何仅重启插件的? | Yesterday17's Blog How To Blog 02: Astro❤️Password | Yesterday17's Blog How To Blog 01: Why, How, and the Future | Yesterday17's Blog Learning Pingora 04 - Establish L4 Connection | Yesterday17's Blog Learning Pingora 03 - Upstreams and Peers | Yesterday17's Blog Learning Pingora 02 - A Simple HTTP Server | Yesterday17's Blog Learning Pingora 01 - Getting Started | Yesterday17's Blog 2024 新年解密红包 / Melody Flag | Yesterday17's Blog 向新的一年飞驰——记录 2023 | Yesterday17's Blog 「サクラノ刻」对话选摘(2) | Yesterday17's Blog PGP Key Revocation 注销声明 | Yesterday17's Blog 「サクラノ刻」对话选摘(1) | Yesterday17's Blog 2023 新年解密红包 / Melody Flag | Yesterday17's Blog 『蒼の彼方のフォーリズム』通关感想 | Yesterday17's Blog 单显卡直通教程 | Yesterday17's Blog 对博客与笔记的思考 | Yesterday17's Blog Project Anni 之旅(3)自动化 Flutter 应用 CI/CD 上架流程 | Yesterday17's Blog AsobiStage 直接播放链接 | Yesterday17 如何在后分P时代进行投稿——sswa使用详解 | Yesterday17's Blog JSON RPC 与 LSP 协议基础 | Yesterday17's Blog Grajapa Shueisha / BookEnd 加密方式调查 | Yesterday17's Blog 【2022篇+WriteUp】如何再收一个新年红包? | Yesterday17's Blog 如何将良心云的良心功能清理干净 | Yesterday17's Blog 【油猴脚本】bilibili 投稿页面返回旧版+旧版页面强制允许分P上传 | Yesterday17's Blog Cloudr1v1 授权方式分析 | Yesterday17 Typora 1.0.2 逆向实录 | Yesterday17's Blog Project Anni 之旅(2)ValueAfterTable——toml-rs的实现与限制 | Yesterday17's Blog IPv4透明代理+IPv6 Passthrough——树莓派单臂软路由折腾记 | Yesterday17's Blog Chaos; Child 汉化补丁 神秘编码探索 | Yesterday17's Blog 镣铐与舞蹈——个性与共性之迷思 | Yesterday17's Blog Go 学习笔记 02 - 找准 io 之道 | Yesterday17's Blog NAT Slipstreaming v1 原理浅析 | Yesterday17's Blog 绕过「9-nine-」的 CDKEY 验证——KrkrPlugin 正(?)向实录 | Yesterday17's Blog 静流的青春纪念册——「サクラノ刻 -櫻の森の下を歩む-」体验版感言 | Yesterday17's Blog Project Anni 之旅 01 - 从 clap-builder 到 derive | Yesterday17's Blog [Google CTF 2021] CPP WriteUp | Yesterday17's Blog 获取 アソビステージ 的实际播放链接 | Yesterday17's Blog 90 行 Rust 代码实现 AsyncTeeReader | Yesterday17's Blog 或许还算有价值一读的文章列表 | Yesterday17's Blog 从零开始的 Seedbox 之旅 | Yesterday17's Blog [随笔]技术型博客行文迷思(1) | Yesterday17's Blog 浅谈 git fetch 的工作方式 | Yesterday17's Blog 『ソーサレス*アライヴ! ~the World's End Fallen Star~』通关感想" | Yesterday17's Blog Rust std::fmt 格式语法简述 | Yesterday17's Blog 日亚修改居住国的解决方案 | Yesterday17's Blog [Windows/Linux] GC553 的 Switch 完美采集之路 | Yesterday17's Blog 【翻译】Subtyping and Variance / 子类型与变型 | Yesterday17's Blog Berd's Red Envelope 2021 WriteUp | Yesterday17's Blog 【中英对照】ALSA 音频 API 使用教程/A Tutorial on Using the ALSA Audio API | Yesterday17's Blog 从 cue_scanner.l 看 CUE Sheet 的词法单元 | Yesterday17's Blog Postman 历史记录导出的解决方案 | Yesterday17's Blog 《恋爱绮谭 不存在的夏天》通关感想 | Yesterday17's Blog [微机实验/TD-PITE] 微机接口综合实验 | Yesterday17's Blog [微机实验/TD-PITE] 键盘扫描及数码管显示实验 | Yesterday17's Blog [微机实验/TD-PITE] 数码管显示实验 | Yesterday17's Blog Airsonic Advanced+Google Drive+Caddy 部署纪实 | Yesterday17's Blog X-NUCA 2020 - hellowasm 题解 | Yesterday17's Blog Node.js child_process.fork 与 env 污染 RCE | Yesterday17's Blog EP.01 「夜の向日葵」 | Yesterday17's Blog [微机实验/TD-PITE] 8254 定时/计数器实验+选做实验 | Yesterday17's Blog [JLU CTF/2020] babywasm WriteUp | Yesterday17's Blog PHP 反序列化与经典利用 | Yesterday17's Blog WebAssembly 逆向简述 | Yesterday17's Blog 『彼女、お借りします』一期完结点评 | Yesterday17's Blog [微机实验/TD-PITE] D/A 转换实验+选做实验 | Yesterday17's Blog [微机实验/TD-PITE] A/D 转换实验+选做实验 | Yesterday17's Blog 开源项目申请 JetBrains Open Source License 简单流程 | Yesterday17's Blog 微软拼音与 JetBrains 搜索快捷键冲突的解决方案 | Yesterday17's Blog [微机实验/TD-PITE] 8259 中断优先级实验+选做实验 | Yesterday17's Blog IFTTT 测试(续) | Yesterday17 IFTTT 测试 | Yesterday17's Blog [微机实验/TD-PITE] 存储器扩展实验+选做实验 | Yesterday17's Blog 新版 GCC 针对 -fdump-translation-unit 的替代方案 | Yesterday17's Blog 一次 HSTS 策略配置的排错之旅 | Yesterday17's Blog YukiNative 踩坑记——Windows 的消息队列 | Yesterday17's Blog 我是我自己——论获取 HTTPS 证书时的验证步骤 | Yesterday17's Blog 【设计文档】对 PUG 的大规模设计修订(1.1) | Yesterday17's Blog GS65 折腾记(2)加装固态,分区,Grub2 引导 Manjaro LiveCD | Yesterday17's Blog 「さくら、もゆ。」的空白字体列表——一次逆向问题定位过程实录 | Yesterday17's Blog GSuite 探索篇(1)使用 Service Account 向 Google Drive 传输文件 | Yesterday17's Blog 『サクラノ詩 -櫻の森の上を舞う-』通关感想 | Yesterday17's Blog 《ATRI -My Dear Moments-》通关感想 | Yesterday17's Blog [工具][VSCode 扩展] AegiKit——方便 Aegisub 使用的工具箱 | Yesterday17's Blog 贝塞尔曲线、字体矢量化与曲线运算 | Yesterday17's Blog NAT 类型初探 | Yesterday17's Blog
[微机实验/TD-PITE] 8251 串行接口实验 | Yesterday17's Blog
Yesterday17 · 2020-10-19 · via Yesterday17's Blog

ToC

  • 实验内容
  • 实验接线
  • 代码
  • 实验过程
    • 设置内存
    • 4000H
    • 3000H
  • 选做实验
    • 说明
    • 接线
    • 代码
    • 结果
      • 3000H
      • 4000H
    • 演示:数据灯

实验内容

通过 E 命令修改内存 3000H 的内容,发送到串口,然后自接受保存到 4000H 起始的内存单元中。

最后通过系统命令查看相应存储空间的数据,验证传输结果。

实验接线

通过 8254 控制波特率,将 TXDRXD 相连以自收发。

代码

DATA8251 EQU 0600H

CON8251 EQU 0602H

C028254 EQU 06C4H

CON8254 EQU 06C6H

SSTACK SEGMENT STACK

DW 64 DUP(?)

SSTACK ENDS

CODE SEGMENT

ASSUME CS:CODE

START PROC

;; INIT 8254

MOV DX, CON8254

MOV AL, 10110110B ;; MODE 3, SQUARE

OUT DX, AL

;; CLK2 CONNECTED TO 1.8432MHz

;; OUT2 CONNECTED TO 8251-TRCLK

;; 1.8432E6/0X000C/16 = 9600BPS

MOV DX, C028254

MOV AL, 0CH

OUT DX, AL

MOV AL, 00H

OUT DX, AL

;; INIT 8251

CALL INIT

MOV DX, CON8251

MOV AL, 01111110B ;; ASYNC METHOD CONTROL WORD

;; 01: ONE BYTE ESD/S1

;; 11: EVEN JUDGE

;; 11: 8 BYTES

;; 10: 16

OUT DX, AL

CALL DELAY

MOV AL, 00110100B ;; ASYNC COMMAND WORD

;; 0: DISALLOW SEARCH

;; 0: NO RESET

;; 1: REQUEST SEND

;; 1: RESET ERROR FLAG

;; 0: NORMAL WORK

;; 1: ALLOW RECEIVE

;; 0: DATA CONSOLE NOT PREPARED

;; 0: DISALLOW SEND

OUT DX, AL

CALL DELAY

MOV DI, 4000H

MOV SI, 3000H

MOV CX, 10

LO:

MOV AL, 00110111B ;; ASYNC COMMAND WORD

;; DIFFERENCE: ALLOW SEND

MOV DX, CON8251

OUT DX, AL ;; PREPARE 8251

MOV DX, DATA8251

MOV AL, [SI]

OUT DX, AL ;; SEND [SI] BYTE

MOV DX, CON8251

LO_SEND:

IN AL, DX ;; WAIT FOR SEND BUFFER TO BE EMPTY

AND AL, 1

JZ LO_SEND

LO_RECV:

IN AL, DX ;; WAIT FOR RECV BUFFER TO HAVE DATA

AND AL, 02H

JZ LO_RECV

MOV DX, DATA8251

IN AL, DX ;; RECEIVE FROM 8251

MOV [DI], AL ;; SAVE TO [DI]

INC DI

INC SI

LOOP LO

FIN:

JMP FIN

MOV AX, 4C00H

INT 21H

START ENDP

INIT PROC

PUSH AX

PUSH DX

MOV AL, 00H

MOV DX, CON8251

OUT DX, AL

CALL DELAY

OUT DX, AL

CALL DELAY

OUT DX, AL

CALL DELAY

MOV AL, 40H

OUT DX, AL

CALL DELAY

POP DX

POP AX

RET

INIT ENDP

DELAY PROC

PUSH CX

MOV CX, 0FFFFH

LOOP $

POP CX

RET

DELAY ENDP

CODE ENDS

END START

实验过程

设置内存

4000H

3000H

选做实验

说明

a-zASCII 码写入 3000H,然后通过 9600 的波特率传输到 4000H

当出现错误时停止传输,并将状态字显示在数据灯 D7-D0 上。

接线

接线有点混沌,反正能用就行(

由于数据线低位不够用了,所以我把 8255 接到了数据线高位(D8-D15),对应的 OUT 也就需要输出 AX 而非 AL 了。

总之就是下面这个样子:

代码

DATA8251 EQU 0600H

CON8251 EQU 0602H

C028254 EQU 06C4H

CON8254 EQU 06C6H

B8255 EQU 0642H

CON8255 EQU 0646H

SSTACK SEGMENT STACK

DW 64 DUP(?)

SSTACK ENDS

CODE SEGMENT

ASSUME CS:CODE

START PROC

;; INIT 8254

MOV DX, CON8254

MOV AL, 10110110B

OUT DX, AL

MOV DX, C028254

MOV AL, 0CH

OUT DX, AL

MOV AL, 00H

OUT DX, AL

;; INIT 8251

CALL INIT

MOV DX, CON8251

MOV AL, 01111110B

OUT DX, AL

CALL DELAY

MOV AL, 00110100B

OUT DX, AL

CALL DELAY

;; INIT 8255

MOV AL, 10010000B

MOV DX, CON8255

OUT DX, AL

;; INIT [3000]

MOV SI, 3000H

MOV AL, 61H ;; a

MOV CX, 26

INIT_CHAR:

MOV [SI], AL ;; SAVE TO [SI]

INC AL

INC SI

LOOP INIT_CHAR

MOV SI, 3000H

MOV DI, 4000H

MOV CX, 26

LO:

MOV AL, 00110111B ;; ASYNC COMMAND WORD

;; DIFFERENCE: ALLOW SEND

MOV DX, CON8251

OUT DX, AL ;; PREPARE 8251

MOV DX, DATA8251

MOV AL, [SI]

OUT DX, AL ;; SEND [SI] BYTE

MOV DX, CON8251

LO_SEND:

IN AL, DX ;; WAIT FOR SEND BUFFER TO BE EMPTY

AND AL, 1

JZ LO_SEND

LO_RECV:

IN AL, DX ;; WAIT FOR RECV BUFFER TO HAVE DATA

TEST AL, 02H

JZ LO_RECV

TEST AL, 00111000B

JNZ ERR_FIN

MOV DX, DATA8251

IN AL, DX ;; RECEIVE FROM 8251

MOV [DI], AL ;; SAVE TO [DI]

INC DI

INC SI

LOOP LO

FIN:

JMP FIN

ERR_FIN:

;; OUTPUT TO 8255

MOV DX, B8255

MOV AH, AL

OUT DX, AX

MOV AX, 4C00H

INT 21H

START ENDP

INIT PROC

PUSH AX

PUSH DX

MOV AL, 00H

MOV DX, CON8251

OUT DX, AL

CALL DELAY

OUT DX, AL

CALL DELAY

OUT DX, AL

CALL DELAY

MOV AL, 40H

OUT DX, AL

CALL DELAY

POP DX

POP AX

RET

INIT ENDP

DELAY PROC

PUSH CX

MOV CX, 0FFFFH

LOOP $

POP CX

RET

DELAY ENDP

CODE ENDS

END START

结果

3000H

4000H

演示:数据灯

由于传输过程中没有出现问题,因此没法检测 8255 的部分是否正确。因此这里强行测试了一下(

修改上述代码的 79 行,把 JNZ 修改为 JZ。这样就能输出正确情况下的状态字了。实际的 LED 输出如下图所示:

通过 LED 我们可以读出当前的状态字:10000111