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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.12.2012, 06:03   #1
Vodolei
 
Регистрация: 14.12.2012
Сообщений: 3
По умолчанию Какой компилятор использовать?

Здравствуйте. Хочу понять как работает программа, но не знаю, каким ассмом ее откомпилить. Меня интересует в каком асме есть стандартный макрос include macros.mlb и функции print, setmem, input?
Vodolei вне форума Ответить с цитированием
Старый 18.12.2012, 06:47   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

тут проще по коду сказать.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.12.2012, 07:01   #3
Vodolei
 
Регистрация: 14.12.2012
Сообщений: 3
По умолчанию

У меня сильное подозрение, что макрос macros.mlb нестандартный и все функции, вызывающие у меня вопрос описаны там. Это будет очень печально.
Код:
clear		equ	256		
first_free	equ	258	
maxmax		equ	4096	

	include macros.mlb

;запись хеш-таблицы
hash_rec	struc
first	dw	?		
next	dw	?			
char	db	?			
hash_rec	ends

;объявление сегментов
code	segment byte public 'code'
code	ends
stack	segment word stack 'stack'
	dw	128 dup (?)
stack	ends
data	segment word public 'data'
data	ends
memory	segment para public 'memory'
hash	label	hash_rec
memory	ends

;начало написания кода
code	segment
	assume	cs:code,ds:data,es:data,ss:stack

start	proc	far
	mov	bx,seg hash		
	mov	ax,ds			
	sub	bx,ax		
	inc	bx		
	setmem	bx		
	mov	bx,data			
	mov	es,bx
	mov	ds,bx
	print	input_prompt		
	input	input_file
	print	crlf
	print	output_prompt		
	input	output_file
	print	crlf
	mov	al,input_file+1		
	xor	ah,ah
	mov	si,ax
	mov	input_file+2[si],0
	mov	al,output_file+1
	mov	si,ax
	mov	output_file+2[si],0
	hopen	input_file+2,0
	mov	input_handle,ax
	hcreat	output_file+2,0
	mov	output_handle,ax
	call	compress	
	hclose	input_handle	
	hclose	output_handle
	exit				
start	endp

data	segment
input_prompt	db	'Input file: $'
output_prompt	db	'Output file: $'
input_file	db	80,0,80 dup (?)
output_file	db	80,0,80 dup (?)
crlf		db	13,10,'$'
input_handle	dw	?
output_handle	dw	?
data	ends

compress	proc	near		
	malloc	1280		
	mov	hash_seg,ax	
l1:	call	init_table		
	mov	ax,clear	
	call	write_code
	call	read_char	
l4:	xor	ah,ah		
l4a:	mov	prefix_code,ax	
	call	read_char	
	jc	l17		
	mov	k,al		
	mov	bx,prefix_code	
	call	lookup_code		
	jnc	l4a			
	call	add_code	
	push	bx		
	mov	ax,prefix_code	
	call	write_code
	pop	bx
	mov	al,k		
	cmp	bx,max_code	
	jl	l4		
	cmp	nbits,12	
	jl	l14		
	mov	ax,clear	
	call	write_code
	call	init_table	
	mov	al,k			
	jmp	l4			
l14:	inc	nbits			
	shl	max_code,1		
	jmp	l4			
l17:	mov	ax,prefix_code		
	call	write_code
	mov	ax,eof		
	call	write_code
	mov	ax,bit_offset
	cmp	ax,0
	je	l18
	mov	cx,8	
	xor	dx,dx
	div	cx
	or	dx,dx	
	je	l17a			
	inc	ax
l17a:	call	flush			
l18:	ret			
compress	endp

data	segment
hash_seg	dw	?
prefix_code	dw	?
free_code	dw	?
max_code	dw	?
nbits		dw	?
k		db	?
data	ends

init_table	proc	near
	mov	nbits,9		
	mov	max_code,512	
	push	es	
	mov	es,hash_seg	
	mov	ax,-1		
	mov	cx,640	
	mov	di,offset hash
rep	stosw	
	pop	es			
	mov	free_code,first_free
	ret			
init_table	endp

write_code	proc	near
	push	ax			
	mov	ax,bit_offset	
	mov	cx,nbits		
	add	bit_offset,cx
	mov	cx,8		
	xor	dx,dx
	div	cx
	cmp	ax,1020	
	jl	wc1		
	call	flush			
	push	dx			
	add	dx,nbits			
	mov	bit_offset,dx		
	pop	dx			
	add	ax,offset output_data	
	mov	si,ax			
	mov	al,byte ptr [si]		
	mov	output_data,al
	xor	ax,ax			


wc1:	add	ax,offset output_data	
	mov	di,ax		
	pop	ax			
	mov	cx,dx		
	xor	dx,dx			
	jcxz	wc3
wc2:	shl	ax,1		
	rcl	dx,1
	loop	wc2
	or	al,byte ptr [di]	
wc3:	stosw			
	mov	al,dl		
	stosb		
	ret	
write_code	endp

data	segment
bit_offset	dw	?
output_data	db	1024 dup (?)
data	ends

flush		proc	near
	push	ax		
	push	bx			
	push	cx
	push	dx
	hwrite	output_handle,output_data,ax	
	pop	dx
	pop	cx
	pop	bx
	pop	ax
	ret				
flush		endp

read_char	proc	near
	mov	di,input_offset		
	cmp	di,input_size
	jl	rd1			
	hread	input_handle,input_data,1024
	cmp	ax,0			
	je	rd2			
	mov	input_size,ax		
	mov	input_offset,0		
	mov	di,0
rd1:	lea	si,input_data[di]	 
	lodsb				
	inc	input_offset		
	clc				
	ret
rd2:	stc				
	ret				
read_char	endp

data	segment
input_data	db	1024 dup (?)
input_offset	dw	0
input_size	dw	0
data	ends

lookup_code	proc	near
	push	ds			
	mov	ds,hash_seg		
	call	index			
	mov	di,0			
	cmp	[si].first,-1		
	je	gc4			
	inc	di			
	mov	bx,[si].first		
gc2:	call	index			
	cmp	[si].char,al		
	jne	gc3			
	clc				
	mov	ax,bx			
	pop	ds			
	ret				
gc3:	cmp	[si].next,-1		
	je	gc4			
	mov	bx,[si].next		
	jmp	gc2			
gc4:	stc				
	pop	ds			
	ret				
lookup_code	endp

index		proc	near
	mov	si,bx			
	shl	si,1			
	shl	si,1
	add	si,bx
	ret
index		endp

add_code	proc	near
	mov	bx,free_code		
	push	ds			
	mov	ds,hash_seg
	cmp	di,0			
	je	ac1			
	mov	[si].next,bx		
	jmp	short ac2
ac1:	mov	[si].first,bx		
ac2:	cmp	bx,maxmax		
	je	ac3			
	call	index			
	mov	[si].first,-1		
	mov	[si].next,-1
	mov	[si].char,al		
	inc	es:free_code	
ac3:	pop	ds			
	ret
add_code	endp

code	ends

	end	start
Vodolei вне форума Ответить с цитированием
Старый 18.12.2012, 07:03   #4
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Vodolei
зависит не от диалекта ассемблера, а от операционной системы, под которую ты будешь писать свои программы, если под Windows, то для ввода и вывода из msvcrt.dll вызываются API-функции scan и print, если под DOS, то для ввода и вывода там используются 9 и 0Ah функции 21h. И это работает для любого диалекта ассемблера (masm, tasm, fasm, wasm, poasm, gas и т.д.) хочешь оформить всё это в виде макроса -- напиши его сам, это совсем не сложно
Из примера видно, что пишешь под ДОС
Сделай в Гугле поиск файла macros.mlb

Последний раз редактировалось Mikl___; 18.12.2012 в 07:05.
Mikl___ вне форума Ответить с цитированием
Старый 18.12.2012, 07:17   #5
Vodolei
 
Регистрация: 14.12.2012
Сообщений: 3
По умолчанию

Я его уже искал в гугле. Не нашел. Подумал, вдруг стандартный. Видимо, нет.
Vodolei вне форума Ответить с цитированием
Старый 18.12.2012, 10:33   #6
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Цитата:
Я его уже искал в гугле. Не нашел.
Давай проверим, вбиваю "include macros.mlb" и сразу кроме этого сайта еще три:
  • Какой компилятор использовать? - Assembler - Форум программистов
    programmersforum.ru › ... › Assembler
    Сообщений: 5 - Авторов: 3
    clear equ 256 first_free equ 258 maxmax equ 4096 include macros.mlb ;запись хеш-таблицы hash_rec struc first dw ? next dw ? char db ? hash_rec ends ...
  • title lzcomp - file compressor using limpel-ziv algorithm ;Tom Pfau ...
    www.apple2.org.za/.../LZCO... - Перевести эту страницу... ;Clear code eof equ 257 ;End of file marker first_free equ 258 ;First free code maxmax equ 4096 ;Max code + 1 include macros.mlb ;Hash table entry hash_rec ...
  • title lzdcmp - file decompressor using limpel-ziev algorithm ;Tom ...
    www.apple2.org.za/.../LZDC... - Перевести эту страницу... Corporation ;Parsippany, NJ ;Constants clear equ 256 eof equ 257 first_free equ 258 maxmax equ 4096 include macros.mlb ;Hash table entry hash_rec struc ...
  • Limpel-ziv алгоритм. Сжатие и распаковка файлов - Assembler ...
    *************/readarticle.php?article_id=2659
    1 сообщение - 11 июл 2010
    include macros.mlb ;Hash table entry hash_rec struc first dw ? ; First entry with this value next dw ? ; Next entry along chain char db ? ; Suffix ...

Перехожу ко второй ссылке: http://www.apple2.org.za/gswv/a2zine.../LZCOMPasm.txt
твой asm-текст один в один передран отсюда
поднимаюсь на http://www.apple2.org.za/gswv/a2zine...s/LZCompDecomp
Parent Directory | -|
LEMPELZV.BXY |17-Jun-2001 01:39 | 19K
LZ.TXT |17-Jun-2001 01:39 |3.5K
LZCOMPasm.txt |17-Jun-2001 01:39 |7.1K
LZCOMPexe.txt |17-Jun-2001 01:39 |3.5K
LZDCMPasm.txt |17-Jun-2001 01:39 |6.0K
LZDCMPexe.txt |17-Jun-2001 01:39 |3.5K
MACROSmlb.txt |17-Jun-2001 01:39 |6.3K

MACROSmlb.txt это и есть тот самый файл MACROS.mlb, который ты ищешь

Последний раз редактировалось Mikl___; 18.12.2012 в 10:43.
Mikl___ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой алгоритм использовать? EniOk Помощь студентам 1 07.04.2011 19:03
Какой компилятор выбрать?? vov4ara Софт 1 24.11.2010 23:54
посоветуйте какой нибудь компилятор для ассемблера alex(21) Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 7 24.05.2010 22:37
Какой компилятор лучший? Mikhail Bakurov Свободное общение 12 04.02.2009 08:39
Какой компилятор лучше? Veytarn Общие вопросы C/C++ 2 09.01.2007 21:29