将操作码解码为指令
Decoding opcode to instruction
这个汇编例程的前 2 条指令是直接用机器代码编写的,如何将它们翻译成标准形式(我猜它类似于 add %bp, %bx,但它没有意义,因为这个例程应该清空 8042 缓冲区)?
func:
.word 0x00eb,0x00eb
in , %al
test %al,
jnz func
ret
通常您会为此使用调试器。
db 0EBh, 00h
是空跳转,即跳转到紧跟其后的指令。
Expanding on 500 - Internal Sever Error 的答案,代码是:
func: jmp short func0
func0: jmp short func1
func1: in , %al
test %al,
jnz func
ret
到下一条指令的两次跳转用于创建一个短暂的延迟。在使用某些 I/O 端口操作时,某些 8088 / 8086 / 80186 / 80286 / ... 类型的环境可能需要这样做。例如,在早期的 IBM AT 中,在某些情况下,AT / ISA 总线 运行 比一些较旧的 ISA 类型外设卡设计 运行 的速度要快一点,所以跳转到下一条指令被用作延迟。
这个汇编例程的前 2 条指令是直接用机器代码编写的,如何将它们翻译成标准形式(我猜它类似于 add %bp, %bx,但它没有意义,因为这个例程应该清空 8042 缓冲区)?
func:
.word 0x00eb,0x00eb
in , %al
test %al,
jnz func
ret
通常您会为此使用调试器。
db 0EBh, 00h
是空跳转,即跳转到紧跟其后的指令。
Expanding on 500 - Internal Sever Error 的答案,代码是:
func: jmp short func0
func0: jmp short func1
func1: in , %al
test %al,
jnz func
ret
到下一条指令的两次跳转用于创建一个短暂的延迟。在使用某些 I/O 端口操作时,某些 8088 / 8086 / 80186 / 80286 / ... 类型的环境可能需要这样做。例如,在早期的 IBM AT 中,在某些情况下,AT / ISA 总线 运行 比一些较旧的 ISA 类型外设卡设计 运行 的速度要快一点,所以跳转到下一条指令被用作延迟。