Chinaunix首页 | 论坛 | 博客
  • 博客访问: 607054
  • 博文数量: 353
  • 博客积分: 1104
  • 博客等级: 少尉
  • 技术积分: 1457
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-23 23:02
个人简介

1、刚工作时做Linux 流控;后来做安全操作系统;再后来做操作系统加固;现在做TCP 加速。唉!没离开过类Unix!!!但是水平有限。。

文章存档

2015年(80)

2013年(4)

2012年(90)

2011年(177)

2010年(1)

2009年(1)

分类:

2011-12-08 13:20:37

原文地址:BootSector分析 作者:CUDev

    org    07c00h            ; 告诉编译器程序加载到7c00处
    mov    ax, cs
    mov    ds, ax
    mov    es, ax
    call    DispStr            ; 调用显示字符串例程
    jmp    $            ; 无限循环
DispStr:
    mov    ax, BootMessage
    mov    bp, ax            ; ES:BP = 串地址
    mov    cx, 16            ; CX = 串长度
    mov    ax, 01301h        ; AH = 13,  AL = 01h
    mov    bx, 000ch        ; 页号为0(BH = 0) 黑底红字(BL = 0Ch,高亮)
    mov    dl, 0
    int    10h            ; 10h 号中断
    ret
BootMessage:        db    "Hello, OS world!"
times     510-($-$$)    db    0    ; 填充剩下的空间,使生成的二进制代码恰好为512字节
dw     0xaa55                ; 结束标志


代码的解释:

在NASM中,任何不被方括号[]括起来的标签和变量名都会被认为是地址,访问标签中的内容必须使用[]。
关于$和$$,$表示当前被汇编后的地址,
ndisasm -o 0x7c00 boot.bin >> disboot.asm

00007C09  EBFE              jmp short 0x7c09。

$$表示一个节的开始处被汇编后的地址,也就是0x7c00。
在程序中$-$$经常会被用到。
times 510-($-$$) db 0;表示将0重复510-($-$$)遍,也就是在剩下的空间里不停的填充0,直到程序有510B为止。这样加上结束0xAA55,正好512B。
阅读(453) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~