NASM分段的问题

烟袅许伊 2015-06-11 10:10:51
比如说分好几个段的程序

ORG 07C00H
[section .gdt]
[section .s16]
[section .s32]
dw 0xaa55


怎样使程序的大小保证为512字节?
...全文
793 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
烟袅许伊 2016-02-23
  • 打赏
  • 举报
回复
忘记了,我说的是MASM...
  • 打赏
  • 举报
回复
没那么复杂,你都知道org 7c00h了,直接: ; ... org 07dfeh dw 0xaa55
图灵转世 2015-10-31
  • 打赏
  • 举报
回复
学习中,谢谢分享。
路客尘 2015-10-30
  • 打赏
  • 举报
回复
我的代码


;; bootloader这种程序需要编译成plain flat binary格式
;; CS DS等段寄存器需要自行设置维护
;;

org 07c00h   ; 告诉编译器程序加载到7c00处

 mov ax, cs    ;以下三行指令,使得ds和es两个段寄存器指向与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    ; 结束标志
luckybbs 2015-08-19
  • 打赏
  • 举报
回复
学习学习 再学习
yuexicheng 2015-08-17
  • 打赏
  • 举报
回复
;可以这样来做,这是每个段中都有vstart子句时的做法
section segment1 vstart=0
start1:
``````
segment1_end
len1 equ segment1-start1
section segment2 vstart=0
start2:
``````
segment2_end:
len2 equ segment2_end-start2
section segmentN vstart=0
`````
times 510-(len1+len2+```+lenN) db 0
dw 0xaa55
;可以看得出来你写的是MBR的代码,其实这部分代码就用一个段来写也可以,
分段之后对于字符数量不太好管理,上例中vstart子句后面跟的数可以视情况而定不一定是0
第0章 一些你可能正感到迷惑的问题 1 0.1 操作系统是什么 1 0.2 你想研究到什么程度 2 0.3 写操作系统,哪些需要我来做 2 0.4 软件是如何访问硬件的 2 0.5 应用程序是什么,和操作系统是如何 配合到一起的 3 0.6 为什么称为“陷入”内核 4 0.7 内存访问为什么要分段 4 0.8 代码中为什么分为代码段、数据段? 这和内存访问机制中的段是一回事吗 6 0.9 物理地址、逻辑地址、有效地址、线性 地址、虚拟地址的区别 11 0.10 什么是段重叠 12 0.11 什么是平坦模型 12 0.12 cs、ds这类sreg段寄存器,位宽是 多少 12 0.13 什么是工程,什么是协议 13 0.14 为什么Linux系统下的应用程序不能在 Windows系统下运行 14 0.15 局部变量和函数参数为什么要放在 栈中 14 0.16 为什么说汇编语言比C语言快 15 0.17 先有的语言,还是先有的编译器,第1个 编译器是怎么产生的 16 0.18 编译型程序与解释型程序的区别 19 0.19 什么是大端字节序、小端字节序 19 0.20 BIOS中断、DOS中断、Linux中断的 区别 21 0.21 Section和Segment的区别 25 0.22 什么是魔数 29 0.23 操作系统是如何识别文件系统的 30 0.24 如何控制CPU的下一条指令 30 0.25 指令集、体系结构、微架构、编程 语言 30 0.26 库函数是用户进程与内核的桥梁 33 0.27 转义字符与ASCII码 37 0.28 MBR、EBR、DBR和OBR各是 什么 39 第1章 部署工作环境 42 1.1 工欲善其事,必先利其器 42 1.2 我们需要哪些编译器 42 1.2.1 世界顶级编译器GCC 42 1.2.2 汇编语言编译器新贵NASM 43 1.3 操作系统的宿主环境 43 1.3.1 什么是虚拟机 44 1.3.2 盗梦空间般的开发环境,虚拟机 中再装一个虚拟机 45 1.3.3 virtualBox下载,安装 46 1.3.4 Linux发行版下载 46 1.3.5 Bochs下载安装 46 1.4 配置bochs 48 1.5 运行bochs 49 第2章 编写MBR主引导记录,让我们开始 掌权 52 2.1 计算机的启动过程 52 2.2 软件接力第一棒,BIOS 52 2.2.1 实模式下的1MB内存布局 52 2.2.2 BIOS是如何苏醒的 54 2.2.3 为什么是0x7c00 56 2.3 让MBR先飞一会儿 58 2.3.1 神奇好用的$和$$,令人迷惑的 section 58 2.3.2 NASM简单用法 60 2.3.3 请下一位选手MBR同学做 准备 60 第3章 完善MBR 65 3.1 地址、section、vstart浅尝辄止 65 3.1.1 什么是地址 65 3.1.2 什么是section 67 3.1.3 什么是vstart 68 3.2 CPU的实模式 70 3.2.1 CPU的工作原理 71 3.2.2 实模式下的寄存器 72 3.2.3 实模式下内存分段由来 76 3.2.4 实模式下CPU内存寻址方式 78 3.2.5 栈到底是什么玩意儿 81 3.2.6 实模式下的ret 84 3.2.7 实模式下的call 85 3.2.8 实模式下的jmp 92 3.2.9 标志寄存器flags 97 3.2.10 有条件转移 99 3.2.11 实模式小结 101 3.3 让我们直接对显示器说点什么吧 101 3.3.1 CPU如何与外设通信—IO 接口 101 3.3.2 显卡概述 105

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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