floppy-asm.s
来自「用于汇编领域的,运用于OS的MAIN函数.基于硬件基础的源代码」· S 代码 · 共 112 行
S
112 行
.text.global FloppyMotorOn.global FloppyMotorOff.global initializeDMA.global initializeDMAWrite.global FloppyCode.global ResultFhaseFloppyMotorOn: pushl %edx pushl %eax movb $0x1c, %al movw $0x3f2, %dx outb %al, %dx popl %eax popl %edx retFloppyMotorOff: pushl %edx pushl %eax movw $0x3f2, %dx xorb %al, %al outb %al, %dx popl %eax popl %edx retinitializeDMA: pushl %ebp movl %esp, %ebp pushl %eax movb $0x14, %al outb %al, $0x08 # deactivate DMA movb $0x01, %al outb %al, $0x0c # reset flip-flop movb $0x56, %al outb %al, $0x0b # mode register movb $0x01, %al outb %al, $0x0c # reset flip-flop movl 0x0c(%ebp), %eax # offset outb %al, $0x04 # low byte movb %ah, %al outb %al, $0x04 # high byte movl 0x08(%ebp), %eax # page outb %al, $0x81 movb $0x01, %al outb %al, $0x0c # reset flip-flop movb $0xff, %al outb %al, $0x05 # low byte of counter (511) movb $0x01, %al outb %al, $0x05 # high byte of counter movb $0x02, %al outb %al, $0x0a # unmask ch2 movb $0x10, %al outb %al, $0x08 # activate DMA 1 popl %eax movl %ebp, %esp popl %ebp retinitializeDMAWrite: pushl %ebp movl %esp, %ebp pushl %eax movb $0x14, %al outb %al, $0x08 # deactivate DMA movb $0x01, %al outb %al, $0x0c # reset flip-flop movb $0x5a, %al # read from mem to write to disk outb %al, $0x0b # mode register movb $0x01, %al outb %al, $0x0c # reset flip-flop movl 0x0c(%ebp), %eax # offset outb %al, $0x04 # low byte movb %ah, %al outb %al, $0x04 # high byte movl 0x08(%ebp), %eax # page outb %al, $0x81 movb $0x01, %al outb %al, $0x0c # reset flip-flop movb $0xff, %al outb %al, $0x05 # low byte of counter (511) movb $0x01, %al outb %al, $0x05 # high byte of counter movb $0x02, %al outb %al, $0x0a # unmask ch2 movb $0x10, %al outb %al, $0x08 # activate DMA 1 popl %eax movl %ebp, %esp popl %ebp retResultFhase: pushl %edx movw $0x3f5, %dx inb %dx, %al popl %edx ret
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?