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!