assembly .set指令给出错误无效的操作数(.data和* UND * sections)

时间:2015-05-04 17:58:46

标签: assembly x86-64 gas

我正在学习写一个bootloader。作为实验的一部分,我希望能够将十六进制值打印为字符串。我编写了以下汇编代码,它没有完全实现十六进制到字符串功能。但是,我希望以下代码至少能正确组装。

$ cat print_bios.S 
.file "print_bios.S"

.section .data
.hex_str:
    .ascii "xxxxxxxxxxxxxxxx"
    .set hex_size, .-hex_str

.section .text
    .global .hex_to_string

hex_to_string:
    push %rbp
    mov  %rsp, %rbp

    /*
     * leave speace for local variables
     *
     * 8 byte counter        count   -8
     * 8 byte temp memory    byte    -16
     * 8 byte to store 0xf   tmp     -24
     *
     * Variables on stack
     * 8 first argument      hex_number +8
     * 8 pointer to string   hex_string +16
     * 8 size of string      size       +24
     */

    sub $0x24, %rsp

    /* find number of characters required for string */

    movq 8(%rbp), %rax    /* ax = hex_number */
    movq $0, %rcx
    jmp .L2

.L1:
    shrq $4, %rax          /* rax >>= 4 */
    addq $1, %rcx          /* rcx++ */
.L2:
    testq %rax, %rax       /* while (rax) */
    jne .L1

    /* if (count > size) { return -1; } */
    movq %rcx, -0x4(%rbp)
    cmpq %rcx, 0x12(%rbp)
    jg .ERROR

.out:
    movq $0, %rax
    ret
.ERROR:
    movq $-1, %rax
    ret

    .global _start
_start:
    pushq $0x56A
    pushq hex_string
    pushq hex_size
    call hex_to_string

上面的代码汇编失败,出现以下错误

$ as -o print_bios.o print_bios.S 
print_bios.S: Assembler messages:
print_bios.S: Error: invalid operands (.data and *UND* sections) for `-' when setting `hex_size'

我不确定我理解装配失败的原因。如果有人可以帮助我,那将是件好事。

0 个答案:

没有答案