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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2011, 21:59   #1
kapa0_0
Новичок
Джуниор
 
Регистрация: 01.06.2011
Сообщений: 1
Восклицание Поиск min в массиве - как movzx заменить чтоб на emu8086 запустилось

подскажите пожалуйста как можно movzx заменить чтоб на emu8086 запустилось. программа ищет min в массиве и распечатывает в 16чном виде если файл не найден то имя нужно запросить. она верная нужно только как то movzx убрать. эт 68 и 83 строка.

Код:
code_seg	segment
assume	cs:code_seg,	ds:code_seg,	ss:code_seg
org	80h
cmd_len		db	?
cmd_line	db	?
org 100h
;.386
start:
	jmp	main

;===============in_string address to dx 
;===============out_lenhgth in bx
;===============using registers: AL SI
CalculateStringLength	proc	NEAR
	push	ax
	push	si
	mov		si,dx
STRING_LABEL:
	lodsb
	cmp		al,0dH
	je		END_STRING_LABEL
	cmp		al,10H
	je		END_STRING_LABEL
	cmp		al,24H
	je		END_STRING_LABEL
	inc		bx
	jmp		STRING_LABEL
END_STRING_LABEL:
	pop		si
	pop		ax
	ret
CalculateStringLength	endp

;===si<-string	
MinSearch	proc
	lodsb
	mov		bl,24H
A20:
	cmp		bl,[si]
	jne		A30
	ret
A30:
	cmp		al,[si]
	jbe		A40
	mov		al,[si]
A40:
	inc		si
	jmp		A20
MinSearch	endp


Print_Hex		proc
	and		dl,0fH
	add		dl,30H
	cmp		dl,3aH
	jl		print_label
	add		dl,07H
print_label:	
	int		21H
	ret
Print_Hex		endp


main:
;===============create==file=======
	cmp		cmd_len,00H
	je		without_cmd_line
	movzx 	bx,cmd_len
	lea 	di,cmd_line
	mov		ah,00H	 	;00 äîëæåí çàâåðøàòü èìÿ ôàéëà
	mov 	[di+bx],ah
	lea		ax,cmd_line+1
	mov		file_adr,ax
	jmp		open_file
without_cmd_line:
	mov		ah,09H
	lea		dx,mes_inp_file_name
	int		21H
	
	mov		ah,3fH
	mov		bx,00H
	lea		dx,file_name
	movzx	cx,length_file_name
	int		21h	
	call	CalculateStringLength
	mov		file_name[bx],00H
	lea		ax,file_name
	mov		file_adr,ax
open_file:
	mov		ah,3dH
	mov		dx,file_adr		
	mov		al,0					;reading == 0; writing == 1;both == 2
	int		21H
	mov		handler,ax
;========define=file_size:
	mov		ax,4202H
	mov		bx,handler
	xor		cx,cx
	xor		dx,dx
	int		21H
	mov		file_size,ax		; dx:ax == size of file
;=======read=file
	mov		ax,4200H
	mov		bx,handler
	xor		cx,cx
	xor		dx,dx
	int		21H		
	mov		ah,3fH
	mov		bx,handler
	mov		cx,file_size
	lea		dx,buffer
	int		21H					;ax <= how much was read
	mov		si,ax
	mov		buffer[si],'$'
	
	mov		ah,09H
	lea		dx,buffer
	int		21H
		
	lea		si,buffer
	call	MinSearch
	mov		min_sym,al

	mov		ah,09H
	lea		dx,mes_rez_sym
	int		21H
	
	mov		ah,02H
	mov		dl,min_sym
	int		21H
	
	mov		ah,09H
	lea		dx,mes_rez_hex
	int		21H
	
	mov		ah,02H
	mov		dl,min_sym	
	rcr		dl,4
	call	Print_Hex
	mov		dl,min_sym
	call	Print_Hex
	
	mov		ah,02H
	mov		dl,'H'
	int		21H
	
exit:
	mov 	ax,4c00H
	int 	21H
	

mes_inp_file_name	db	13,10,'Please, input file name: ','$'
buffer				db	40 dup(?)
length_of_buffer	db	39
file_name			db	40 dup (?);'c:\log.txt',0
file_adr			dw	?
length_file_name	db	39
file_size			dw	?
handler				dw	?
min_sym				db	?
mes_rez_sym			db	13,10,'Symbol rezult:','$'
mes_rez_hex			db	13,10,'   Hex rezult:','$'


code_seg	ends
	end		start


______________
Название темы по правилам форума должно адекватно отражать суть решаемой задачи/проблемы.
На первый раз я исправил.
В последующем, темы с подобным названием будут закрываться или удаляться...
Прошу Вас учесть это на будущее.

Модератор.

Последний раз редактировалось Serge_Bliznykov; 01.06.2011 в 22:54.
kapa0_0 вне форума Ответить с цитированием
Старый 02.06.2011, 10:34   #2
x128
Форумчанин
 
Регистрация: 03.02.2010
Сообщений: 178
По умолчанию

объяви переменные как слова или обнулятй регистр и загружай переменную в младшую часть.
Код:
mov	cx,length_file_name
...
length_file_name	 dw	39
или
Код:
xor	ch, ch
mov	cl, length_file_name
x128 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
emu8086: заменить слова с максимальным и минимальным количеством букв «а» smoke-by Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 12.04.2011 22:25
min в массиве)) Dzhem Помощь студентам 7 04.03.2010 21:34
поиск min max в массиве размерности n-1 на ассемблере Sparky Помощь студентам 3 18.09.2009 08:40
Как поменять местами в массиве max и min элемент. Stager Общие вопросы C/C++ 2 13.01.2009 02:03
min элемент в массиве DeFace Общие вопросы C/C++ 2 06.01.2009 21:36