times 510-($-$$) db “helllo, os world!”是什么意思?希望能解释一下times的用法

lgyy535553423 2010-09-14 12:17:11
org 07c00h
mov ax,cx
mov ds,ax
mov es,ax
call cdy
jmp $
cdy:
mov ax,bootmassage
mov bp,ax
mov cx,16
mov ax,01301h
mov bx,000ch
mov dl,0
int 10h
ret
bootmassage: db "hello,os world!"
times 510-($-$$) db 0
dw 0xaa55
上面一段是《自己动手写操作系统》的例程,我初学,希望各位大侠帮帮忙。
...全文
1112 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
c15008460 2012-12-13
  • 打赏
  • 举报
回复
不用把当前指令的字节数算进去吗
brookmill 2010-09-14
  • 打赏
  • 举报
回复
bootmessage: db "hello,os world!"
这是说,紧跟着上一行ret指令的后面保存一个字符串,并且把它的地址标记为bootmessage,前面就可以使用这个字符串了(mov ax,bootmessage)

times 510-($-$$) db 0 在刚才的字符串后面填充0
brookmill 2010-09-14
  • 打赏
  • 举报
回复
times 123 db 0 ; 这个表示填充123个字节的0
所以,times 510-($-$$) db 0 表示填充 510-($-$$) 这么多个字节的0
这里面的$表示当前指令的地址,$$表示程序的起始地址(也就是最开始的7c00),所以$-$$就等于本条指令之前的所有字节数。510-($-$$)的效果就是,填充了这些0之后,从程序开始到最后一个0,一共是510个字节。再加上最后的dw两个字节(0xaa55是结束标志),整段程序的大小就是512个字节,刚好占满一个扇区。

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧