Assembly 查询汇编前缀';泰晤士报';
下面是我想理解的汇编代码。使用nasm组装此代码后,如何填充512字节 因为我还不清楚Assembly 查询汇编前缀';泰晤士报';,assembly,x86,nasm,bootloader,Assembly,X86,Nasm,Bootloader,下面是我想理解的汇编代码。使用nasm组装此代码后,如何填充512字节 因为我还不清楚510-($-$$)在这里做什么?根据以下代码,$和$$的值是多少 摘自第3.5节“表达式”: NASM在表达式中支持两个特殊标记,允许计算涉及当前程序集位置:$和$$标记。$计算为包含表达式的行的开头处的装配位置;因此,您可以使用JMP$.$编写一个无限循环计算到当前节的开头;因此,您可以通过使用($-$$)来判断您所处的区域有多远 因此,上面的代码执行以下操作: 计算“cli”和“hlt”指令占用的字节数
510-($-$$)
在这里做什么?根据以下代码,$
和$$
的值是多少
摘自第3.5节“表达式”:
NASM在表达式中支持两个特殊标记,允许计算涉及当前程序集位置:$和$$标记。$计算为包含表达式的行的开头处的装配位置;因此,您可以使用JMP$.$编写一个无限循环计算到当前节的开头;因此,您可以通过使用($-$$)来判断您所处的区域有多远
因此,上面的代码执行以下操作:
其目的是让512字节的block:N+(510-N)+2=512Start:label告诉我们这是汇编代码的起点。对于您的问题:“计算'cli'和'hlt'指令占用的字节数”这两条指令占用2个字节,因此$=0x7C00和$=0x7C02(时间线的开始),因此我认为时间前缀的表达式是(510-($-$$)=(510-(0x7C00-0x7C02))=(510-(-2))=512,因此,“times 512 db 0”将0设置为512字节。因此,如果我上面的更新是正确的,我的问题是,如果“times 512 db 0”位于地址0x7C02,则“times”将512字节设置为从该地址(0x7C02)开始的0,而不是0x7C00?那么,我们是否缺少前两个字节,并在末尾将额外的2个字节归零?希望你理解我的疑问。反之亦然:$$=0x7C00沙穆丁·莫德:如果答案对你有帮助,请将其标记为“正确”。
;***************************
org 0x7c00 ; We are loaded by BIOS at 0x7C00
bits 16 ; We are still in 16 bit Real Mode
Start:
cli ; Clear all Interrupts
hlt ; halt the system
times 510 - ($-$$) db 0 ; We have to be 512 bytes. Clear the rest of the bytes with 0
dw 0xAA55 ; Boot Signature
;*********************