从早晨10:00到下午3:00,一直都在写产品程序。后来写不动了,就回家了。但还是想把昨晚想起来的事试一下,就是升级8088单板机boot,实现加载dos系统下com程序。还是采取边干边记录的方法吧,要不干完了,就不爱写了。
步骤一:生成原来boot引导程序的副本
步骤二,修改boot代码,重新编译烧录
代码修改的部分如下
;----------------------------------------
;初始化程序跳转前的段地址准备
;0000:2000 EQU 01f0:0100h
mov ax,01f0h
mov ds,ax
mov ss,ax
mov ax,5fffh
mov sp,ax
;-----------------------------------------
; mov byte ptr ds:[100h],00H
; mov byte ptr ds:[101h],20H
; mov byte ptr ds:[102h],00H
; mov byte ptr ds:[103h],00H
mov byte ptr ds:[3100h],00H
mov byte ptr ds:[3101h],01H ;ip=0100h
mov byte ptr ds:[3102h],0f0H
mov byte ptr ds:[3103h],01H ;cs=01f0
JMP DWORD PTR DS:[3100H]
挑选示例代码ex002
修改段内偏移地址为com格式0100h
;---------------------------------------------------------------------------------------------
led_port equ 800h
;---------------------------------------------------------------------------------------------
; org 2000h ;程序将由监控bios下载到内存RAM的地址(0000:2000)
org 0100h
start:
;------------------------------------------------------
;init part
;------------------------------------------------------
;mov ax,0
mov ax,1f0h
mov ds,ax
mov ss,ax
mov sp,3fffh
st001:
nop
;-----------------------------------------------------
;点亮系统板上的LED
;-----------------------------------------------------
;MOV DX,800H ;800H是板子上8个LED的端口地址号
mov dx,led_port
MOV AL,0aaH ;一亮一灭间隔点亮
OUT DX,AL
call DELAY
;MOV DX,800H ;800H是板子上8个LED的端口地址号
mov dx,led_port
MOV AL,00H ;一亮一灭间隔点亮
OUT DX,AL
call DELAY
;mov al,01010101b
;mov al,0f0h;
;out 25H,al
;hlt
jmp st001
jmp start
;------------------------------------------------------------
; DELAY PROC NEAR
;------------------------------------------------------------
;push
DELAY:
PUSH CX
PUSH BX
NOP
NOP
mov bx,10
del1:
mov cx,5882
del2:
loop del2
dec bx
jnz del1
;pop cx
;pop bx
POP BX
POP CX
RET
db 55h,55h,55h,55h,55h,55h ;程序结束标志,监控bios程序,收到后自动跳转到内存0000:2000处执行
;----------------------------------------------------------------------------------------------
通过串口加载这个测试程序
完美收官!
仅仅因为喜爱!Just for Fun!So cool!