这段汇编怎么ld过不了?

发布于 2022-09-09 07:42:46 字数 2316 浏览 9 评论 6

本帖最后由 yylogo 于 2010-08-01 14:58 编辑

这段汇编怎么ld过不了?

  1. BOOTSEG        = 0x07C0
  2. SYSSEG        = 0x0000
  3. SYSLEN        = 17
  4. .code16
  5. .text
  6. .global _start
  7. _start:
  8.         movw $BOOTSEG, %ax
  9.         movw %ax, %cs
  10.         movw %ax, %ds
  11.         movw %ax, %ss
  12.         movw $0x400, %sp
  13. load_system:
  14.         movw $0x0000, %dx
  15.         movw $0x0002, %cx
  16.         movw $SYSSEG, %ax
  17.         movw %es, %ax
  18.         xor %bx, %bx
  19.         movw $0x200+SYSLEN, %ax
  20.         int $0x13
  21.         jnc ok_lode
  22. die:        jmp die
  23. ok_lode:
  24.         lidt idt_48
  25.         lgdt gdt_48
  26.         iret
  27. .data
  28. idt_48:        .word        0, 0, 0
  29. gdt:        .word        0, 0, 0, 0
  30.         .word        0x07FF
  31.         .word        0x0000
  32.         .word        0x9A00
  33.         .word        0x00C0
  34.         .word        0x07FF
  35.         .word        0x0000
  36.         .word        0x9200
  37.         .word        0x00C0
  38. gdt_48:        .word        0x7ff, 0x07c0+gdt, 0
  39. .org 510
  40.         .word        0xAA55

复制代码

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

深白境迁sunset 2022-09-19 21:32:19

链接时,加个参数-Ttext=0x00

与风相奔跑 2022-09-19 19:19:42

回复 5# yylogo

http://hi.baidu.com/darklighting ... 054dd1fc1f1065.html

有篇文章Making plain binary files using a C compiler不错
这里有中文版http://www.mlxos.org/docs.html

薆情海 2022-09-15 20:55:10

本帖最后由 yylogo 于 2010-08-02 09:48 编辑

回复 4# openspace

     没用额..
代码如下:

  1. BOOTSEG        = 0x07C0
  2. SYSSEG        = 0x0000
  3. SYSLEN        = 17
  4. .code16
  5. .text
  6. .global _start, load_system, die, ok_lode, idt_48, gdt_48, gdt
  7. _start:
  8.         movw $BOOTSEG, %ax
  9.         movw %ax, %cs
  10.         movw %ax, %ds
  11.         movw %ax, %ss
  12.         movw $0x400, %sp
  13. load_system:
  14.         movw $0x0000, %dx
  15.         movw $0x0002, %cx
  16.         movw $SYSSEG, %ax
  17.         movw %es, %ax
  18.         xor %bx, %bx
  19.         movw $0x200+SYSLEN, %ax
  20.         int $0x13
  21.         jnc ok_lode
  22. die:        jmp die
  23. ok_lode:
  24.         lidt idt_48
  25.         lgdt gdt_48
  26.         iret
  27. .data
  28. idt_48:        .word        0, 0, 0
  29. gdt:        .word        0, 0, 0, 0
  30.         .word        0x07FF
  31.         .word        0x0000
  32.         .word        0x9A00
  33.         .word        0x00C0
  34.         .word        0x07FF
  35.         .word        0x0000
  36.         .word        0x9200
  37.         .word        0x00C0
  38. gdt_48:        .word        0x7ff, 0x07c0+gdt, 0
  39. .org 510
  40.         .word        0xAA55

复制代码提示如下:

yylogo@ubuntu:~$ as boot.s -o boot.o
yylogo@ubuntu:~$ ld boot.o -o boot
boot.o: In function `ok_lode':
(.text+0x2: relocation truncated to fit: R_X86_64_16 against symbol `idt_48' d
efined in .data section in boot.o
boot.o: In function `ok_lode':
(.text+0x2d): relocation truncated to fit: R_X86_64_16 against symbol `gdt_48' d
efined in .data section in boot.o
boot.o: In function `gdt_48':
(.data+0x20): relocation truncated to fit: R_X86_64_16 against symbol `gdt' defi
ned in .data section in boot.o

一身软味 2022-09-15 02:37:45

用ld解析的符号需要用.global声明
你把29行的.data去掉或者用.global把那些label声明一下试试

爱的那么颓废 2022-09-13 03:34:30

回复 2# openspace

   

yylogo@ubuntu:~$ as boot.s -o boot.o
yylogo@ubuntu:~$ ld boot.o -o boot
boot.o: In function `ok_lode':
(.text+0x25): relocation truncated to fit: R_X86_64_16 against `.data'
boot.o: In function `ok_lode':
(.text+0x2a): relocation truncated to fit: R_X86_64_16 against `.data'
boot.o: In function `gdt_48':
(.data+0x20): relocation truncated to fit: R_X86_64_16 against `.data'

自我难过 2022-09-11 22:11:47

把出错信息贴一下

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文