极度精简之13行的Hello World OS ,高手莫入,初学者可进

cxdzxc 2010-05-05 12:53:26
...全文
279 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
cxdzxc 2010-05-07
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 cxdzxc 的回复:]
mov ax,0b800h
mov es,ax
mov ax,0201h
mov cx,02h
int 13h
jmp $
tian0: times (510-($-$$)) db 0
BootMessage: db 55h,0aah, "H e l l o , O S w o r l d ! "

;---------------------------------
8行,应……
[/Quote]
这个代码是修改了fdisksys的代码,所以版权归(隔壁那支猫)所有,嘿嘿^_^
cxdzxc 2010-05-07
  • 打赏
  • 举报
回复
mov ax,0b800h
mov es,ax
mov ax,0201h
mov cx,02h
int 13h
jmp $
tian0: times (510-($-$$)) db 0
BootMessage: db 55h,0aah, "H e l l o , O S w o r l d ! "

;---------------------------------
8行,应该是极限了吧,哎,上次也说过极限,结果还是被打破了,不知道这次还能不能被打破记录,最后两行有可能能合并,但是我不知道该怎么去做,汗!!!
  • 打赏
  • 举报
回复
都是大牛B!
cxdzxc 2010-05-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 c001u1u 的回复:]
不懂楼下的说什么......请详解
[/Quote]
这个程序是要放到引导区里执行的,在引导区代码运行时,OS还没有被加载呢,哪里会有DOS的INT 21H可用呢,唯一可用的就是BIOS中断了,但使用BIOS中断,还不如直接操作显存来得更快更直接了
fdisksys 2010-05-06
  • 打赏
  • 举报
回复
准确的说我的是10行,伪指令是4个,汇编指令是6行.不然我可以实现一行
fdisksys 2010-05-06
  • 打赏
  • 举报
回复
nanlingcg 2010-05-06
  • 打赏
  • 举报
回复
如果再减,就只好减变量了.
两个变量改成一个.
CX改成赋立即数.为了追求程序精简只好麻烦写程序的人数下BootMessage的字节或字数了...
Beyond_cn 2010-05-06
  • 打赏
  • 举报
回复
学习。。。
cxdzxc 2010-05-06
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 cxdzxc 的回复:]
mov ax,0b800h
mov es,ax
xor di,di
mov si,BootMessage+7c00h ;NASM 不支持offset伪指令,取偏移地址直接使用标号就可以了
mov ah,0f4H
mov cx,dizhi-BootMessage
xianshi: repz movsb
jmp $
BootMessage: times (1) db "H e l l ……
[/Quote]
;--------------------------------------

有一行忘删除了,实际的只需要9行,如下:
mov ax,0b800h
mov es,ax
xor di,di
mov si,BootMessage+7c00h ;NASM 不支持offset伪指令,取偏移地址直接使用标号就可以了
mov cx,dizhi-BootMessage
xianshi: repz movsb
jmp $
BootMessage: times (1) db "H e l l o , O S w o r l d ! "
dizhi times (512-($-$$))/2 dw 0aa55h
cxdzxc 2010-05-06
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 fdisksys 的回复:]
Assembly code
mov ax,0b800h
mov es,ax
mov ah,0201h
mov cx,02h
int 13h
jmp $
dizhi times (512-($-$$))/2 dw 0aa55h times (1) db "H e l l o , O S w o r l d ! "

7行
[/Quote]
C:\Documents and Settings\Administrator\桌面>nasm boot.asm -o boot.bin
boot.asm:7: error: comma expected after operand 1
fdisksys 2010-05-06
  • 打赏
  • 举报
回复
mov ax,0b800h
mov es,ax
mov ah,0201h
mov cx,02h
int 13h
jmp $
dizhi times (512-($-$$))/2 dw 0aa55h times (1) db "H e l l o , O S w o r l d ! "

7行
cxdzxc 2010-05-06
  • 打赏
  • 举报
回复
注:纯娱乐,正常情况下没人这样写的,嘿嘿^_^
cxdzxc 2010-05-06
  • 打赏
  • 举报
回复
mov ax,0b800h
mov es,ax
xor di,di
mov si,BootMessage+7c00h ;NASM 不支持offset伪指令,取偏移地址直接使用标号就可以了
mov ah,0f4H
mov cx,dizhi-BootMessage
xianshi: repz movsb
jmp $
BootMessage: times (1) db "H e l l o , O S w o r l d ! "
dizhi times (512-($-$$))/2 dw 0aa55h

;-----------------------------------------
10行,还能更少么?应该是极限了吧,拿DB机器码来说事,那就没意思了
周靖峰 2010-05-05
  • 打赏
  • 举报
回复
这么牛,我怎么看不懂啊?有高手可以解释一下吗?
fdisksys 2010-05-05
  • 打赏
  • 举报
回复

.text
.code16
.globl _start
_start:
movw $0xb800,%es
movw $0x20,%ax
int $0x13
jmp .
ORG=510-.
.rept ORG
0
.endr
.byte 0X55,0XAA
.ascii "H\ne\nl\nl\no\n \nW\n\no\nr\nl\nd!"

悲剧一个
fdisksys 2010-05-05
  • 打赏
  • 举报
回复

.text
.code16
.globl _start
_start:
movw $0xb800,%es
movw $0x20,%ax
int $0x13
jmp .
ORG=.-_START
.rept ORG
0
.endr
.byte 0X55,0XAA
.ascii "H\ne\nl\nl\no\n \nW\n\no\nr\nl\nd!"
nanlingcg 2010-05-05
  • 打赏
  • 举报
回复
上面那个回复:CX要除2...
fdisksys 2010-05-05
  • 打赏
  • 举报
回复
注意,人家要显示Hello World!才算
nanlingcg 2010-05-05
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 jennyvenus 的回复:]

直接在7x00处db一些二进制数据也行,肯定可以少于10行。
[/Quote]
也就是干脆全搞成机器码,一下都DB去...
您这更厉害!!!
用户 昵称 2010-05-05
  • 打赏
  • 举报
回复
直接在7x00处db一些二进制数据也行,肯定可以少于10行。
加载更多回复(9)

21,459

社区成员

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

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