Deepseek的代码生成能力,牛
3.加一句单板机需要的结束标志,即可编译现在运行,运行正确。
·
1.指令

2.生成的代码
; 8259中断控制LED亮灭反转程序
; 端口定义: 8259 - 400H(命令),402H(数据); LED - 800H
; 中断设置: IR0中断类型码为20H
ORG 100H ; COM文件起始地址
JMP INIT ; 跳转到初始化程序
; 数据段
LED_STATE DB 0FFH ; LED初始状态(全亮)
INT_MASK DB ? ; 保存原始中断屏蔽字
; 中断服务程序(IR0)
ISR PROC FAR
PUSH AX ; 保存寄存器
PUSH DX
; LED状态反转
MOV AL, [LED_STATE]
NOT AL
MOV [LED_STATE], AL
; 输出到LED端口
MOV DX, 800H
OUT DX, AL
; 发送EOI命令(结束中断)
MOV DX, 400H
MOV AL, 20H ; OCW2: 非特殊EOI命令
OUT DX, AL
POP DX ; 恢复寄存器
POP AX
IRET ; 中断返回
ISR ENDP
; 初始化程序
INIT:
CLI ; 关中断
; 设置中断向量(中断号20H)
MOV AX, 0
MOV ES, AX
MOV DI, 20H * 4 ; 中断向量表地址
MOV AX, OFFSET ISR ; 设置偏移地址
CLD
STOSW
MOV AX, CS ; 设置段地址
STOSW
; 初始化8259
MOV DX, 400H ; ICW1: 边沿触发, 级联, 需要ICW4
MOV AL, 00010011B ; 13H
OUT DX, AL
MOV DX, 402H ; ICW2: 设置中断向量基值20H
MOV AL, 20H
OUT DX, AL
MOV AL, 00000001B ; ICW4: 8086模式, 非缓冲, 正常EOI
OUT DX, AL
; 保存并设置中断屏蔽字(只允许IR0)
MOV AL, 11111110B ; 只开启IR0
OUT DX, AL
MOV [INT_MASK], AL
; 初始LED状态
MOV DX, 800H
MOV AL, [LED_STATE]
OUT DX, AL
STI ; 开中断
; 主循环(等待中断)
MAIN_LOOP:
HLT ; 暂停CPU等待中断
JMP MAIN_LOOP
END INIT ; 程序结束点
3.加一句单板机需要的结束标志,即可编译现在运行,运行正确
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)