1个回答
展开全部
从汇编的角度说,CPU把要传到硬盘中的数据首先放在内存中,然后把I/O访问地址写到硬盘,使用MOV命令对从内存中向硬盘写数据。
这里面还要涉及I/O地址锁存器(传输过程),和对硬盘物理地址的访问和控制。
这是最底层的机器代码
举例:
mov ax,0201h
mov cx,0001h
mov dx,0080h
mov bx,f000h
int 13h ;将MBR读入硬盘0000:f000H
mov ch,01H
mov cl,01h
mov dh,[f1bOh] ;要写入的柱面号此时保存在0000:f1b0h
mov dl,80h
WRITE:
mov ax,033fh ;一次写63个扇区
mov bx,0000h ;
int 13h
cmp ch,ffh
jz next1
INC ch
jmp write
next1:
add cx,40h
cmp cx,ffc1h ;是否写完一个柱面
jz next2
mov ch,00h
jmp write
next2:
cmp dh,ff
jz exit ;硬盘已写完
inc dh ;磁头数加1
mov [f1b0h],dh
push ax
push bx
push cx
push dx
mov ax,0201h
mov cx,0001h
mov dx,0080h
mov bx,f000h
int 13h ;将DH中的柱面号保存
pop dx
pop cx
pop bx
pop ax
mov cx,0001
jmp write
exit:
这里面还要涉及I/O地址锁存器(传输过程),和对硬盘物理地址的访问和控制。
这是最底层的机器代码
举例:
mov ax,0201h
mov cx,0001h
mov dx,0080h
mov bx,f000h
int 13h ;将MBR读入硬盘0000:f000H
mov ch,01H
mov cl,01h
mov dh,[f1bOh] ;要写入的柱面号此时保存在0000:f1b0h
mov dl,80h
WRITE:
mov ax,033fh ;一次写63个扇区
mov bx,0000h ;
int 13h
cmp ch,ffh
jz next1
INC ch
jmp write
next1:
add cx,40h
cmp cx,ffc1h ;是否写完一个柱面
jz next2
mov ch,00h
jmp write
next2:
cmp dh,ff
jz exit ;硬盘已写完
inc dh ;磁头数加1
mov [f1b0h],dh
push ax
push bx
push cx
push dx
mov ax,0201h
mov cx,0001h
mov dx,0080h
mov bx,f000h
int 13h ;将DH中的柱面号保存
pop dx
pop cx
pop bx
pop ax
mov cx,0001
jmp write
exit:
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询