Orange’s学习笔记(一)

来源:互联网 发布:python macd指标 宽距 编辑:程序博客网 时间:2024/05/22 00:36

伪汇编指令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号中断    retBootMessage:    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过程中问题很多,前前后后我看过很多遍的书,每次重看都有新的收获,但是还有很多搞不明白的,所以想写出来,既与大家分享了学习经验也想获得一些指点

0 0
原创粉丝点击