8086汇编 开机启动程序(裸机运行)
来源:互联网 发布:商城数据库表结构 编辑:程序博客网 时间:2024/06/04 18:10
程序功能:将特定功能的指令写到软盘第一扇区,开机cpu执行软盘里面的指令
实现
1:启动硬盘系统、硬盘第一扇区
2:重启计算机、
3:显示系统时间、
4:修改系统时间。
要是想要实现裸机加载运行的话,得使用U盘启动工具,另外写一个程序将下面的代码写到U盘的引导位置
assume cs:codecode segmentget_input:push bxpush espush axmov ax,0b800hmov es,axgi_s:mov ah,4call my_bootmov ah,0int 16h cmp ah,3bh ;-input is f1 jne next0 call change_colornext0:cmp ah,02H ;--input is 1jne next1mov ah,0call my_bootjmp gi_s next1: cmp ah,03H ;--input is 2jne next2mov ah,1call my_bootjmp gi_s next2: cmp ah,04H ;--input is 3jne next3mov ah,2call my_boot jmp gi_snext3: cmp ah,05H ;--input is 4jne next4mov ah,3call my_bootjmp gi_s next4:jmp gi_spop espop bxpop axret;--------------------------------my_boot:jmp short mb_stable dw reset_pc,star_system,clock,set_clock,show_menu mb_s:push axpush bxpush cxcmp ah,4ja ss_end0mov bl,ahmov bh,0add bx,bxcall clear_screenjmp word ptr table[bx];;--------------------------显示menushow_menu:jmp short sm_startm1:db "1.reset pc",0m2:db "2.star_system",0m3:db "3.show clock",0m4:db "4.set clock",0sm_start: mov bx,160*5+64mov di,0mov si,offset m1mov cx,4sm1:push cxsm2:mov cl,cs:[si]jcxz sm_ok1mov byte ptr es:[bx+di],clinc siadd di,2jmp sm2sm_ok1:inc simov di,0add bx,160*3pop cxloop sm1jmp mb_end;--------------------------------reset_pc:;---------------------重启电脑 mov ax,0ffffh push ax mov ax,0 push ax retfss_end0: jmp mb_end;--------------------------------star_system:;---------------------引导现有操作系统 mov ax,0 mov es,ax mov bx,7c00h mov al,1 mov ch,0 mov cl,1 mov dh,0 mov dl,80h mov ah,2 int 13h mov ax,0 push ax mov ax,7c00h push ax retf;-------------------------------clock:;---------------------进入时钟程序 sc1:in al,60h cmp al,1 je c_end cmp al,3bh ;-input is f1 jne next_c call change_colornext_c:call show_peicejmp sc1c_end:jmp mb_end;--------------------------------set_clock:;---------------------设置时间 jmp short set_startnow_pos db 0,1,15,2,3,15,4,5,15,6,7,15,8,9,15,10,11 port_pos db 9,9,8,8,7,7,4,4,2,2,0,0set_start: mov dx,0 or byte ptr es:[160*12+32*2+1],40hss1:in al,60h cmp al,1je mb_end cmp al,3bh ;-input is f1 jne next_sc call change_colornext_sc:call myfunccall show_peicejmp ss1 mb_end:mov ax,40hmov ds,axback0:mov ax,ds:[1ch]cmp ds:[1ah],axje back1 mov ah,0int 16hjmp back0back1: pop cxpop bxpop axret;-----------------------左4B 右4Dmyfunc:push sipush cxpush axpush bx;in al,60h;cmp al,1;jne nst1nst1:cmp al,11ja mov_zyjmp change_timemov_zy:cmp al,4Dh;----rightjne nst2mov bx,dxcmp bx,16je nst2add bx,bx and byte ptr es:[bx+1+160*12+32*2],0fhadd dx,1 or byte ptr es:[bx+3+160*12+32*2],40hnst2:cmp al,4bh;----leftjne nst3mov bx,dxcmp bx,0je nst3add bx,bx and byte ptr es:[bx+1+160*12+32*2],0fhsub dx,1 or byte ptr es:[bx-1+160*12+32*2],40hnst3:jmp st_outchange_time:cmp al,11jne alnot_0mov al,1alnot_0:sub al,1mov bx,dxmov si,bxadd si,sicmp byte ptr es:[si+160*12+32*2],39hja st_outcmp byte ptr es:[si+160*12+32*2],30hjb st_outmov ch,alcmp byte ptr now_pos[bx+1],15je in_low;--if next now_pos is 15,is changing low_pos mov ah,es:[si+160*12+32*2+2]and ah,0Fhmov cl,4shl ch,cljmp s_dealin_low:mov ah,es:[si+160*12+32*2-2]mov cl,4shl ah,cls_deal:or ah,chmov bl, now_pos[bx]mov al, port_pos[bx]out 70h,almov al,ahout 71h,alst_out:mov al,0d2hout 64h,alout 60h,alpop bxpop axpop cxpop siret;--------------------------------show_peice:;------------------show current timepush cxpush axjmp short sc_startclock_p db 9,8,7,4,2,0clock_t db ' / / : : 'sc_start:mov byte ptr es:[160*12+31*2],'0'mov byte ptr es:[160*12+30*2],'2'mov di,0mov si,0mov cx,6sc2:push cx mov al,clock_p[si] out 70h,alin al,71hmov ah,almov cl,4shr ah,cland al,0fhadd ah,30hadd al,30hmov byte ptr clock_t[di],ahmov byte ptr clock_t[di+1],al add di,3inc sipop cxloop sc2mov di,0mov si,160*12+32*2mov ah,10mov cx,17sc3:mov al,clock_t[di]mov byte ptr es:[si],alinc diadd si,2loop sc3pop axpop cxret;--------------------------------clear_screen:;--清屏push cxpush bxmov bx,0mov cx,2000clear_s1:mov byte ptr es:[bx],' ' and byte ptr es:[bx+1],0fhadd bx,2loop clear_s1pop bxpop cx retchange_color:push cxpush bxmov bx,0mov cx,2000cc1: inc byte ptr es:[bx+1] and byte ptr es:[bx+1],0fh add bx,2 loop cc1pop bxpop cxretall_end:nopstart: push cs ;copy a function to section 1 pop es mov bx,offset copy_start mov al,1 mov ch,0 mov cl,1 mov dh,0 mov dl,0 mov ah,3 int 13h ;call get_input ;------------do not use mov bx,0 mov al,2 mov ch,0 mov cl,2 mov dh,0 mov dl,0 mov ah,3 int 13hp_end:mov ax,4c00hint 21hcopy_start: mov ax,7c00h mov es,ax mov bx, 0 mov al,2 mov ch,0 mov cl,2 mov dh,0 mov dl,0 mov ah,2 int 13h mov ax,7c00h push ax mov ax,0 push ax retfcopy_end:nop;----------------------开始引导code endsend start
- 8086汇编 开机启动程序(裸机运行)
- uboot启动后在内存中运行裸机程序hello
- uboot启动后在内存中运行裸机程序hello
- 开机启动时自动运行程序
- (转)S60 程序安装后启动运行和程序开机自动运行
- 最简单的ARM裸机程序,帮你理解程序的运行启动(mini2440开发板)
- arm裸机程序启动流程
- ARM裸机程序开发15(伪指令,汇编语句格式,汇编变量常量)
- 开机启动过程(自己程序的开机启动)
- 系统开机自动运行程序和自动启动服务
- 关于开机自动运行程序和自动启动服务
- win7下开机启动自动运行程序,脚本
- Windows系统开机自动运行程序和自动启动服务
- 【转载】ubuntu 开机启动时自动运行程序
- Windows下设置程序随开机启动运行代码
- android开机启动到程序执行运行流程简图
- 五.ARM裸机学习之汇编写启动代码之关看门狗,开iCache,汇编程序和C程序互相调用
- s3c6410裸机学习笔记(一)--汇编启动代码start.S
- IOS: 正确使用PresentModalViewController
- 百度终于给力了,百度移动云测试中心(MTC)确实好用
- IT寓言:双桥故事
- 充分发展的管内层 流流动换热中对流换热系数与通道的当量尺寸成反比
- javescript实现图片切换功能
- 8086汇编 开机启动程序(裸机运行)
- Android广播接收器两种注册_广播六
- 过滤器----张国亮总结第三季之Filter常见应用
- js实现拼图游戏,爱好js的来看看吧
- asp.net 页面应用了 Transaction="Required" 报错“无法执行事务处理代码。
- VS2010在资源管理器中添加工程
- CreateFileMapping实现的共享内存及用法
- JS阻止冒泡事件以及默认事件发生
- IOS 表格边框上添加阴影