Другие языки программирования и технологии

Помогите написать программу на ассемблере по условию

"Найти произведение отрицательных элементов Массива 1,-2,7,4,-5,-3,1"
.model small
.386
.code
N172940783:
    mov dx, @data
    mov ds, dx
    mov cx, Len
    xor ebx, ebx
    mov edi, 1
    mov si, offset Array
DoLoop:
    lodsb
    movsx eax, al
    test eax, eax
    jns Next
    sets bl
    imul edi
    mov edi, eax
Next:
    loop DoLoop
    mov ah, 9
    mov dx, offset Result
    int 21h
    mov eax, edi
    imul ebx
    call WriteDec
    mov ah, 7
    int 21h
    mov ah, 4Ch
    int 21h
   
WriteDec:
    push dx
    test eax, eax
    jns NoSign
    push eax
    mov al, 2Dh
    int 29h
    pop eax
    neg eax
NoSign:
    xor edx, edx
    mov ebx, 10
    div ebx
    or dl, 30h
    test eax, eax
    jz WriteEnd
    call WriteDec
WriteEnd:
    mov al, dl
    int 29h
    pop dx
    ret

.data
  Array db 1, -2, 7, 4, -5, -3, 1
  Len equ $ - Array
  Result db "Произведение отрицательных элементов = $"

.stack 100h
    end N172940783
Алексей Шемякин
Алексей Шемякин
51 590
Лучший ответ
В чём проблема? Пробегаешь по массиву, для каждого элемента сверяешь jb 0, и множишь.
Сергей Николаевич Не получится ))
Инструкция jb проверяет состояние только флага переноса CF, а он при сравнении с нулём не установится никогда.
Для работы со знаковыми числами нужно проверять флаги SF и OF.
А лучше не сравнивать с нулём, а проверять знаковый разряд числа.