Форум программистов, компьютерный форум, киберфорум
Assembler: Windows/protected mode
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
244 / 164 / 133
Регистрация: 30.09.2012
Сообщений: 690
1

Инициализировать 2 массива элементами первого

09.02.2016, 22:59. Показов 1378. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток!

Столкнулся со следующей проблемой:
Нужно инициализировать 2 массива (один только положительными элементами, другой только отрицательными) элементами данного массива. И как-то вывести это на экран.
Язык дается, лично мне, достаточно тяжело, поэтому за нелогичные вещи в коде прошу извинить.

Мои попытки:
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
.386
.model flat, stdcall
option casemap :none   
include\masm32\include\windows.inc
include\masm32\include\user32.inc
include\masm32\include\kernel32.inc
includelib\masm32\lib\user32.lib
includelib\masm32\lib\kernel32.lib
 
.data
    str1 db "programm result",0
    str2 db "массив в памяти",0
    mas dw  1,-1,9,-8,-2,7,-6,-3,2,5
    mas_pos dw 10 dup(?)
    mas_neg dw 10 dup(?) 
    i dw 0
    j dw 0
.code
 
start:
xor ax, ax
mov cx, 10
mov esi, 0
 
go:
 
cmp mas[esi], 0
 
jge greater
mov mas_neg[i], mas[esi]
inc i
inc esi
 
loop go
greater:
mov mas_pos[j], mas[esi]
inc j
inc esi
loop go
 
invoke MessageBox, NULL, ADDR str2, addr str1, MB_OK
STOP: invoke ExitProcess, NULL
 
end start
При таком раскладе выдает ошибку при компиляции. Ошибка A2101. Как я понял, это из-за переменных i и j? Как в си\си++ не получится сделать с индексами?

Заранее спасибо!

Добавлено через 33 минуты
В общем, с переменными j и i я явно накосячил.
Попробовал так:
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
.386
.model flat, stdcall
option casemap :none   
include\masm32\include\windows.inc
include\masm32\include\user32.inc
include\masm32\include\kernel32.inc
includelib\masm32\lib\user32.lib
includelib\masm32\lib\kernel32.lib
 
.data
    str1 db "programm result",0
    str2 db "массив в памяти",0
    mas db  1,-1,9,-8,-2,7,-6,-3,2,5
    mas_pos db 10 dup(?)
    mas_neg db 10 dup(?) 
.code
 
start:
xor ax, ax
mov cx, 10
mov si, 0
mov bx, 0
mov di, 0
 
go:
 
cmp mas[si], 0
 
jge greater
mov mas_neg[bx], mas[esi]
inc bx
inc esi
dec cx
loop go
greater:
mov mas_pos[di], mas[si]
inc di
inc esi
dec cx
loop go
 
invoke MessageBox, NULL, ADDR str2, addr str1, MB_OK
STOP: invoke ExitProcess, NULL
 
end start
Все равно ругается, но теперь на di и bx. Хотя в книге такие регистры для циклов и массивов(?) используются.
+ исправил ошибку с регистром cx, который забыл декрементировать.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.02.2016, 22:59
Ответы с готовыми решениями:

Два исходных массива объединить в один, включив элементы второго массива между K и (K+1) элементами первого массива.
Ребят, помогите, пожалуйста, сделать задачи, так как сама в этом ничего не соображаю.. 1. Дан...

Объединить два массива в один, включив второй массив между 4 и 5 элементами первого массива
Заданы два одномерных массива с числом элементов 6 и 7. Объединить их в один массив,включив второй...

Объединить два массива в один, включив второй массив между k-ым и (k+1)-ым элементами первого массива
Может кто решить ? вовсе не могу понять ... Дано два одномерных масива различной размерности....

Написать программу, которая определяет, сколько элементов первого массива совпадают с элементами второго массива
Даны два строго упорядоченных по возрастанию массива X и Y из n числовых элементов каждый. Напишите...

21
Terminator of naked apes
832 / 139 / 34
Регистрация: 13.02.2015
Сообщений: 328
16.02.2016, 21:11 21
Author24 — интернет-сервис помощи студентам
Ох, щи... что тут у вас происходит, например? ;о)

Gr1f0nn, ты демонстрируешь полнейшее незнание того, что пытаешься программировать. Не знаю, что там у Юрова, но у тебя же стоит MASM32, ты почитай хотя бы азы, разбери примеры (или тут где-то есть учебник, например ;о)

По теме (азы, например ;о): модель памяти flat, которую ты определил в начале исходника - это плоский 32-разрядный режим, адреса и, соответственно, индексные регистры и счётчики в коем должны использоваться 32-битные (по причине чуть более, чем очевидной, например ;о)

К тому же в масме из-за некоторой неоднозначности синтаксиса надо быть осторожным (тем более новичку, например ;о) и следить за тем, что ты грузишь в регистр: значение или адрес, и для уверенности применять для загрузки адреса LEA вместо MOV (или Offset с MOV, например ;о)

И вот тут-то как нельзя более кстати советы R71MT с его Фасмом, имеющим несколько отличный синтаксис (да ещё 16-битным, например ;о)

Короче, "настоящие скачки, с препятствиями" (если бы ты почитал хоть что-нибудь о Масм32, тема не получилась столь фееричной, например ;о)


Задачка простенькая, самое то для примера, например:
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
;
INCLUDE \MASM32\INCLUDE\Masm32rt.INC
;
.DATA
awSource    DW    1, -1, 9, -8, -2, 7, -6, -3 ,2, 5, -4, 8, -1
szCaption   CHAR  "Program Result", 0
szMessage   CHAR  "Массив в памяти ;о)", 0
;
.DATA?
awDestPos   DW    LengthOf awSource Dup (?)
awDestNeg   DW    LengthOf awSource Dup (?)
;
.CODE
START:
      MOV   ECX, LengthOf awSource
      LEA   ESI, awSource
      LEA   EDI, awDestPos
      LEA   EBX, awDestNeg
SP_LOOP:
      LODSW
      TEST  AX, AX
      JS    TO_NEG
      STOSW
      JMP   NEXT_ITEM
TO_NEG:
      MOV   [EBX], AX
      ADD   EBX, Type awSource
NEXT_ITEM:
      LOOP  SP_LOOP
      INVOKE MessageBox, NULL, Addr szMessage, Addr szCaption, MB_OK
      INVOKE ExitProcess, NULL
;
      END   START
;
Как-то так, что ли, например ;о)
1
244 / 164 / 133
Регистрация: 30.09.2012
Сообщений: 690
21.02.2016, 03:34  [ТС] 22
KyberMax, Спасибо)

Не по теме:

Основу, действительно, прочитал лишь бегло и сразу перепрыгнул на тему "массивы". Верил, что осилю и так это)

0
21.02.2016, 03:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.02.2016, 03:34
Помогаю со студенческими работами здесь

Вывести на экран два массива, элементами первого являются элементы, меньшие заданного значения, элементами второго - большие заданного значения
Задан массив целых чисел. Вывести на экран два массива, элементами первого являются элементы,...

Вставить второй массив между k-ым и (k+1)-ым элементами первого массива
3) даны два массива различной длины. Вставить второй массив между к-тым и (к+1)-ым элементами ...

Сформировать второй массив, элементами которого будет разница пар первого массива
Подскажите пожалуйста как сделать вот такую задачку. Я создаю массив чисел с количеством элементов...

Объединить два массива в один, включив второй массив между k-м и (k+1)-м элементами первого
Заданы два одномерных массива действительных чисел различных размеров. Объединить их в один массив,...


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

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