Assembly 这些特定的汇编指令(使用db和dw)是如何导致计算机重新启动的?
这3条汇编指令如何导致计算机重新启动Assembly 这些特定的汇编指令(使用db和dw)是如何导致计算机重新启动的?,assembly,x86,bootloader,Assembly,X86,Bootloader,这3条汇编指令如何导致计算机重新启动 db 0x0ea dw 0x0000 dw 0xffff 这是我从你家找到的 据我所知,这3条指令将您发送到FFFF:0000,即内存的末尾,通过调用BIOS POST导致重新启动。但是不应该有一个jmp指令来进行跳转吗 另外,在我看来,在db0x0ea中,ea是jmp的机器指令。如果是这样的话,db 0x0ea如何编写机器指令?如果db和dw除了声明变量之外还有其他功能,它们是什么?有人能给我指出更多关于db和dw及其任何隐藏函数的文献吗。思考一下“
db 0x0ea
dw 0x0000
dw 0xffff
这是我从你家找到的
据我所知,这3条指令将您发送到FFFF:0000
,即内存的末尾,通过调用BIOS POST导致重新启动。但是不应该有一个jmp
指令来进行跳转吗
另外,在我看来,在db0x0ea
中,ea是jmp
的机器指令。如果是这样的话,db 0x0ea
如何编写机器指令?如果db
和dw
除了声明变量之外还有其他功能,它们是什么?有人能给我指出更多关于db
和dw
及其任何隐藏函数的文献吗。思考一下“声明变量”在汇编上下文中的含义db
和dw
提供值时,将该值直接写入内存。另一方面,代码和字节也存储在内存中。通过让汇编程序处理汇编源代码,可以用字节填充内存,也可以通过db/dw/dd命令查找指令编码并用字节填充内存
这就是他们在这里做的。这个字节序列-ea 00 00 ff ff-编码
jmp far 0ffffh:0
命令。db
和dw
不是汇编指令,它们是伪指令。它们的参数仅用于初始化伪指令分配的字节或字。当它们在代码段中使用时,可以用来创建可执行代码。您可以通过使用某些汇编指令插入正确的位来硬编码指令(db
,dw
,等等)。在16位模式下,字节$EA0000FFFF
反汇编为:
ljmp $0xffff,$0x0
它将值
$FFFF
放入CS
(代码段)寄存器,将值$0000
放入IP
(指令指针)。这将有效地开始执行计算机的代码,这将继续引导系统,就像您刚刚打开它一样。还请注意,如果您需要插入这样的指令(而不是能够执行类似于jmp far 0xFFFF:0x0000的操作),因此,作为这些db和dw的间接使用,我可以通过键入每条指令及其数据的十六进制代码,使用db、dw、dd等来编写整个程序。。。我说的对吗?@语法如果做得好,是的-尽管你必须非常小心地正确编码指令位。这样说吧,如果你拿了一个文件并查看了它的十六进制位,然后正确地设置了你的汇编指令,并制作了足够的db
,以克隆原始文件,当你组装它时,你应该得到相同的文件-一个程序或其他。