Обработка целочисленного массива. - Assembler (223076)

Формулировка задачи:

Создать массив из 10 слов. Образовать из него два массива старших и младших байтов. В массиве старших байтов инвертировать все отрицательные числа и найти сумму S элементов полученного массива. Байты массива младших байтов сдвинуть логически влево на один разряд и инвертировать отрицательные из них. В полученном массиве подсчитать число N байтов, меньших числа 50. Найти знаковое частное S/N и определить, имеется ли в коде остатка "0" в 4-ом бите. Покажите, пожалуйста, как создать эти два массива

Код к задаче: «Обработка целочисленного массива. - Assembler (223076)»

textual
LOCALS
 
.model small
 
.stack 100h
 
.data
        A       dw      -4, 10, -200, 300, -800, 1000, 6, -7765, 5599, 8888
        LenA    equ     ($-A)/2
        LoByte  db      LenA dup(?)
        HiByte  db      LenA dup(?)
        S       dw      ?
.code
 
main    proc
        mov     ax,     @data
        mov     ds,     ax
 
        ;Образовать из него два массива старших и младших байтов.
        lea     si,     A
        mov     cx,     LenA
        mov     di,     0
@@1:
        mov     ax,     [si]
        mov     LoByte[di], al
        mov     HiByte[di], ah
        add     si,     2
        add     di,     1
        loop    @@1
 
        ;В массиве старших байтов инвертировать все отрицательные числа
        ;и найти сумму S элементов полученного массива.
        lea     si,     HiByte
        mov     cx,     LenA
        mov     bx,     0       ;сумма
@@2:
        mov     al,     [si]
        or      al,     al
        jns     @@Positive
        not     al
        mov     [si],   al
@@Positive:
        cbw
        add     bx,     ax
        add     si,     1
        loop    @@2
        mov     S,      bx
 
 
 
        mov     ax,     4C00h
        int     21h
main    endp
 
end     main

10   голосов, оценка 4.100 из 5


СОХРАНИТЬ ССЫЛКУ