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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2017, 00:35   #1
nait123321
Пользователь
 
Регистрация: 25.04.2017
Сообщений: 13
По умолчанию Сформировать вектор из массива.

Здравствуйте, столкнулся с одной проблемной задачей:
Цитата:
Задан целый массив А(n), n<12. Сформировать вектор М из элементов А[і], значения которых кратны 5 и не кратны 7. Выполнить сдвиг полученного массива влево на одну позицию.
1. Обеспечить обработку данных массивов, ввод данных с клавиатуры, и вывод результатов в виде отдельных процедур.
2. В процедурах продемонстрировать использования операндов NEAR и FAR.
3. Применить операторы CALL, RET.
Пока накидал это, но с ассемблером у меня вообще туго, прошу помощи.
Код:
model small


.data
ent db "Заполнить массив:",'$'

.stack 256 

.code 
begin: 
  mov ax, @data 
  mov ds, ax 
  mov es, ax  

  lea dx, ent 
  mov ah, 9 
  int 21h

  mov cx, count
  mov di, offset mass
  cld 
L1:
  mov ah,8h 
  int 21h  
  xor ah,ah
  stosw
  loop L1
 
  mov ax,04c00h
  int 21h

  end begin
nait123321 вне форума Ответить с цитированием
Старый 25.04.2017, 06:01   #2
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Пробовал запускать этот код? Какой результат?
Где переменная "count" и массив "mass"? Они не обозначены у тебя в секции данных.
В цикле "L1:" установи AH=1 (ввод с клавы с эхом), убери "xor" и сделай "stosb" (b вместо w).
Теперь ты выполнишь пункт(1)..
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 25.04.2017, 09:50   #3
nait123321
Пользователь
 
Регистрация: 25.04.2017
Сообщений: 13
По умолчанию

Так?
Код:
model small


.data
ent db "Vvedite chislo:",'$'

count equ 4
mass dw count dup (?)


.stack 256 

.code 
begin: 
  mov ax, @data 
  mov ds, ax 
  mov es, ax  

  lea dx, ent 
  mov ah, 9 
  int 21h

  mov cx, count
  mov di, offset mass
  cld 
L1:
  mov ah,8h 
  int 21h  
  stosw
  loop L1
 
  mov ax,04c00h
  int 21h

  end begin
Казус, числа даже не вводятся


Последний раз редактировалось nait123321; 25.04.2017 в 09:54.
nait123321 вне форума Ответить с цитированием
Старый 25.04.2017, 10:03   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от nait123321 Посмотреть сообщение
stosw
забыли сделать
Цитата:
Сообщение от R71MT Посмотреть сообщение
и сделай "stosb" (b вместо w).

Цитата:
Сообщение от nait123321 Посмотреть сообщение
Казус, числа даже не вводятся
А как Вы это определили?
я ваш код не проверял, но, дело в том, что
Цитата:
Сообщение от nait123321 Посмотреть сообщение
Код:
mov ah,8h 
  int 21h
это - "DOS Fn 08H: Консольный ввод без эха"
"без эха" - означает, что нажимаемый символ НЕ ОТОБРАЖАЕТСЯ на экране.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.04.2017, 10:15   #5
nait123321
Пользователь
 
Регистрация: 25.04.2017
Сообщений: 13
По умолчанию

Затупил, исправил:
Код:
model small


.data
ent db "Vvedite chislo:",'$'

count equ 4
mass dw count dup (?)


.stack 256 

.code 
begin: 
  mov ax, @data 
  mov ds, ax 
  mov es, ax  

  lea dx, ent 
  mov ah, 9 
  int 21h

  mov cx, count
  mov di, offset mass
  cld 
L1:
  mov ah,01h 
  int 21h  
  stosb
  loop L1
 
  mov ax,04c00h
  int 21h

  end begin
Но теперь вместо 4 элементов заполняет 2

nait123321 вне форума Ответить с цитированием
Старый 25.04.2017, 10:30   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от nait123321 Посмотреть сообщение
Код:
mass dw count dup (?)
замените на
Код:
mass db count dup (?)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.04.2017, 10:34   #7
nait123321
Пользователь
 
Регистрация: 25.04.2017
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
замените на
Код:
mass db count dup (?)
Тоже самое.
nait123321 вне форума Ответить с цитированием
Старый 25.04.2017, 11:34   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от nait123321 Посмотреть сообщение
Тоже самое.
не подтверждаю.
td_003.png

td_001.png

А Вы как проверяете?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.04.2017, 17:28   #9
nait123321
Пользователь
 
Регистрация: 25.04.2017
Сообщений: 13
По умолчанию

Через DOSBox 0.74 и в самом GUI Turbo Assembler 2.3.
У меня только 2 раза даёт ввести число и сразу конец программы.
nait123321 вне форума Ответить с цитированием
Старый 25.04.2017, 17:36   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

подозреваю, что Вы не то запускаете, что откомпилировали.
скопируйте исходный TTT.ASM с новым именем, откомпилируйте, слинкуйте и проверьте.
Если не поможет, запакуйте в арихв ваш исходник и ваш EXE файл в архив и выложите архив на форум (прикрепите к своему сообщению через "Загрузить вложения")
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ - Сформировать вектор из максимумов матрицы и упорядочить его по возрастанию ololoyev57 Помощь студентам 1 24.05.2015 20:28
Сформировать вектор из элементов kseenq Помощь студентам 2 12.12.2014 02:53
Сформировать вектор из .... lizka6011997 Помощь студентам 1 04.03.2014 00:53
Дан вектор. Сформировать отдельно вектора (положительные и отрицательные). Виталик124 Паскаль, Turbo Pascal, PascalABC.NET 5 18.02.2014 22:41