Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.09.2015, 21:01   #1
movchinar
Пользователь
 
Регистрация: 06.01.2015
Сообщений: 15
По умолчанию одномерный массив

Пожалуйста помогите!
Дан массив, например 1,2,3,4,5
Найти умножение этих чисел .
Я так думаю.
Скажите пожалуйста правильно или нет, или скажите свой вариант,,,


Код:
.MODEL SMALL
.STACK 64
.DATA
ARRAY DB 1,2,3,4,5
PROD DW ?
.CODE
MAIN:
MOV AX , @DATA
MOV DS, AX
MOV CX, 6
SUB SI,  SI
MOV AL, 1
START:
IMUL ARRAY[SI]
INC SI
LOOP START
MOV PROD, AX
MOV AX, 4C00H
INT 21H
END MAIN

Последний раз редактировалось Аватар; 26.09.2015 в 23:09.
movchinar вне форума Ответить с цитированием
Старый 26.09.2015, 22:26   #2
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

..если чуток отшлифовать, то и твой вариант сойдёт:
Код:
array    DB   1,2,3,4,5           ; однобайтный/одномерный массив
rezult   DW   0                   ; переменная в 2 байта для результата

main:
  XOR   AX,AX                     ; в AH может быть мусор, поэтому очищаем его
  MOV   SI,array                  ; SI указывает на адрес массива
  MOV   CX,5                      ; длинна массива
  MOV   AL,1                      ; в AL заносим 1
start:      
  MUL   BYTE[SI]                  ; умножаем AL на байт из SI. Результат в AL
  INC   SI                        ; передвигаем указатель на следующий элемент массива
  LOOP  start                     ; мотаем цикл CX-раз

  MOV   [rezult],AX               ; кидаем результат в переменную
Нашедшего выход - затаптывают первым..

Последний раз редактировалось R71MT; 27.09.2015 в 18:22.
R71MT вне форума Ответить с цитированием
Старый 27.09.2015, 07:47   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
правильно или нет
А запустить что возможности нет?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.09.2015, 17:02   #4
movchinar
Пользователь
 
Регистрация: 06.01.2015
Сообщений: 15
По умолчанию

Цитата:
Сообщение от R71MT Посмотреть сообщение
..если чуток отшлифовать, то и твой вариант сойдёт:
Код:
array    DB   1,2,3,4,5
rezult   DW   0 

main:
  XOR   AX,AX
  MOV   SI,array
  MOV   CX,5
  MOV   AL,1
start:
  MUL   BYTE[SI]
  INC   SI
  LOOP  start

  MOV   [rezult],AX
спасибо))
если не трудно, говорите что делает BYTE[SI], просто я только что начала работать на языке assembler

Цитата:
Сообщение от Stilet Посмотреть сообщение
А запустить что возможности нет?
Честно говоря, сейчас компилятора нет.

Последний раз редактировалось Stilet; 27.09.2015 в 17:12.
movchinar вне форума Ответить с цитированием
Старый 27.09.2015, 18:23   #5
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
Сообщение от movchinar Посмотреть сообщение
..говорите что делает BYTE[SI]
..говорю: - здесь дело в размере операндов.
Каждый элемент массива "ARRAY" у тебя задан как "DB" (1 байт), поэтому и брать мы должны из него по-одному байту, т.е. "MUL byte[SI]". Если команда будет иметь вид "mul [SI]" (а регистр SI имеет размер 2 байта), то получим "Error! Operand size not specified". По-сути - код кривой, но если он решает твою задачу, то можно и его применить.

//..сейчас компилятора нет//
Скачай ассемблер 'FASM' (он весит всего 1Mb) и тренируйся на нём.
Если и это не подходит, то на-все-случаи-жизни есть встроенный "DEBUG" [Win+R-->Debug]

P.S.\\ кстати, если у тебя код под 'MASM', то нужно указывать "BYTE PTR [SI]"..
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 01.10.2015, 22:39   #6
movchinar
Пользователь
 
Регистрация: 06.01.2015
Сообщений: 15
По умолчанию

Цитата:
Сообщение от R71MT Посмотреть сообщение
..говорю: - здесь дело в размере операндов.
Каждый элемент массива "ARRAY" у тебя задан как "DB" (1 байт), поэтому и брать мы должны из него по-одному байту, т.е. "MUL byte[SI]". Если команда будет иметь вид "mul [SI]" (а регистр SI имеет размер 2 байта), то получим "Error! Operand size not specified". По-сути - код кривой, но если он решает твою задачу, то можно и его применить.

//..сейчас компилятора нет//
Скачай ассемблер 'FASM' (он весит всего 1Mb) и тренируйся на нём.
Если и это не подходит, то на-все-случаи-жизни есть встроенный "DEBUG" [Win+R-->Debug]

P.S.\\ кстати, если у тебя код под 'MASM', то нужно указывать "BYTE PTR [SI]"..
спасибо !!!
movchinar вне форума Ответить с цитированием
Старый 02.10.2015, 09:12   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
сейчас компилятора нет.
Зато есть интернет. А в интернете есть один чудный портальчик: http://www.tutorialspoint.com/compil...bly_online.php
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программирование в VBA: двумерный массив M на N, нужно создать новый одномерный массив TheAnnihilyator Помощь студентам 1 04.06.2014 09:16
Найти одномерный массив элементы которого равны минимальным значениям в строках исходной матрицы и одномерный массив элементы... Richik123 Microsoft Office Excel 1 16.10.2013 15:45
Двумерный массив развернуть в одномерный массив по строкам[QBASIC] TrueStyle777 Помощь студентам 3 29.05.2013 21:56
Дан одномерный массив, сформировать новый массив по заданному правилу {Delphi} Nickolai47 Помощь студентам 5 16.12.2012 14:51
Одномерный массив. Q basic - Построить новый массив из элементов исходного ,которые больше P. Marishkaa Помощь студентам 2 12.01.2010 16:54