这3个汇编指令是如何导致计算机重启的?
db 0x0ea
dw 0x0000
dw 0xffff我在http://fisnikhasani.com/building-your-own-bootloader/上找到了这个
据我所知,这3条指令会把你送到FFFF:0000,这是内存的尽头,它会通过调用BIOS POST来导致重启。但是,不是应该有一条jmp指令来实现这种跳转吗?
而且,在我看来,在db 0x0ea中,ea是jmp的机器指令。如果是这样,db 0x0ea如何编写机器指令?如果db和dw除了声明变量之外还有其他函数,那它们是什么呢?谁能给我指出更多关于db和dw及其隐藏功能的文献。
发布于 2013-04-04 10:23:25
想一想“声明变量”在汇编上下文中是什么意思。当提供了值时,db和dw将该值直接写入内存。另一方面,代码以字节的形式存储在内存中。您可以通过让汇编程序处理汇编源程序来用字节填充内存,也可以通过db/dw/dd命令查找指令编码并用字节填充内存。
这就是他们在这里做的事情。这个字节序列- ea 00 00 ff对jmp far 0ffffh:0命令进行ff编码。
发布于 2013-04-04 10:30:12
只需使用某些汇编指令(db、dw等)插入适当的位,就可以对指令进行硬编码。在16位模式下,$EA0000FFFF将字节反汇编为:
ljmp $0xffff,$0x0其将值$FFFF放置在CS (代码段)寄存器中,并将$0000放置在IP (指令指针)中。这将有效地从计算机的reset vector开始执行代码,这应该会继续引导系统,就像您刚刚打开它一样。
发布于 2013-04-04 10:25:09
db和dw不是汇编指令,它们是伪指令。它们的参数只是用来初始化伪指令分配的字节或字。当在代码段中使用它们时,可以使用它们来创建可执行代码。
https://stackoverflow.com/questions/15801384
复制相似问题