Hirdetés

Új hozzászólás Aktív témák

  • Jester01

    veterán

    válasz Gabee001 #238 üzenetére

    64 bites gas assemblerrel pl. a következő egy megoldás lehet magára a konverzióra:

    .text
    .globl getroman
    .type getroman, @function
    getroman:
    movq %rax, %rbx
    movq $numbers, %rdx
    LOOP1:
    movq %cs:(%rdx), %rdi
    or %rdi, %rdi
    jnz OK
    movb $'?', %al
    jmp DONE
    OK:
    movq %rbx, %rsi
    LOOP2:
    movb (%rsi), %al
    cmpb %cs:(%rdi), %al
    je MATCH
    addq $8, %rdx
    jmp LOOP1
    MATCH:
    cmpb $'\n', %al
    movb %cs:1(%rdi), %al
    je DONE
    incq %rsi
    incq %rdi
    jmp LOOP2
    DONE:
    ret

    numbers:
    .quad r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, 0
    r1: .ascii "I\n1"
    r2: .ascii "II\n2"
    r3: .ascii "III\n3"
    r4: .ascii "IV\n4"
    r5: .ascii "V\n5"
    r6: .ascii "VI\n6"
    r7: .ascii "VII\n7"
    r8: .ascii "VIII\n8"
    r9: .ascii "IX\n9"
    r10: .ascii "X\nA"

    A függvényt C-ből a char getroman(const char* s) formában lehet hívni. (Bemeneti pointer a rax regiszterben, kimeneti karakter az al regiszterben.) Alakítsd át igényeid szerint. A MATCH címke előtt van egy add utasítás, oda a megfelelő pointer méretet kell tenni. HTH.

    Jester

Új hozzászólás Aktív témák