【问题标题】:"times 510-($-$$) db 0" not working with my codes“times 510-($-$$) db 0”不适用于我的代码
【发布时间】:2015-01-01 05:41:51
【问题描述】:

所以运行良好并生成 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

谁能告诉我发生了什么事?这真的让我发疯了

【问题讨论】:

    标签: assembly nasm


    【解决方案1】:

    您似乎正在尝试将msg2 的段基存储到es,而您要查找的关键字只是SEG,而不是SEGMENT。不幸的是,平面二进制输出不支持这一点,因此您需要一个不同的解决方案。

    相反,既然您知道msg2 不会超出地址0x10000,您可以将es 设置为零:

    xor ax, ax
    mov es, ax
    

    【讨论】:

    • 感谢您的回答,但是当我尝试 SEG 时,它说二进制输出格式不支持段基础引用,无论我是否删除 Times xxx db 0。
    猜你喜欢
    • 2016-07-03
    • 2013-01-31
    • 2015-12-10
    • 2016-01-01
    • 2014-05-25
    • 2020-11-27
    • 1970-01-01
    • 2017-10-29
    • 1970-01-01
    相关资源
    最近更新 更多