Orange’s学习笔记(一)

伪汇编指令ORG
学习操作系统两个多月以来,一直对org这个伪汇编指令似懂非懂,拿Orange’s的一个最简单的引导扇区代码来说

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 = 13h,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

这段代码的org 07c00h指的是,这段程序将来要加载到偏移地址为07c00h的地方,所以在编译器编译时会将标号代表的相对地址(编译后的程序代码地址从0开始)+07c00h(org指明的地址值)作为编译后标号所在位置的实际数值,ep:看第16行标号BootMessage,不考虑org,编译后的二进制代码在文件中地址的偏移为0x1E,加上org指定的地址值,则第8行指令编译出来的BootMessage所占空间存储的数值应该是0x7C1E,用二进制文件查看器查看,如下图:这里写图片描述
其中的B8 1E 7C机器码对应的就是第8行的mov ax,BootMessage指令。
如果我们去掉org这条指令编译之后,得到的机器码,如下图:这里写图片描述
可以看出其中表示的地址偏移值为0x001E。
org伪指令其实仅仅是个开始,在学习Orange’s过程中问题很多,前前后后我看过很多遍的书,每次重看都有新的收获,但是还有很多搞不明白的,所以想写出来,既与大家分享了学习经验也想获得一些指点

阅读更多
文章标签: 操作系统 汇编 org
个人分类: Orange-s学习
上一篇收拾心情,准备出发
下一篇Orange’s学习笔记(二)
想对作者说点什么? 我来说一句

免费的vpn小白兔软件

2011年06月08日 978KB 下载

没有更多推荐了,返回首页

关闭
关闭