RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1575393
Accepted
michk4
michk4
Asked:2024-04-09 20:23:55 +0000 UTC2024-04-09 20:23:55 +0000 UTC 2024-04-09 20:23:55 +0000 UTC

如何减小生成的二进制文件的大小

  • 772

BIOS有一个引导加载程序,二进制文件的大小不应超过512字节,但无论我如何努力,fasm编译器不断生成514字节的二进制文件。

我怀疑问题出在编译器本身,而不是程序中,因为显式优化技术不会以任何方式影响文件大小。

代码如下。

;boot
org 7C00h

start:
    cli             ; interrupt     0
    xor ax, ax      ; ax            null 
    mov ds, ax      ; data seg      null
    mov es, ax      ; es            null
    mov ss, ax      ; stack seg     null
    mov sp, 07C00h  ; top stack     07C00h
    sti             ; interrupt     1
    
    mov ax, 0002h
    int 10h
    
    mov dx, 0h
    call setcur
    
    mov bp, loadmsg
    mov cx, 10
    call print          ;print load message
    
    add dh, 1           ; NEL
    call setcur
    mov bp, contmsg
    mov cx, 23
    call print          ;print continue message
    
    mov ah, 10h
    int 16h
continue:
    cmp al, 0Dh
    jz kernel
    jmp continue
kernel:
    mov ax, 0000h
    mov es, ax 
    mov bx, 500h
    mov ch, ah
    mov cl, 02h
    mov dh, ah
    mov dl, 80h
    mov al, 01h
    mov ah, 02h
    int 13h
    jmp 0000:0500h
;===========methods=========    
setcur:
    mov ah, 02h     ; 02h inter INT10
    xor bh, bh
    int 10h
    ret
print:
    mov bl, 04h
    mov ah, 13h   ; 13h inter INT10
    int 10
    ret
;============data===========
    loadmsg db 'os load', 0 
    contmsg db 'press enter to continue', 0
    
times(7C00h+512)-$ db 0
db 055h, 0AAh

编译器命令

fasm 00.asm boot.bin

它的结论

flat assembler  version 1.73.27  (16384 kilobytes memory)
2 passes, 514 bytes.
ассемблер
  • 1 1 个回答
  • 25 Views

1 个回答

  • Voted
  1. Best Answer
    insolor
    2024-04-09T22:35:42Z2024-04-09T22:35:42Z

    我怀疑问题出在编译器本身,而不是程序中,因为显式优化技术不会以任何方式影响文件大小。

    您只需要至少简单地看一下整个代码。文件末尾有两行。512不会让你产生任何怀疑吗?

    times(7C00h+512)-$ db 0
    db 055h, 0AAh
    

    这里,带有时间的行用零到 512 字节完成了文件,下一行又添加了两个字节 - 结果是 514。要精确地得到 512,您需要将倒数第二行中的 512 更改为 510。或者删除最后一行。

    • 1

相关问题

  • 难以在大会中创建 (for) 语句

  • call 如何使用堆栈?

  • STM32 中的中断/异常向量,汇编器

  • 寄存器和数据大小

  • 请帮助 turbo pascal 程序中的汇编程序

  • 举例说明将字符串输出到屏幕的过程 [关闭]

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5