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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2010, 13:08   #11
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

sirex
так у тебя программа не компилируется?
Mikl___ вне форума Ответить с цитированием
Старый 28.01.2010, 13:10   #12
sirex
Пользователь
 
Регистрация: 27.01.2010
Сообщений: 11
Сообщение

да, компилирует
sirex вне форума Ответить с цитированием
Старый 28.01.2010, 13:15   #13
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
sirex
Текст ошибки в студию.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.01.2010, 13:25   #14
sirex
Пользователь
 
Регистрация: 27.01.2010
Сообщений: 11
По умолчанию

Код:
;поиск min в массиве по базе со смещением
.model tiny
.code
org 100h
main:
	mov di,1
	xor ax,ax
	xor si,si
	mov bx,offset arr
	mov ax,word ptr [bx]		 ;	занесли первый элеменент, на регистр, ax=min
	mov cx,5 			;	так как первый элемент уже обработан количество повторений=n-1
cyc:
	add si,2			 ;	переходим на следующий эелемент
	cmp word ptr [bx+si],ax	 ;сравниваем текущее значение с min, word ptr используется так как нам нужен не 1 байт а 2
	jnl no			 ;если элемент >= min переходим на no
	mov ax,[bx+si]
no:
	loop cyc
	
	mov si,-2
	mov bx,offset arr
	mov cx,6 
cyc2:
	add si,2 			;переходим на следующий эелемент
	cmp word ptr [bx+si],ax	 ;сравниваем текущее значение с min, word ptr используется так как нам нужен не 1 байт а 2
	je yes 			;если элемент >= min переходим на no
	
	loop cyc2
	jmp oi1
yes:
	inc di
	loop cyc2
	
	mov ax,di
;вывод результата
oi1:  
      xor     cx, cx
      mov     bx, 10

oi2:   
      cwd
      div     bx	;Делим число на десять. В остатке получается последняя цифра. Сразу выводить её нельзя, поэтому сохраним её в стэке.
      push    dx
      inc     cx

		; А с частным повторяем то же самое, отделяя от него очередную
		; цифру справа, пока не останется ноль, что значит, что дальше
		; слева только нули.
	test    ax, ax
      jnz     oi2

		; Теперь приступим к выводу.
	mov     ah, 02h
oi3:   
	pop     dx
		; Извлекаем очередную цифру, переводим её в символ и выводим.
      add     dl, 30h
      int     21h
		; Повторим ровно столько раз, сколько цифр насчитали.
      loop    oi3
        
	int 20h
	ret

	arr dw 1,2,3,4,5,6

end main
без stack выводит аппаратную ошибку, а если убрать ret, то вовсе ничего не выводит

Последний раз редактировалось Stilet; 28.01.2010 в 13:29.
sirex вне форума Ответить с цитированием
Старый 28.01.2010, 13:48   #15
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

sirex
1) сдается мне что ты не обратил внимание на эти строки
.model tiny
.code
org 100h
что говорит о том что должен собираться COM файл а не EXE
кстати, какими ключами ты пользуешься чтобы произвести компиляцию и линковку
2) если вспомнить твое задание "Дан массив из 6 элементов. Подсчитать сколько раз в нем встречается минимальное по величине число" и поместить в "arr dw 1,2,1,4,1,6" то программа Sparky выведет число 4 вот переделанный вариант
Код:
; masm dos com #
;поиск min в массиве по базе со смещением
.model tiny
.code
org 100h
main:   mov di,0
	xor si,si
	mov ax,[arr] ;занесли первый элеменент, на регистр, ax=min
	mov cx,5 ;так как первый элемент уже обработан количество повторений=n-1
cyc:    add si,2 ;переходим на следующий эелемент
	cmp arr[si],ax ;сравниваем текущее значение с min, word ptr используется так как нам нужен не 1 байт а 2
	jnl no ;если элемент >= min переходим на no
	mov ax,arr[si]
no:     loop cyc	
	mov si,-2
	mov cx,6 
cyc2:   add si,2 ;переходим на следующий эелемент
	cmp arr[si],ax ;сравниваем текущее значение с min, word ptr используется так как нам нужен не 1 байт а 2
	jne no_ ;если элемент >= min переходим на no
	inc di
no_:	loop cyc2
	mov ax,di
;вывод результата
      	mov bx,10
oi2:  	cwd
      	div bx	;Делим число на десять. В остатке получается последняя цифра. Сразу выводить её нельзя, поэтому сохраним её в стэке.
        add dl,30h
      	push dx
      	inc cx
; А с частным повторяем то же самое, отделяя от него очередную
; цифру справа, пока не останется ноль, что значит, что дальше
; слева только нули.
	test ax,ax
      	jnz oi2
; Теперь приступим к выводу.
	mov ah, 02h
oi3:    pop dx
	; Извлекаем очередную цифру, переводим её в символ и выводим.
        int 21h
; Повторим ровно столько раз, сколько цифр насчитали.
      	loop oi3        
	ret
arr dw 1,2,1,10,5,6
end main
Mikl___ вне форума Ответить с цитированием
Старый 28.01.2010, 14:12   #16
sirex
Пользователь
 
Регистрация: 27.01.2010
Сообщений: 11
По умолчанию

а можно если в конце будет
ret
arr dw 1,2,1,10,5,6
.stack
dw 100 dup(?)
end main
или он просто не выведет
sirex вне форума Ответить с цитированием
Старый 28.01.2010, 14:16   #17
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

sirex
я так и знал! О COM-файле сколько раз было повторено? В нем нет ни секции .data ни секции .stack. Там одна единственная секция .code которая содержит и команды и данные, а самые старшие адреса занимаются стеком. Еще раз спрашиваю С какими ключами ты производишь компиляцию и линковку?
Mikl___ вне форума Ответить с цитированием
Старый 28.01.2010, 14:21   #18
sirex
Пользователь
 
Регистрация: 27.01.2010
Сообщений: 11
По умолчанию

/t - Создание файла типа .com по умолчанию .exe
sirex вне форума Ответить с цитированием
Старый 28.01.2010, 14:27   #19
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

sirex
в случае если пишешь на tasm'e
tasm %filename%.asm
tlink /t/x %filename%.obj

если пишешь на masm'e
ml /AT /c %filename%.asm
link /T %filename%.obj,,,,,

%filename% имя твоего asm-файла
Mikl___ вне форума Ответить с цитированием
Старый 28.01.2010, 14:35   #20
sirex
Пользователь
 
Регистрация: 27.01.2010
Сообщений: 11
Радость

огромное спасибо, заработала программа=))
sirex вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с массивом program123 Помощь студентам 2 24.12.2009 17:20
работа с массивом s2dentishe Помощь студентам 2 12.12.2009 22:35
Работа с массивом GaSST Microsoft Office Excel 5 04.06.2009 07:57
Работа с массивом (Assembler) Siva Помощь студентам 2 27.03.2008 01:55