📄 floppy-asm.s
字号:
.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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -