5 / 5 / 1
Регистрация: 13.12.2015
Сообщений: 51
1
TASM

В одномерном массиве заменить отрицательные элементы нулями

01.05.2016, 17:24. Показов 7296. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В одномерном массиве заменить отрицательные элементы нулями.Подсчитать число замен. Массив задать в сегменте данных или ввести с клавиатуры. Почти готова . Но не работает. Пишет ерунду. Кто подскажет? Уже запутался.
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
;В одномерном массиве заменить отрицательные элементы нулями. 
;Подсчитать число замен. 
;Массив задать в сегменте данных или ввести с клавиатуры.
 MASM
 MODEL small
 STACK 256
 .data
 mes db 0ah,0dh,'Массив- ','$'
 massiv db 2,-3,4,5,-6,7,8,9,2,4;исходный массив
 .code
 main:
  mov ax,@data; заносим данные
  mov ds,ax; в ds
  xor ax,ax ;обнуление ax
  mov cx,10 ;значение счетчика цикла в cx
  mov si,0 ;индекс начального элемента в cx
 go:  ;  приступим к оброботке
  mov al,massiv[si] ; заносим в первый символ массива
  test al,al; сравнение с нулем число массива
  jns show; если не отрицательное то переход на метку show
  mov byte ptr massiv[si],0  ;если отрицательное то заменить на ноль
  inc si ;продвижение к следующему
    ;элементу массива
   ;вывод на экран получившегося массива
  mov cx,10; счетчик массива
  mov si,0; ???
  mov ah,09h; ???
  lea dx,mes ; вывод сообщения массива
  int 21h
 show:
  mov ah,02h ;функция вывода значения из al на экран
  mov dl,massiv[si]
  add dl,30h ;преобразование числа в символ
  int 21h
  inc si; переход к следующему числу
  loop show; метка 
 exit:; выход из программы
  mov ax,4c00h ;стандартный выход
  int 21h
 end main  ;конец программы
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.05.2016, 17:24
Ответы с готовыми решениями:

В массиве заменить все отрицательные числа нулями
Задание Дана программа: DOSSEG .MODEL SMALL .STACK 100h .DATA A DB 5, 3, 9,...

В массиве из десяти цифр все отрицательные заменить нулями.
В массиве из десяти цифр все отрицательные заменить нулями. Массив байт.

В массиве слов заменить все отрицательные числа нулями
Здравствуйте, в универе изучаем ассемблер, а я что-то настолько олень, что вообще в него не...

задача в массиве (байт) 10 ячеек заменить все отрицательные числа нулями
помогите пожалуйста с ошибками, не знаю что делать.... data segmet mas db...

7
Прощай, Мир!
1672 / 830 / 253
Регистрация: 26.05.2012
Сообщений: 3,056
01.05.2016, 22:29 2
Цитата Сообщение от dimaondmersik Посмотреть сообщение
вывод на экран получившегося массива
вроде это в условии не задано
0
5 / 5 / 1
Регистрация: 13.12.2015
Сообщений: 51
01.05.2016, 22:37  [ТС] 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
model small
.stack 256
data segment para public 'data'  ;объявление сегмента данных
mas db 3,1,2,-4,-2,4,5; данный массив
num = $ - mas;  ;размер массива в байтах
message db 'nashli otricatelnoe i zamenili na null  $',0ah,0dh ; сообщение если есть отрицательное число
rez       db    ?
data ends; конец данных
code segment ; сам код
assume cs:code, ds:data
start:
mov ax,data; начало программы, 
mov ds,ax; занести в ds данные ax;
lea bx,mas;берём в bx адрес первого элемента
mov cx,num;счетчик цикла
obrabotka: 
cmp byte ptr [bx],0; сравниваем элемент с нулем
jg neotric; если bx>0 то есть положительное число то переходим на метку neotric
mov byte ptr[bx],0; проведем замену отрицательного числа на ноль
mov    ah,09h    ;вывод сообщения, если нашли отрицательное число
            lea       dx, message
            int       21h
            
 
neotric:
inc bx;  переход к следующему элементу (размер элемента = 1 байту)
loop obrabotka; идем на метку obrabotka
 
quit: метка выхода
 
mov ax,4c00h;
int 21h;
code ends; конец кода
end start; конец программы
0
Прощай, Мир!
1672 / 830 / 253
Регистрация: 26.05.2012
Сообщений: 3,056
01.05.2016, 22:44 4
глянька во это. может подойдет тебе
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
xor si,si
mov cx,10
go:
    mov al,massiv[si]
    
    test al,80h
    jz skip
        
    mov byte ptr massiv[si],0
    inc count
 
    skip:
    inc si
loop go
1
5 / 5 / 1
Регистрация: 13.12.2015
Сообщений: 51
01.05.2016, 22:48  [ТС] 5
попробую и с этим куском кода, но тут смотрю есть счетчик замен inc count ?
0
Прощай, Мир!
1672 / 830 / 253
Регистрация: 26.05.2012
Сообщений: 3,056
02.05.2016, 15:52 6
Цитата Сообщение от dimaondmersik Посмотреть сообщение
Подсчитать число замен
Цитата Сообщение от dimaondmersik Посмотреть сообщение
тут смотрю есть счетчик замен inc count?
да. все как и требовалось
1
5 / 5 / 1
Регистрация: 13.12.2015
Сообщений: 51
02.05.2016, 16:16  [ТС] 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
model small
.stack 256
data segment para public 'data'  ;объявление сегмента данных
mas db 3,-1,2,-4,-2,-4,5,-8,4,3; данный массив, неупакованное BCD-число
num = $ - mas;  ;размер массива в байтах
message db 'nashli otricatelnoe i zamenili na null  $',0ah,0dh ; сообщение если есть отрицательное число
count   db  0; счетчик замен присваем начальное значение 0
data ends; конец данных
code segment ; сам код
assume cs:code, ds:data
start:; начало программы
mov ax,data; заносим данные в ах, далее
mov ds,ax; занести в ds данные ax;
lea bx,mas;берём в bx адрес первого элемента
mov cx,num;счетчик цикла
obrabotka: ; метка обработка
cmp byte ptr [bx],0; сравниваем элемент с нулем
jg neotric; если bx больше и не равно 0 
;то есть положительное число то переходим на метку neotric
mov byte ptr[bx],0; проведем замену отрицательного числа на ноль
 
inc count; считаем количесвто замен отрицательных чисел на ноль
;если не отрицательное
neotric:
inc bx;  переход к следующему элементу (размер элемента = 1 байту)
loop obrabotka; идем на метку obrabotka
;вывод количесвто замен на ноль
mov    ah,09h    ;вывод сообщения, если нашли отрицательное число
lea    dx, message ; сообщение nashli otricatelnoe i zamenili na null
int    21h; прирывание для вывода на экран
mov al, count ; заносим данные счетчика в регистр AL 
aam ;двоичное число преобразуем в неупакованное BCD число 
or ax, 3030h ; преобразуем в символы ASCII
xchg al, ah ; меняем местами 
int 29h ; выводим на экран
mov al, ah
int 29h 
int 21h
mov ah,4Ch
int 21h         
code ends; конец кода
end start; конец программы
1
5 / 5 / 1
Регистрация: 13.12.2015
Сообщений: 51
02.05.2016, 16:20  [ТС] 8
Также выводит на экран сообщение!!!
Вложения
Тип файла: zip IPR2Z15.zip (1.1 Кб, 34 просмотров)
1
02.05.2016, 16:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.05.2016, 16:20
Помогаю со студенческими работами здесь

В одномерном числовом массиве все отрицательные элементы заменить нулями
В одномерном числовом массиве все отрицательные элементы заменить нулями.

В одномерном массиве все отрицательные элементы заменить нулями и упорядочить элементы массива по убыванию
В одновимірному масиві всі від’ємні елементи замінити нулями і впорядкувати елементи масиву за...

В заданном одномерном массиве все отрицательные элементы заменить нулями и подсчитать их количество
В заданном одномерном массиве все отрицательные элементы заменить нулями и подсчитать их количество.

В одномерном массиве заменить все элементы, попадающие в интервал нулями
В одномерном массиве размера N заменить все элементы, попадающие в интервал , нулями. на node.js...

В одномерном массиве заменить все элементы, попадающие в интервал [a,b], нулями.
В одномерном массиве размера N заменить все элементы, попадающие в интервал , нулями. благодарю...

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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