您的位置:逆风者 汇编技术 正文
原作者:www.upwinder.com 添加时间:2007-09-01 原文发表:2007-08-31 人气:19 来源:未知

本文章共5288字,分4页,当前第3页,快速翻页:
 

CODE SEGMENT
ASSUME CS:CODE,DS:CODE,ES:CODE

;这一段是将整个硬盘锁从0000:7c00移至0000:0600,以免被后来读入的代码覆盖
START:
db 256 dup (00h)
PUSHDS
PUSHES
MOVCX,0100h
逆风者
MOVDI,0600h
MOVAX,0000h
MOVDS,AX
MOVES,AX
MOVSI,7C00h
REPNZ MOVSW
mov ax,0686h
JMPax ;长跳转至移动后的代码,也就是从screen处开始执行
words db 'Please choose the partition for guide.'
db 10 dup (20h)
db '(1)partition 1;(2)partition 2;(3)partition 3;(4)partition 4;',00h
screen:
MOVAX,0600h
MOVBH,0F0h
MOVCX,0000h
MOVDX,184Fh
INT10h ;初始化屏幕(前景为黑色,背景为灰白,字符闪烁)
MOVDL,1Ah
MOVSI,0619h ;从0619H处显示字符(因为程序将被读入了0000:0600处,
;实际显示的也就是现在的words处开始的字符串)
DISPLAY:
MOV AH,02H
MOV DH,10H
MOV BH,00H
INT 10H
MOV AL,[SI]
CMP AL,00H
JE readMBS
MOV AH,09H
MOV CX,01H
MOV BH,00H
MOV BL,70H
INT 10H
INC DL
INC SI
JMP DISPLAY
readMBS:
MOVAX,0201h
MOVCX,0001h
MOVDX,0080h
MOVBX,1000h
INT13h ;将主引导区(即本SYSGUIDE.DAT)读出到0000:1000H处
MOV ax,0201h
MOV cx,0006h ;读0 0 6扇,(即原来的MBS)
MOV dx,0080h
MOV bX,07C00h
int 013h
readkey:
MOV AH,00H
INT 16H
CMP AL,'1' ;是1么?
JE number1
CMP AL,'2'
JE number2
CMP AL,'3'
JE number3
CMP AL,'4'
JE number4
jmp readkey
number1:
db 0a0h,0c2h,11h ;相当于mov al,[011c2h],因为用mov al,[011c2h]不能编译
cmp al,00h
je error1
cmp al,05h
je error1
cmp al,0fh
je error1
mov ah,080h
db 88h,26h,0beh,11h ;相当于mov [011beh],ah
mov ah,00h
db 88h,26h,0ceh,11h ;mov [11ceh],ah
db 88h,26h,0deh,11h ;mov [11deh],ah
db 88h,26h,0eeh,11h ;mov [11eeh],ah
jmp ok
number2:
db 0a0h,0d2h,11h ;mov al,[11d2h]
cmp al,00h
je error1
cmp al,05h
je error1
cmp al,0fh
je error1
mov ah,80h
db 88h,26h,0ceh,11h ;mov [11ceh],ah
mov ah,00h
db 88h,26h,0beh,11h ;mov [11beh],ah
db 88h,26h,0deh,11h ;mov [11deh],ah
db 88h,26h,0eeh,11h ;mov [11eeh],ah
jmp ok

error1:
jmp readkey

number3:
db 0a0h,0e2h,11h ;mov al,[11e2h]
cmp al,00h
je error1
cmp al,05h
je error1
cmp al,0fh
je error1
mov ah,80h
db 88h,26h,0deh,11h ;mov [11deh],ah
mov ah,00h
db 88h,26h,0beh,11h ;mov [11beh],ah
db 88h,26h,0ceh,11h ;mov [11ceh],ah
db 88h,26h,0eeh,11h ;mov [11eeh],ah
jmp ok
number4:
db 0a0h,0f2h,11h ;mov al,[11f2h]
cmp al,00h
je error1
cmp al,05h
je error1
cmp al,0fh
je error1
mov ah,80h
db 88h,26h,0eeh,11h ;mov [11eeh],ah
mov ah,00h
db 88h,26h,0ceh,11h ;mov [11ceh],ah
db 88h,26h,0deh,11h ;mov [11deh],ah
db 88h,26h,0beh,11h ;mov [11beh],ah
jmp ok
ok:
mov ax,0301h
mov cx,0001h
mov dx,0080h
mov bx,1000h
int 13h ; 将改变了引导标示的分区表,写回0 0 1扇
MOVCX,040h
MOVDI,7dbeh
MOVSI,11beh
REPNZ MOVSW
MOV ax,0301h
MOV cx,0006h ;将改变了引导标示的分区表,写回0 0 6扇
MOV dx,0080h
MOV bX,07C00h
int 013h
MOV bx,7c00h ;交执行权给0000:7C00处
JMP bx ;长跳转至原MBR代码处执行

CODE ENDS
END START
代码到此就讲完了,程序本身不复杂,只要你了解了实现原理,在实现时才会得心应手,好了,赶快把我们的源代码编译链接一下,把模块二得到的程序取名为SYSGUIDE.EXE,从模块一所得的程序中提取出我们要的程序取名叫SYSGUIDE.DAT,提取方法如下:
1、在DOS方式下,输入“DEBUG GUIDE.EXE”,其中GUIDE.EXE是我们用模块一得到的程序文件(在此强烈警告千万不要运行这个GUIDE.EXE程序),
2、在DEBUG提示符下输入:R CX(回车) 1BD(回车) N SYSGUIDE.DAT(回车) W(回车)Q(回车)。
 

本文章更多内容<<上一页 - 1 - 2 - 3 - 4 - 下一页>>
相关文章

在弹出菜单的同时再次弹出菜单
Windows下控制台输出
列表视图控件
80386的中断和异常
修改文件操作
矛与盾的较量——CRC原理篇
移位指令在Win32消息处理中的一些问题
小试Win32汇编
客户寄存器结构
事件对象
虚拟设备驱动程序初步
VxD 程序设计入门
Win32调试API 第一部分
树型视图控件
80386的异常类型
把数据写到代码段
5个DOS专用文件的6种io重定向,more实现管道
汇编中参数的传递和堆栈修正
Win32调试API 第三部分
DeviceIoControl接口

相关评论


本文章所属分类:首页 汇编技术

  热门关键字:
进制数据输出的通用程序 2007-09-12
汇编源码--showmem 2007-08-31
汇编源码--CLEAN 2007-08-31
汇编源码--hdr 2007-08-31
汇编源码--basload 2007-08-31
汇编源码--CHAR 2007-08-31
汇编源码--fxn 2007-08-31
汇编源码--alarm 2007-08-31
汇编源码--getsect 2007-08-31
汇编源码--DEV 2007-08-31