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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2013, 22:01   #1
rublyabachka
Пользователь
 
Аватар для rublyabachka
 
Регистрация: 12.12.2011
Сообщений: 31
Вопрос Функция и стек

Здравствуйте! Такая проблема: по логике вещей программа должна работать правильно, когда я проверяю значения регистров при помощи char, то видно, что берутся верные значения. Но если просто смотреть значения регистров, то там другие цифры, тем более что сравниваются эти, а не char-овские значения и в итоге программа работает некорректно((
Кто нибудь знает как можно устранить эту проблему?
Код:
.386
.model flat, stdcall
include kernel32.inc
includelib kernel32.lib
.data   
	;исходный массив
	a db 0, 7, 5, 9, 
	     2, 2, 4, 8, 
	     3, 6, 3, 4, 
	     4, 8, 1, 7, 
	     5, 9, 2, 6
	;результат
	m dw 0
	;количество столбцов
	i dw 4
.code
min proc
	mov ebx, 0
next:                 
	mov cx, [esp+4]    ;cx=4
	mov edi, esi
	mov ax, [esi]   
	add esi, 4 
minimum:              
	mov dx, [esi]
	cmp ax, dx      
	jl next_min       ;переход на метку, если ax<dx
	mov ax, dx    
 next_min:            
	 add esi, 4 
	loop minimum      
	cmp ax, m      
	jg next_max       ;переход на метку, если ax>m
	mov m, ax     
 next_max:            
	 mov esi, edi
	 inc esi       
	 inc ebx
	 cmp ebx, 4
	 jb next          ;переход на метку, если ebx<i
	 ret 8
min endp
main proc	
	push i
	lea esi, a
	call min
  invoke ExitProcess, 0	  
main endp
end main
Заранее спасибо!
Вложения
Тип файла: rar asm_VS9_project.rar (52.5 Кб, 6 просмотров)
rublyabachka вне форума Ответить с цитированием
Старый 28.10.2013, 14:17   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

вы читаете байтовые значения в ДВУХБАЙТОВЫЙ регистр..
возможно, косяки возникают именно в этой связи.

попробуйте написать вместо db dw:
Код:
    a dw 0, 7, 5, 9, 
            2, 2, 4, 8, 
	3, 6, 3, 4, 
	4, 8, 1, 7, 
	5, 9, 2, 6

не проверял. так, догадки...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.10.2013, 17:35   #3
rublyabachka
Пользователь
 
Аватар для rublyabachka
 
Регистрация: 12.12.2011
Сообщений: 31
По умолчанию

да, спасибо, я поняла уже... в задании нужно работать именно с байтовым массивом, так что я в самой функции теперь делаю при помощи al, dl
глупая ошибка((
rublyabachka вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
стек в С++ Наташенька) Помощь студентам 1 08.06.2012 19:15
недостающая функция (стек) zhenya.ya Помощь студентам 4 24.04.2010 17:47
C++ и стек MaGWaY_minsk Помощь студентам 1 14.12.2009 13:09
одна функция потока, а другая функция - член класса запускающего этот поток Дмитрий_Ч Общие вопросы C/C++ 2 27.09.2007 08:50