Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/29: Рейтинг темы: голосов - 29, средняя оценка - 4.52
79 / 67 / 28
Регистрация: 22.04.2016
Сообщений: 384
1

Действия над массивами слов и массивами байтов

22.05.2017, 20:54. Показов 5364. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть задание:
Даны два массива: массив слов MS и массив байтов MB. Установить "1" в 4-ых и 6-тых битах всех элементов массива MB. Коды отрицательных слов MS сдвинуть логически вправо. Разделить со знаком нечетные элементы массива слов на четные элементы массива байтов. Образовать дополнительные массивы частных и остатков деления. Определить сумму элементов массива частных и ее знак. Превышают ли остатки от деления число 10?

Накинул только вот такое начало программы. Дальше, не знаю, что да как делать.
Прошу помочь информацией, ссылками, примерами кода. Буду очень благодарен!
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
.model small
.stack 100h
 
.data
        MB   db      1, 2, 40, 122, 133, 245, 144, 111, 55      ; массив байтов
    MS   dw      55, 111, 144, -245, 133, 122, -40, 2, 1        ; массив слов
 
     
        MsgOverflow     db      'Overflow', 0Dh, 0Ah, '$'
        MsgNothing      db      'Find Nothing', 0Dh, 0Ah, '$'
.code
main:
    ; Действия
 
 
@@Exit:
        mov  ax, 4C00h                   ; выход в DOS
        int  21h
end     main
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.05.2017, 20:54
Ответы с готовыми решениями:

Заданы два массива X[10] и Y[12], состоящие из целых чисел со знаком в формате слова. Выполнить над массивами действия согласно индивидуальному задани
Общая часть. Заданы два массива X и Y, состоящие из целых чисел со знаком в формате...

Действия над массивами
Здесь нет вопроса действий и операций над элементами, тут вопрос о возможных действия и операциях...

Действия над массивами
Помогите, пожалуйста, написать код на VBA. Выполнить действия над...

Выполнить действия над массивами
Программа должна обрабатывать любые числа для произвольной размерности N . Програмаа должна...

7
Модератор
Эксперт по электронике
8533 / 4386 / 1650
Регистрация: 01.02.2015
Сообщений: 13,630
Записей в блоге: 9
22.05.2017, 22:11 2
Попробуйте самостоятельно - ведь вы уже разбирались в командах.

Добавлено через 1 минуту
Шаблон exe программы
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
LOCALS
 
.model small
 
.stack 100h
 
.data
        CrLf    db      0Dh, 0Ah, '$'
 
.code
 
main    proc
        mov     ax,     @data
        mov     ds,     ax
 
        mov     ax,     4C00h
        int     21h
main    endp
 
end     main
Добавлено через 3 минуты
Организация цикла по всему массиву MB
Assembler
1
2
3
4
5
6
7
    lea si, MB ;si - указатель на массив MB
    mov cx, 9 ;длина массива MB
@@For1:
      mov al, [si]
      ............ какие-то действия
      add si, 1 ;увеличение на размер одного элемента массива
    loop @@For1
Добавлено через 1 минуту
Организация цикла по всему массиву MS
Assembler
1
2
3
4
5
6
7
    lea si, MS ;si - указатель на массив MS
    mov cx, 9 ;длина массива MS
@@For2:
      mov al, [si]
      ............ какие-то действия
      add si, 2 ;увеличение на размер одного элемента массива
    loop @@For2
1
79 / 67 / 28
Регистрация: 22.04.2016
Сообщений: 384
23.05.2017, 21:06  [ТС] 3
ФедосеевПавел, Сделал пока так? Есть что-то правильного? Хоть в сторону движусь?
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
.model small
.stack 100h
 
.data
        MB   db      1, 2, 40, 122, 133, 245, 144, 111, 55      ; массив байтов
        MS   dw      55, 111, 144, -245, 133, 122, -40, 2, 1        ; массив слов
 
     
       
.code
main:
        mov     ax,     @data
        mov     ds,     ax
 
    lea si, MB ;si - указатель на массив MB
        mov cx, 9 ;длина массива MB
@@For1:
        mov al, [si]
 
        cmp cx, 4
        mov al, 1
    cmp cx, 6
        mov al, 1
    
        add si, 1 ;увеличение на размер одного элемента массива
    loop @@For1
 
 
    lea si, MS ;si - указатель на массив MS
    mov cx, 9 ;длина массива MS
@@For2:
      mov al, [si]
      jl @@ZERO
      add si, 2 ;увеличение на размер одного элемента массива
    loop @@For2
 
@@ZERO
    shr 1   
 
 
@@Exit:
        mov  ax, 4C00h                   ; выход в DOS
        int  21h
end     main
Добавлено через 20 часов 48 минут
upd
0
Модератор
Эксперт по электронике
8533 / 4386 / 1650
Регистрация: 01.02.2015
Сообщений: 13,630
Записей в блоге: 9
23.05.2017, 21:27 4
Это первые два пункта задания.
Про деление не понял - делить нечётные элементы массива слов (брать с нечётными индексами или именно элементы).
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
LOCALS
 
.model small
 
.stack 100h
 
.data
    MB      db      1, 2, 40, 122, 133, 245, 144, 111, 55      ; массив байтов
    MS      dw      55, 111, 144, -245, 133, 122, -40, 2, 1        ; массив слов
.code
 
main    proc
        mov     ax,     @data
        mov     ds,     ax
 
 
    lea     si,     MB ;si - указатель на массив MB
    mov     cx,     9 ;длина массива MB
@@For1:
    or  [si],   byte ptr 01010000b  ;установить 4 и 6 биты
    add     si,     1 ;увеличение на размер одного элемента массива
    loop    @@For1
 
    lea     si,     MS ;si - указатель на массив MS
    mov     cx,     9 ;длина массива MS
@@For2:
    mov     ax,     [si]
    or  ax, ax
    jns @@Next2
    shr ax, 1   ;Коды отрицательных слов MS
    mov [si],   ax  ;сдвинуть логически вправо.
@@Next2:
    add     si,     2 ;увеличение на размер одного элемента массива
    loop    @@For2
 
        mov     ax,     4C00h
        int     21h
main    endp
 
end     main
1
79 / 67 / 28
Регистрация: 22.04.2016
Сообщений: 384
23.05.2017, 21:34  [ТС] 5
ФедосеевПавел,
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Про деление не понял - делить нечётные элементы массива слов (брать с нечётными индексами или именно элементы).
Лично я понял, что нужно брать с нечетными индексами.
0
Модератор
Эксперт по электронике
8533 / 4386 / 1650
Регистрация: 01.02.2015
Сообщений: 13,630
Записей в блоге: 9
23.05.2017, 21:39 6
Пусть так. Пробуйте завершить программу. Для справок по операторам - есть Электронный учебник
1
79 / 67 / 28
Регистрация: 22.04.2016
Сообщений: 384
24.05.2017, 17:48  [ТС] 7
ФедосеевПавел, Пока продвинулся вот так. Правильно?
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
LOCALS
 
.model small
 
.stack 100h
 
.data
    MB      db      1, 2, 40, 122, 133, 245, 144, 111, 55      ; массив байтов
    MS      dw      55, 111, 144, -245, 133, 122, -40, 2, 1        ; массив слов
.code
 
main    proc
        mov     ax,     @data
        mov     ds,     ax
 
 
    lea     si,     MB ;si - указатель на массив MB
    mov     cx,     9 ;длина массива MB
@@For1:
    or  [si],   byte ptr 01010000b  ;установить 4 и 6 биты
    add     si,     1 ;увеличение на размер одного элемента массива
    loop    @@For1
 
    lea     si,     MS ;si - указатель на массив MS
    mov     cx,     9 ;длина массива MS
@@For2:
    mov     ax,     [si]
    or  ax, ax
    jns @@Next2
    shr ax, 1   ;Коды отрицательных слов MS
    mov [si],   ax  ;сдвинуть логически вправо.
@@Next2:
    add     si,     2 ;увеличение на размер одного элемента массива
    loop    @@For2
 
    
    lea si, MS  ; si - указатель на массив MS
    lea di, MB  ; si - указатель на массив MB
    mov cx, 9   ; Длина массивов
@@For3:
    mov ax, [si]
    or  ax, ax  ; Если элемент массива MS отрицательный
    js  @@Next3     ; Переходим на метку Next3
    add si, 2   ; Иначе увеличиваем на размер одного элемента массива MS
@@Next3:
    mov bx, [di]
    or  bx, bx  ; Если элемент массива MB положительный
    jns @@Next4     ; Переходим на метку Next4
    add di, 2   ; Иначе увеличиваем на размер одного элемента массива MB
@@Next4:
    idiv    bx      ; Производим знаковое деление на bx
    loop    @@For3
 
        mov     ax,     4C00h
        int     21h
main    endp
 
end     main
0
Модератор
Эксперт по электронике
8533 / 4386 / 1650
Регистрация: 01.02.2015
Сообщений: 13,630
Записей в блоге: 9
27.05.2017, 11:20 8
Лучший ответ Сообщение было отмечено igdev как решение

Решение

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
LOCALS
 
.model small
 
.stack 100h
 
.data
 
    Len     equ     9                                           ;длина массивов
    MB      db      1, 2, 40, 122, 133, 245, 144, 111, 55       ; массив байтов
    MS      dw      55, 111, 144, -245, 133, 122, -40, 2, 1     ; массив слов
 
    MC      dw      Len/2 dup(?)                                ; массив частных
    MO      dw      Len/2 dup(?)                                ; массив остатков
 
    Sum     db      0                                           ; сумма частных
 
    Positive            db      'Positive', 0Dh, 0Ah, '$'
    Negative            db      'Negative', 0Dh, 0Ah, '$'
    Prevyshaut          db      'Greater', 0Dh, 0Ah, '$'
    NePrevyshaut        db      'Not greater', 0Dh, 0Ah, '$'
.code
 
main    proc
        mov     ax,     @data
        mov     ds,     ax
 
        ;Установить "1" в 4-ых и 6-тых битах всех элементов массива MB.
        lea     si,     MB  ;si - указатель на массив MB
        mov     cx,     Len ;длина массива MB
@@For1:
        or  [si],       byte ptr 01010000b  ;установить 4 и 6 биты
        add     si,     1   ;увеличение на размер одного элемента массива
        loop    @@For1
 
        ;Коды отрицательных слов MS сдвинуть логически вправо.
        lea     si,     MS  ;si - указатель на массив MS
        mov     cx,     Len ;длина массива MS
@@For2:
        mov     ax,     [si]
        or      ax,     ax
        jns     @@Next2
        shr     ax,     1   ;Коды отрицательных слов MS
        mov     [si],   ax  ;сдвинуть логически вправо.
@@Next2:
        add     si,     2   ;увеличение на размер одного элемента массива
        loop    @@For2
 
        ;Разделить со знаком нечетные элементы массива слов на четные элементы массива байтов.
        ;Образовать дополнительные массивы частных и остатков деления.
        lea     si,     MS  ; si - указатель на массив MS
        lea     di,     MB  ; di - указатель на массив MB
        mov     bx,     0   ; bx - индекс в массивах остатков и частных
        add     di,     1   ; di - на чётный индекс элемента массива
        mov     cx,     Len/2 ; Длина массивов
@@For3:
        push    bx
        mov     al,     [di]
        cbw
        mov     bx,     ax
        mov     ax,     [si]
        cwd
        add     si,     4   ; увеличиваем на размер двух элементов массива MS
        add     di,     2   ; увеличиваем на размер двух элементов массива MB
 
        idiv    bx          ; Производим знаковое деление (dx:ax) на bx
        pop     bx
        mov     MC[bx], ax
        mov     MO[bx], dx
        add     bx,     1   ;увеличение на размер одного элемента массива MO или MC
        loop    @@For3
 
        ;Определить сумму элементов массива частных и ее знак.
        mov     al,     0   ;сумма элементов массива
        mov     cx,     Len/2 ; Длина массива
        lea     si,     MC
@@For4:
        add     al,     [si]
        add     si,     1   ;увеличение на размер одного элемента массива MC
        loop    @@For4
        mov     Sum,    al
        or      al,     al
        js      @@Negative
        mov     ah,     09h
        lea     dx,     Positive
        int     21h
        jmp     @@End5
@@Negative:
        mov     ah,     09h
        lea     dx,     Negative
        int     21h
@@End5:
 
        ;Превышают ли остатки от деления число 10?
        lea     si,     MO
        mov     cx,     Len/2
@@For5:
        cmp     [si],   word ptr 10
        jg      @@Greater
        loop    @@For5
        mov     ah,     09h
        lea     dx,     NePrevyshaut
        int     21h
        jmp     @@Exit
 
@@Greater:
        mov     ah,     09h
        lea     dx,     Prevyshaut
        int     21h
 
@@Exit:
        mov     ax,     4C00h
        int     21h
main    endp
 
end     main
1
27.05.2017, 11:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.05.2017, 11:20
Помогаю со студенческими работами здесь

Выполнить действия над массивами
. В таблице при формулировании задания для разъяснения его сути справа отображены примеры исходных...

Арифметические действия над массивами
Имеется файл, в котором содержится размерность массива и его элементы. Вычислить: 1) произведение...

Выполнить действия над массивами
Выполнить действия над массивами.Программа,естественно, должна обрабатывать любые числа для...

Выполнить действия над массивами. Delphi
Заполнить массив Y таким образом, чтобы в нем сначала оказалась вторая половина исходно-го массива...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru