"times 510-($-$$) db 0" 无法使用我的代码
"times 510-($-$$) db 0" not working with my codes
下面是可以正常工作并生成 512 位文件的代码
org 07c00h
mov ax, cs
mov ds, ax
mov es, ax
call DispStr
jmp $
DispStr:
mov ax, BootMessage
mov bp, ax
mov cx, 16
mov ax, 01301h
mov bx, 000ch
mov dl, 0
int 10h
ret
BootMessage: db "Hello, OS world!"
times 510-($-$) db 0
dw 0xaa55
然后我添加几行,bin 文件是 540 位,这没有意义,解决这个问题的唯一方法是 do times 380 db 0 ,我计算
下面是废话代码
[BITS 16]
[ORG 0x7c00]
jmp Main
PrintTill0:
lodsb
cmp al,0
je Return
mov ah,0eh
int 10h
jmp PrintTill0
PrintWithLength:
mov ah,13h
int 10h
jmp Return
Return:
ret
Main:
mov si,msg1
call PrintTill0
cli
push SEGment msg2
pop es
mov bp,msg2
sti
loop1:
mov cx,9
call PrintWithLength
inc bl
jmp loop1
cli
hlt
msg1: db "Hello, AInoob~~~",0Dh,0Ah,"The future is in your hand, so, what do you want to do?",0Dh,0Ah,0h
msg2: db "AInoob~~~"
times 510-($-$) db 0
dw 0xAA55
谁能告诉我这是怎么回事?这真的让我发疯
您似乎在尝试将 msg2
的分段基数存储到 es
中,而您要查找的关键字只是 SEG
,而不是 [=14] =].不幸的是,平面二进制输出不支持这个,所以你需要一个不同的解决方案。
相反,因为您知道 msg2
不会超出地址 0x10000
,您可以将 es
设置为零:
xor ax, ax
mov es, ax
下面是可以正常工作并生成 512 位文件的代码
org 07c00h
mov ax, cs
mov ds, ax
mov es, ax
call DispStr
jmp $
DispStr:
mov ax, BootMessage
mov bp, ax
mov cx, 16
mov ax, 01301h
mov bx, 000ch
mov dl, 0
int 10h
ret
BootMessage: db "Hello, OS world!"
times 510-($-$) db 0
dw 0xaa55
然后我添加几行,bin 文件是 540 位,这没有意义,解决这个问题的唯一方法是 do times 380 db 0 ,我计算
下面是废话代码
[BITS 16]
[ORG 0x7c00]
jmp Main
PrintTill0:
lodsb
cmp al,0
je Return
mov ah,0eh
int 10h
jmp PrintTill0
PrintWithLength:
mov ah,13h
int 10h
jmp Return
Return:
ret
Main:
mov si,msg1
call PrintTill0
cli
push SEGment msg2
pop es
mov bp,msg2
sti
loop1:
mov cx,9
call PrintWithLength
inc bl
jmp loop1
cli
hlt
msg1: db "Hello, AInoob~~~",0Dh,0Ah,"The future is in your hand, so, what do you want to do?",0Dh,0Ah,0h
msg2: db "AInoob~~~"
times 510-($-$) db 0
dw 0xAA55
谁能告诉我这是怎么回事?这真的让我发疯
您似乎在尝试将 msg2
的分段基数存储到 es
中,而您要查找的关键字只是 SEG
,而不是 [=14] =].不幸的是,平面二进制输出不支持这个,所以你需要一个不同的解决方案。
相反,因为您知道 msg2
不会超出地址 0x10000
,您可以将 es
设置为零:
xor ax, ax
mov es, ax