Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

помощь с асссемблером

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Веб-программинг] >> помощь с асссемблером
Имя
Сообщение << Старые топики   Новые топики >>
помощь с асссемблером - 2006-06-17 21:36:21   
буржуазия

Сообщений: 60
Оценки: 0
Присоединился: 2005-05-29 16:57:53
Дан текстовый файл с неким содержанием, написать прогу которая выводит содержимое файла на экран в обратном порядке..

надо написать на асме
Post #: 1
помощь с асссемблером - 2006-06-18 02:25:25   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
ну и?
если ты про линух, то тебе нужны сисколлы: open, sbrk, read, write, close. Хотя можно и без sbrk, но тогда понадобиться lseek, либо mmap. все эти сисколлы, замечательно описаны в man'ах.
ещё вопросы?
Post #: 2
помощь с асссемблером - 2006-06-18 10:39:59   
буржуазия

Сообщений: 60
Оценки: 0
Присоединился: 2005-05-29 16:57:53
quote:

—————-<BR>Цитата: Дата:18.06.2006 2:25:25, Автор:rgo ::
ну и?<BR>если ты про линух, то тебе нужны сисколлы: open, sbrk, read, write, close. Хотя можно и без sbrk, но тогда понадобиться lseek, либо mmap. все эти сисколлы, замечательно описаны в man'ах.<BR>ещё вопросы?
—————-




я в окошках работаю.. вот кусок программы, которая читает содержимое файла и выводит на экран только в непонятно какой системе счисления.. мне надо чтобы содерджимое файла выводилось в обратном порядке..

.model tiny
.stack 100h
.data
a db 'd:\prevednax.txt',0
.code
start:
mov ax,@data
mov ds,ax
;mov ah,3fh
;mov dx,offset a
;int 21h
mov ah,3dh
mov Al,0
mov dx,offset a
int 21h
mov ah,6h
mov dx,offset a
add dx,48
int 21h
mov ax,4c00h
int 21h
end start
Post #: 3
помощь с асссемблером - 2006-06-18 11:25:41   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
судя по `.model tiny' и прочим `int …' ты не в окошках работаешь, а в досе. [sm=2.gif]

quote:

—————-<BR>Цитата: Дата:18.06.2006 10:39:59, Автор:буржуазия ::
<BR>mov ah,3dh<BR>mov Al,0<BR>mov dx,offset a<BR>int 21h<BR>
—————-


почему al == нулю? Ты ведь читать хочешь, значит права на чтение тебе нужны, то есть младший бит должен быть установлен в 1.

И дальше, после этого `int 21h' ожидается, нечто в стиле:
jc error_opening_file<BR> mov bx, ax ; запхать полученный дескриптор в bx<BR> ;; а начиная отсюда, двигаясь с конца в начало читать блоками<BR> ;; и выводить эти блоки задом наперёд и когда все будет сделано<BR> ;; сказать:<BR> mov ax, 4c00h<BR> int 21<BR> ; ну или, в качестве более короткого варианта,<BR> ; можно просто `ret'<BR><BR>error_opening_file:<BR> mov ah, 9<BR> mov dx, offset cant_open_file_msg<BR> int 21h<BR> ret
Post #: 4
помощь с асссемблером - 2006-06-18 11:31:37   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
нее. асм, без тега не смотриться ни в какую. [sm=7.gif]<BR>а в html ничего типа табуляции нету? Чтобы выравниваться на определённые границы? Пробелами не здорово, когда шрифт не fixed.
Post #: 5
помощь с асссемблером - 2006-06-18 16:13:30   
буржуазия

Сообщений: 60
Оценки: 0
Присоединился: 2005-05-29 16:57:53
хм.. видимо руки кривые у меня [sm=aah.gif]
нифига не поучается..[sm=12.gif]
Post #: 6
помощь с асссемблером - 2006-06-18 18:01:59   
буржуазия

Сообщений: 60
Оценки: 0
Присоединился: 2005-05-29 16:57:53
возникли проблемы с реализацией.. [sm=15.gif] помогите пожалуйста, у меня не выходит [sm=15.gif]
Post #: 7
помощь с асссемблером - 2006-06-20 22:02:39   
буржуазия

Сообщений: 60
Оценки: 0
Присоединился: 2005-05-29 16:57:53
asm'ики вы где?
не дайте дядькам отчислить студента..[sm=aah.gif]

Post #: 8
помощь с асссемблером - 2006-06-21 08:57:29   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
ыых блин. я всегда знал что буржуи жадные. Бутылки пива однокурснику пожалеть – это ж надо! Никогда не поверю, что не втыкает никто на курсе.

чего-то у меня с утра приступ альтруизма случился [sm=sm128.gif].
я написал программулинку, но не в досе: dosemu у мну чегот не стоит. она линуховая и в att синтаксисе. конвертать лень, короче кому надо, тот пускай и портирует её в дос/tasm. где-то я видел конвёртер синтаксиса att->intel… позыркай на asm.sf.net. я короч пошёл работать.

<BR>sys_exit = 1<BR>sys_read = 3<BR>sys_write = 4<BR>sys_open = 5<BR>sys_close = 6<BR>sys_lseek = 19<BR><BR>BUF_SIZE = 4096<BR><BR> .section .data<BR>fname:<BR> .asciz &quot;./tmp.txt&quot;<BR>open_error_msg_len:<BR> .byte lseek_error_msg - open_error_msg - 1<BR>open_error_msg:<BR> .asciz &quot;Can't open file.\n&quot;<BR> .byte read_error_msg - lseek_error_msg - 1<BR>lseek_error_msg:<BR> .asciz &quot;lseek error\n&quot;<BR> .byte no_msg - read_error_msg - 1<BR>read_error_msg:<BR> .asciz &quot;Cant read.\n&quot;<BR>no_msg:<BR> .section .bss<BR>buf:<BR> .rept BUF_SIZE/4<BR> .long 0<BR> .endr<BR><BR> .section .text<BR> .globl _start<BR> <BR>_start: <BR> movl $sys_open, %eax # номер сискола в еах<BR> movl $fname, %ebx # имя файла<BR> xorl %ecx, %ecx # flags == O_RDONLY<BR> xorl %edx, %edx # mode == 0<BR> int $0x80<BR> cmpl $0, %eax<BR> jl open_error<BR> movl %eax, %ebx # дескриптор в ебх на вечное поселение<BR> xorl %ecx, %ecx<BR> movl $2, %edx # SEEK_END<BR> movl $sys_lseek, %eax<BR> int $0x80<BR> cmpl $0, %eax<BR> jl lseek_error<BR> andl $BUF_SIZE-1, %eax # eax = eax % BUF_SIZE<BR> movl $BUF_SIZE, %ecx<BR> cmovzl %ecx, %eax # eax = (eax == 0 ? ecx : eax);<BR> movl %eax, %ecx<BR>main_loop:<BR># сдвинем взад указатель<BR> pushl %eax #в еах должено лежать размер сколько читать надо<BR> #а в ецх насколько двигать<BR> movl $sys_lseek, %eax<BR> xorl %edx, %edx<BR> incl %edx # SEEK_CUR<BR> neg %ecx # взад двигаем<BR> int $0x80<BR> cmpl $0, %eax<BR> jl lseek_end_or_error<BR># а теперь читаем<BR> movl $sys_read, %eax<BR> popl %edx # size<BR> movl $buf, %ecx<BR> int $0x80 # do read!<BR> cmpl $0, %eax<BR> jl read_error<BR><BR> movl %ecx, %esi # buf<BR> movl %ecx, %edi<BR> movl %eax, %ecx # количество прочитанных байт<BR> pushl %eax<BR> pushl %esi<BR> decl %ecx<BR>reverse_buf_loop: <BR> lodsb<BR> xchgb %al, (%edi, %ecx, 1)<BR> stosb<BR> subl $2, %ecx<BR> jge reverse_buf_loop<BR># вывод развёрнутого буфера<BR> movl $sys_write, %eax<BR> popl %ecx # buf<BR> popl %edx # size<BR> pushl %ebx<BR> xorl %ebx, %ebx<BR> incl %ebx # STDOUT_FILENO<BR> int $0x80 # do write<BR> popl %ebx<BR> movl %eax, %ecx<BR> movl $BUF_SIZE, %eax<BR> addl %eax, %ecx<BR> jmp main_loop<BR><BR>open_error:<BR> movl $open_error_msg, %ecx<BR> jmp error<BR>lseek_end_or_error:<BR> cmpl $-22, %eax # EINVAL -- значит мы вылезли за границу файла<BR> jne lseek_error<BR>ok_exit:<BR> xorl %ebx, %ebx<BR>exit:<BR> xorl %eax, %eax<BR> incl %eax<BR> int $0x80<BR> <BR>lseek_error: <BR> movl $lseek_error_msg, %ecx<BR> jmp error<BR>read_error:<BR> movl $read_error_msg, %ecx<BR>error:<BR> pushl %ebx<BR> movzx -1(%ecx), %edx<BR> movl $2, %ebx # STDERR_FILENO<BR> movl $sys_write, %eax<BR> int $0x80<BR><BR> popl %ebx<BR> movl $sys_close, %eax<BR> int $0x80<BR> xorl %ebx, %ebx<BR> incl %ebx<BR> jmp exit<BR>
Post #: 9
помощь с асссемблером - 2006-06-24 10:39:33   
OFF1genny_su1c1D

Сообщений: 103
Оценки: 0
Присоединился: 2006-02-18 11:21:27
Ты с прерываниями напаришься - юзаи апи и мсдн тебе в помошь…
Post #: 10
Страниц:  [1]
Все форумы >> [Веб-программинг] >> помощь с асссемблером







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.