1.Deepseek会话指令

8位LED,端口地址800H,程序加载地址CS:IP 为0000:2000,用emu8086编写一流水灯程序

2.DeppSeek生成的程序

#make_bin#

; BIN is plain binary format similar to .com format, but not limited to 1 segment;
; All values between # are directives, these values are saved into a separate .binf file.
; Before loading .bin file emulator reads .binf file with the same file name.

; All directives are optional, if you don't need them, delete them.

; set loading address, .bin file will be loaded to this address:
#LOAD_SEGMENT=0500h#
#LOAD_OFFSET=0000h#

; set entry point:
#CS=0500h#	; same as loading segment
#IP=0000h#	; same as loading offset

; set segment registers
#DS=0500h#	; same as loading segment
#ES=0500h#	; same as loading segment

; set stack
#SS=0500h#	; same as loading segment
#SP=FFFEh#	; set to top of loading segment

; set general registers (optional)
#AX=0000h#
#BX=0000h#
#CX=0000h#
#DX=0000h#
#SI=0000h#
#DI=0000h#
#BP=0000h#

; add your code here      
; ============================================
; 流水灯控制程序
; 控制8位LED,端口地址800H
; 程序加载地址:CS:0000, IP:2000
; 功能:实现多种流水灯效果
; ============================================

PORT_LED EQU 800H      ; LED控制端口地址

ORG 2000H              ; 设置IP=2000H

START:
    ; 初始化:关闭所有LED
    MOV AL, 0FFH       ; 假设高电平灭,低电平亮(可根据实际调整)
    CALL OUTPUT_LED
    
MAIN_LOOP:
    ; 效果1:从左到右流水(单灯流动)
    CALL FLOW_LEFT_TO_RIGHT
    
    ; 效果2:从右到左流水
    CALL FLOW_RIGHT_TO_LEFT
    
    ; 效果3:两边向中间汇聚
    CALL FLOW_CENTER_IN
    
    ; 效果4:中间向两边扩散
    CALL FLOW_CENTER_OUT
    
    ; 效果5:全亮全闪
    CALL BLINK_ALL
    
    JMP MAIN_LOOP      ; 无限循环

; ============================================
; 子程序:向LED端口输出数据
; 输入:AL = 要输出的数据
; ============================================
OUTPUT_LED PROC
    MOV DX, PORT_LED
    OUT DX, AL
    RET
OUTPUT_LED ENDP

; ============================================
; 效果1:从左到右流水(单灯移动)
; ============================================
FLOW_LEFT_TO_RIGHT PROC
    PUSH CX
    PUSH AX
    
    MOV CX, 8          ; 循环8次
    MOV AL, 01111111b  ; 初始:最左灯亮(第7位为0)
    
FLOW_LR_LOOP:
    CALL OUTPUT_LED    ; 输出到LED
    CALL DELAY         ; 延时
    
    ROR AL, 1          ; 循环右移:01111111→10111111→11011111...
    LOOP FLOW_LR_LOOP
    
    POP AX
    POP CX
    RET
FLOW_LEFT_TO_RIGHT ENDP

; ============================================
; 效果2:从右到左流水
; ============================================
FLOW_RIGHT_TO_LEFT PROC
    PUSH CX
    PUSH AX
    
    MOV CX, 8
    MOV AL, 11111110b  ; 初始:最右灯亮(第0位为0)
    
FLOW_RL_LOOP:
    CALL OUTPUT_LED
    CALL DELAY
    
    ROL AL, 1          ; 循环左移:11111110→11111101→11111011...
    LOOP FLOW_RL_LOOP
    
    POP AX
    POP CX
    RET
FLOW_RIGHT_TO_LEFT ENDP

; ============================================
; 效果3:两边向中间汇聚
; ============================================
FLOW_CENTER_IN PROC
    PUSH CX
    PUSH AX
    
    MOV CX, 4          ; 4个步骤
    MOV AL, 01111110b  ; 初始:两边亮(第7位和第0位为0)
    
FLOW_CI_LOOP:
    CALL OUTPUT_LED
    CALL DELAY_LONG    ; 稍长延时
    
    ; 修改位模式:01111110→10111101→11011011→11100111
    ; 先右移左边0位,再左移右边0位
    MOV AH, AL
    AND AH, 0F0H       ; 保留高4位
    SHR AH, 1          ; 右移
    AND AL, 0FH        ; 保留低4位
    SHL AL, 1          ; 左移
    OR AL, AH          ; 合并
    
    LOOP FLOW_CI_LOOP
    
    POP AX
    POP CX
    RET
FLOW_CENTER_IN ENDP

; ============================================
; 效果4:中间向两边扩散
; ============================================
FLOW_CENTER_OUT PROC
    PUSH CX
    PUSH AX
    
    MOV CX, 4
    MOV AL, 11100111b  ; 初始:中间两个亮
    
FLOW_CO_LOOP:
    CALL OUTPUT_LED
    CALL DELAY_LONG
    
    ; 修改位模式:11100111→11011011→10111101→01111110
    MOV AH, AL
    AND AH, 0F0H
    SHL AH, 1          ; 左移
    AND AL, 0FH
    SHR AL, 1          ; 右移
    OR AL, AH
    
    LOOP FLOW_CO_LOOP
    
    POP AX
    POP CX
    RET
FLOW_CENTER_OUT ENDP

; ============================================
; 效果5:全亮全闪
; ============================================
BLINK_ALL PROC
    PUSH CX
    PUSH AX
    
    MOV CX, 5          ; 闪烁5次
    
BLINK_LOOP:
    MOV AL, 00000000b  ; 全亮
    CALL OUTPUT_LED
    CALL DELAY_SHORT
    
    MOV AL, 11111111b  ; 全灭
    CALL OUTPUT_LED
    CALL DELAY_SHORT
    
    LOOP BLINK_LOOP
    
    POP AX
    POP CX
    RET
BLINK_ALL ENDP

; ============================================
; 延时子程序(基本延时)
; ============================================
DELAY PROC
    PUSH CX
    PUSH DX
    
    MOV CX, 02H      ; 外循环
DELAY_OUTER:
    MOV DX, 0FFFFH     ; 内循环
DELAY_INNER:
    DEC DX
    JNZ DELAY_INNER
    LOOP DELAY_OUTER
    
    POP DX
    POP CX
    RET
DELAY ENDP

; ============================================
; 较长延时(用于汇聚/扩散效果)
; ============================================
DELAY_LONG PROC
    PUSH CX
    PUSH DX
    
    MOV CX, 02H
DELAY_LONG_OUTER:
    MOV DX, 0FFFFH
DELAY_LONG_INNER:
    DEC DX
    JNZ DELAY_LONG_INNER
    LOOP DELAY_LONG_OUTER
    
    POP DX
    POP CX
    RET
DELAY_LONG ENDP

; ============================================
; 较短延时(用于闪烁效果)
; ============================================
DELAY_SHORT PROC
    PUSH CX
    
    MOV CX, 0FFFH
DELAY_SHORT_LOOP:
    LOOP DELAY_SHORT_LOOP
    
    POP CX
    RET
DELAY_SHORT ENDP      

  DB 55H,55H,55H,55H,55H,55H  ;添加Bootloader接受结束标志数据串

; ============================================
; 程序结束
; ============================================
END START


HLT           ; halt!


3.拷入Emu8086,编译生成可执行代码

4.下载运行

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐