LINUX.ORG.RU

Как в Debug-отладчик на Assambler ввести отрицательные числа?

 


0

1

При вводе с помощью, например е400 минуса просто перебрасывает на другую строку. Задача состоит в том, чтобы написать программу, которая сможет находить сумму положительных элементов массива, содержащего 7 элементов 1,-2, 7, 4,-5,-3, 1


Отрицательные числа это со старшим битом 1, для байта 0xFF это -1, можешь проверить 1+0xFF=0

ilovewindows ★★★★★
()

изи жеж:

.intel_syntax noprefix
.global _start

SYS_exit   = 60
SYS_write  = 1

.data
    
    array:          .byte  109, 2, -78, 117, -120, 79, 115, -9, -3, 91
    array_end:
    str:            .zero   10
    newlinechar:    .byte   '\n'

.text
    
    exit:
        mov     rax,    SYS_exit
        mov     edi,    0
        syscall
    
    print:
        mov     rsi,    offset newlinechar
        mov     rcx,    10
        
        1:
            mov     rdx,    0
            div     rcx
            add     rdx,    0x30
            dec     rsi                             # buffer
            mov     byte ptr [rsi], dl
            cmp     rax,    0
            jne     1b
            
        mov     rax,    SYS_write
        mov     rdi,    1                           # stdout
        mov     rdx,    offset newlinechar + 1
        sub     rdx,    rsi                         # length
        syscall
        ret
    
    _start:
        mov     rcx,    array_end - array
        mov     rsi,    offset array
        
        1:
            mov     dl,     byte ptr [rsi + rcx - 1]
            test    dl,     dl                      # мяско
            cmovs   rdx,    rdi                     # мяско
            add     rax,    rdx
            dec     rcx
            jne     1b
        
        call    print
        jmp     exit

запускать так:

$ as possum.S -o possum.o && ld possum.o -o possum && ./possum
513

в rdi, там где мяско, будет 0, если компилять без glibc.

anonymous
()
Ответ на: комментарий от quester

/честно, от этого ответа я аж взоржал, -бу-га-гага-га!. (-zero).Ну, а как правильный «бе-эз-дешник» отвечу на т\с вот такой нетривиальщиной: рX использовать (имею ввиду конструкции типа Qt Creator с QTable / ну, естественно: куб и, в нём ( невидимые так называемо ) QString xs ys ; в самом коде:(*pY)[ys]=-1; (*pX)[xs]=-1; (строка энда).

anonymous
()
Ответ на: комментарий от quester

Нет, спасибо, ЭдиЭма/-ов с брюсомли/-ами//-и нам уже бывш.\настоящ. чё-то кастовать не хочется..

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.