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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.07.2011, 21:15   #1
Стас_с
Пользователь
 
Регистрация: 05.07.2011
Сообщений: 22
Восклицание проверьте код программы (ассемблер)

; Преобразовать массив X, расположив вначале его отрицатель-
;ные, а затем неотрицательные элементы, сохранив в каждой из двух
;групп исходный относительный порядок элементов.

Код:
sseg segment stack 'stack'
     db        64 dup (?)
sseg ends
  data segment
     x   dw 1, -2, 7, -3, 2, 9 	;исходный массив
	 n   dw 6
	 y   dw 6 Dup (?)
	 max dw ?
  data ends 
;
code segment
start   proc    far
assume  ss:sseg,ds:data,cs:code
        push    ds
        xor     ax,ax
        push    ax
        mov     ax,data
        mov     ds,ax
;--------------------Nachalo---------------------------------------------
     lea di,x
	 lea si,y
     mov cx,n
   c1:
      mov ax,[di]
      cmp ax,0
      jge m1
      mov [si],ax
      add si,2
   m1:
      add di,2
	  loop c1
	  lea di,x
	  mov cx,n
   c2:  
	  mov ax,[di]
	  cmp ax,0
	   jl m2
	  mov [si],ax
      add si,2
	m2:  
      add di,2
	  loop m2
ret

code    ends
        end     start
заранее спасибо за помощь ...
ещё если кто может помогите с выводом ответа на экран.
Стас_с вне форума Ответить с цитированием
Старый 05.07.2011, 22:23   #2
Стас_с
Пользователь
 
Регистрация: 05.07.2011
Сообщений: 22
По умолчанию

хм... что никто так и не поможет ?
Стас_с вне форума Ответить с цитированием
Старый 06.07.2011, 09:07   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) окончание вашего кода должно быть примерно таким:
Код:
      ret
start endp
code ends
end start
2) я не разобрался в вашем алгоритме. но он точно не работает! (распишите в виде словесного описания, что Вы делаете... ну или блок-схему дайте)
Исходный массив вообще без изменений остаётся,
а в массив Y попали только отрицательные элементы

Кстати, я бы по условию задачи понял так, что нужно обойтись одним массивом.
Нет?..

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


p.s. и ещё. Вы АБСОЛЮТНО зря создали тему - практически кросспост существующей... Поймите, раз никто не отвечает, значит тех людей, которые способны ответить, либо нет на форуме, либо они заняты...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.07.2011, 21:30   #4
Стас_с
Пользователь
 
Регистрация: 05.07.2011
Сообщений: 22
По умолчанию

нужно использовать два массива , то что в него попадают только отрицательные элементы это правда ( и это проблема)

полное задание которое мне сегодня выдали звучит так :
Лабораторна робота №3
; Преобразовать массив X, расположив вначале его отрицатель-
;ные, а затем неотрицательные элементы, сохранив в каждой из двух
;групп исходный относительный порядок элементов. Оценить, как при
;этом изменилось положение максимального по модулю элемента масси-
;ва X.


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

вот то что надумал.
Код:
sseg segment stack 'stack'
     db        64 dup (?)
sseg ends
  data segment
     max dw       ? 
     x   dw 1, -2, 6,9, -3, 2, 7 	;исходный массив
	 n   dw 7
	 y   dw 7 Dup (?)
	 buf dw ?
	 
  data ends 
;
code segment
start   proc    far
assume  ss:sseg,ds:data,cs:code
        push    ds
        xor     ax,ax
        push    ax
        mov     ax,data
        mov     ds,ax
;--------------------------------
       lea  di,x
	   mov  cx,n 	   
       mov  bx,[di]
	   mov dx,di
;========================
c4: 
     mov ax,[di]
     cmp ax, bx
     jle m4
     mov bx,ax
     mov dx,di
  m4:	 
	 add di,2
     loop c4
     push dx	 
;------посмотрим что получится----
     lea di,x
	 lea si,y
	 mov cx,n
   c1:
      mov ax,[di]
      cmp ax,0
      jge m1
      mov [si],ax
      add si,2
   m1:
      add di,2
	  loop c1
	  lea di,x
	  mov cx,n
   c2:  
	  mov ax,[di]
	  cmp ax,0
	   jl m2
	  mov [si],ax
      add si,2
	m2:  
      add di,2
	  loop m2
;---------------------------
       lea si,y
	   mov cx,n
	   mov bx, [si]
	   mov dx,si
	   c5: 
     mov ax,[si]
     cmp ax, bx
     jle m5
     mov bx,ax
     mov dx,si
  m5:	 
	 add di,2
     loop c5    
;---------------------------
     lea ax,y 
	 sub ax,dx
	 mov bx, 2
	 cwd 
	 idiv bx
	 mov cx,ax
	 pop dx
	 lea ax,x
	 sub ax,dx
	 mov bx, 2
	 cwd 
	 idiv bx
	 sub ax,cx
	 mov max,ax
;============================
ret
start	endp
code    ends
        end     start
кто поможет с решением проблемы буду благодарен
Стас_с вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверьте код Ko$ Помощь студентам 4 17.03.2011 14:29
Проверьте код neomax38 Помощь студентам 2 27.12.2010 16:53
код программы проверьте innaa639 Помощь студентам 3 28.05.2009 12:18
Пожалуйста проверьте код программы!!! Dmitriy-e-nest Помощь студентам 13 16.01.2009 00:41
Проверьте код ! Михаил Юрьевич Общие вопросы Delphi 7 08.02.2008 09:32