Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Hello World! - 16 байт

2.3K
10 ноября 2002 года
Lotos
8 / / 10.11.2002
Получил задание на лабе в универе. Hello world! - 16 байт. Командную строку не использовать.
Всей группой мучаемся месяц - ничего.
Как написать:-? :-? :-?
16 байт с данными. Может применить какую-нибудь кодировку.
Страницы:
467
16 ноября 2002 года
Edmond
72 / / 20.05.2000
Мда в эквиваленте:

'48 65 6C 6C 6F 20 57 6F 72 6C 64 21'


Разница между самым большим и малым значениям выше 64 :(((
Так что можете попращаться с предыдущей мессагой... Она сюда не подходит
467
16 ноября 2002 года
Edmond
72 / / 20.05.2000
ОК

Вот что я порпобовал

_looplabel: mov cl,12
lodsb
int 29h
loop _looplabel
retn

Но от этого не легче.... разве что порытаться раскрыть код... но:

1. Никто не гарантирует что получиться
2. Займёт уёму времени
476
16 ноября 2002 года
man2002ua
218 / / 16.10.2002
Цитата:
Originally posted by Edmond
ОК

Вот что я порпобовал

_looplabel: mov cl,12
lodsb
int 29h
loop _looplabel
retn

Но от этого не легче.... разве что порытаться раскрыть код... но:

1. Никто не гарантирует что получиться
2. Займёт уёму времени



lodsb по умолчанию указ. на cs:0 > CD 20
т.е.

395
16 ноября 2002 года
RelB
367 / / 09.11.2002
Можно я попытаюсь разубедить вас мучиться замутить вывод этой "Hello World!". Ну не получится это у вас, не получится. Конечно может я и не прав, но давайте немного порассуждаем.

Самый короткий (на мой взгляд) вывод строки посимвольно (если мы собираемся кодировать строку, то можно использовать только посимвольный вывод):

mov si,offset Data ;3 байта
mov cl,Length ;2 байта
looping:
lodsb ;1 байт
; 1-е раскодирование
int 29h ;2 байта
; 2-е раскодирование
int 29h ;2 байта
loop looping ;2 байта
ret ;1 байт
;итого 13 байт

Допустим, что вы умудрились так закодировать строку плюс словарь к ней (если не использовать таблицу ASCII в качестве словаря), что она упряталась в этот самый код. Конечно, вероятность такого исхода очень близка к нулю, но все же допустим. Заметим, что на символ потребуется даже теоретически 4 бита, т.е. будем считать, что в одном байте два символа.Для 1-го раскодирования можно использовать разлиные манипуляции с битами, операции деления, aam и т.д. Все эти операции занимают минимум 2 байта (включая aam). Остался в распоряжении 1 байт. Затем нам нужно выполнить 2-е раскодирование. Это может быть просто перемещение остаточного результата от первого раскодирования в al. Конечно, если вы умудритесь это зделать за один байт, то все будет круто 8). Но мне кажется, что ни фига (извините) у вас не получится.

Да, и если использовать просто Hello World! в качестве кода, то тоже ничего не выдет, т.е. обязательно надо символы кодировать, чтобы подогнать к нужным нам инструкциям :).

Отсюда остается последний выход, закодировать все символы так, чтобы в закодированном виде они представляли программу, а при раскодировании Hello World! Тогда можно использовать на один символ один байт и у нас тогда целых пять байт :) на перекодировщик.

Во всех случаях получается что все коды инструкции зависимы друг от друга :), а это очень и очень редкий случай. Так что все вышенаписанное полный бред и вы вообще молодцы что дочитали до конца :D

Все это мои личные доводы и вы можете не обращать на них никакого внимания.
395
16 ноября 2002 года
RelB
367 / / 09.11.2002
Прочитав все что здесь понаписали (включая и свое последнее сообщение :)), я понял, что мой вариант с перекодированием ASCII таблицы самый рабочий хоть и через заднее место :D
1.8K
17 ноября 2002 года
Exfector
74 / / 12.10.2002
Цитата:
Originally posted by man2002ua
а где можно раздобыть справочник прерываний?



http://ctyme.com/intr/int.htm

476
18 ноября 2002 года
man2002ua
218 / / 16.10.2002
Цитата:
Originally posted by Exfector


http://ctyme.com/intr/int.htm



10x!

442
26 ноября 2002 года
HexoGenus
121 / / 20.03.2000
Хмммм... а для того что бы вызвать прерывание с последующим вылетом из программы обязательно разве INT вызывать?
Я кажется где то встречал реализацию в которой шел просто какой-то странный способ перехода в таблицу прерываний и команда выхода из прерывания сразу закрывала и программу...
Перерыл все свои заначки но так этот способ и не нашел :-(((
1.9K
11 декабря 2002 года
Fantomas
32 / / 04.12.2002
.model tiny
.code
org 100h
s:
mov ah,9
lea dx,buf
int 21h
ret
buf db 'Hello world$'
end s


[COLOR=red]niznaju skolko wiesit![/COLOR]
395
11 декабря 2002 года
RelB
367 / / 09.11.2002
Цитата:
Originally posted by Fantomas
.model tiny
.code
org 100h
s:
mov ah,9
lea dx,buf
int 21h
ret
buf db 'Hello world$'
end s


[COLOR=red]niznaju skolko wiesit![/COLOR]



Обалдеть, а мы то мучались :D. Ты хоть ранние посты читал? :)

476
11 декабря 2002 года
man2002ua
218 / / 16.10.2002
Цитата:
Originally posted by RelB


Обалдеть, а мы то мучались :D. Ты хоть ранние посты читал? :)



:D :D
Lotos, когда препод обещал ответ выдать?

2.3K
15 декабря 2002 года
Lotos
8 / / 10.11.2002
Цитата:
Originally posted by man2002ua


:D :D
Lotos, когда препод обещал ответ выдать?



Препод согласился принять такой вариант:

.model tiny
.code
org 100h
beg:
mov ah,0Ah
int 21h
end beg

4 байта

В коммандной строке: hello.com < text.txt

В text.txt содержится строка Hello World! (12 байт)

Выход из программы по Ctrl+C.
Вариант "кривой", но другой мы не придумали.

356
16 декабря 2002 года
molnij
159 / / 20.06.2000
А спроси препода устроит его такой вариант:
.model tiny
.code
org 100h
start:
mov dx,offset mess
mov ah,9
int 21h
ret
mess db " World!",'$'
end start

Фишка в следующем: файл называется HEllo.com (ну или asm) и когда пишешь в командной строке:
>>F:\Ishodnik\Asm\hello>Hello
он выдает:
>> World!
у меня как раз 16 байт, а если без пробела - 15 даже... хи-хи-хи...
476
16 декабря 2002 года
man2002ua
218 / / 16.10.2002
ваш препод - извращенец и редкостный садист...
командную строку же использовать нельзя - его слова?
2.3K
17 декабря 2002 года
Lotos
8 / / 10.11.2002
Цитата:
Originally posted by man2002ua
ваш препод - извращенец и редкостный садист...
командную строку же использовать нельзя - его слова?



Но ведь это использование перенаправления, а не коммандной строки. Хотя по большому счету я согласен.

1.8K
17 декабря 2002 года
Exfector
74 / / 12.10.2002
Цитата:
Originally posted by Lotos


Но ведь это использование перенаправления, а не коммандной строки. Хотя по большому счету я согласен.



Чемто мене это байку, а может и не байку про одного студента напоменает. Опоздал он значеть однажды на лекцию, а лектор в это время задачку записивал и добавил, что она не решаема. Он значеть это всё пропустил, ну и записал её. Всю ночь мучился, но всётаки решил!

2.3K
18 декабря 2002 года
Lotos
8 / / 10.11.2002
Цитата:
Originally posted by Exfector


Чемто мене это байку, а может и не байку про одного студента напоменает. Опоздал он значеть однажды на лекцию, а лектор в это время задачку записивал и добавил, что она не решаема. Он значеть это всё пропустил, ну и записал её. Всю ночь мучился, но всётаки решил!



Как препод сказал, так я и написал. А мучался я не один, а весь поток (человек 120).:)

2.1K
31 декабря 2002 года
xkip
19 / / 09.12.2002
Всем хай!

Дык че там? Когда решение препода опубликуешь?

Видя такие дела, я сразу в HIEW:

hello.com

00: B409 mov ah,009
02: BA0901 mov dx,00109
05: CD21 int 021
07: CD20 int 020
09: дальше в HEX: "Hello World!$"

т.е. без компиляторов.
ето 22 байта

ну я непробовал, но может для записи напрямую в видеопамять потребуется меньшаю прога, но судя по намекам препода - все ето фигня, надо придумать алгоритм перекодирования..

первое шо приходит в голову - просто при записи в видеопамять находу делать смещения и прибавлять расчитанное число.. ("!" можно написать отдельно) токо я непробовал :)
довольно простой алгоритм..

про перенаправление - мона обойтись и без text.txt:

echo Hello World!|hello.com

вроде так..

С Новым, кстати, Годом!
31K
10 июля 2007 года
lamer19@ya.ru
1 / / 10.07.2007
1) Можно использовать окружение
В окружении устанавливаем ручками в командном интерпретаторе
set 0=Hello World!
и выводим его следующим кодом 16 байт!
Код:
.model tiny
.radix 16
.286
.Code
org 2c
Envir   label   word
.Startup
    mov ax,Envir
    push    ax
    pop ds
    mov si,3
NextChar:
    lodsb
    int 29h
    test    al,al
    jnz NextChar
@@Ret:
    ret
end

:)
1.9K
10 июля 2007 года
disasm
232 / / 06.02.2006
На http://www.farb-rausch.com/productions.php
увидел вемку fr016, в двух вариантах: 16 байт и 11 байт, обе демки выводят красивые(относительно их размера) видеоэффекты :)
Основная фишка: использование значений регистров, которые были перед стартом проги.
31K
12 июля 2007 года
50u15pec7a70r
1 / / 12.07.2007
18 байт (точно плюёт в открытом окне вин-хп):
48 65 6c 6c 6f 20 77 6f 72 6c 64 b4 09 ba 00 01 cd 21

17 байт (что-то не нравится в dx, надо подчистым dos):
48 65 6c 6c 6f 20 77 6f 72 6c 64 b4 09 b6 01 cd 21

а вообще это старая история про админов-програмистов, которые так развлекались. решение её - использовать математическую функцию для заполнения регистков. помоему, это было умножение (работает с ax и dx). в той истории даже решение, помоему, было. надо искать...
2.7K
13 июля 2007 года
barracuda
76 / / 29.03.2004
E8 01 35 48 65 6c 6c 6f 20 77 6f 72 6c 64 21
15 байт но вывод с мусором. Для Microsoft Windows XP [Версия 5.1.2600]
в других версиях возможно работать не будет так как используется функция по конкретному адресу 3601h +3h которая имеет вид

Код:
seg000:3601                 mov     si, 9086h
seg000:3604                 lodsb
seg000:3605                 mov     cl, al
seg000:3607                 xor     ch, ch
seg000:3609                 mov     ah, 6
seg000:360B
seg000:360B loc_0_360B:                             ;
seg000:360B                 lodsb
seg000:360C                 mov     dl, al
seg000:360E                 int     21h             ; DOS - DIRECT CONSOLE I/O CHARACTER OUTPUT
seg000:360E                                         ; DL = character <> FFh
seg000:360E                                         ;  Return: ZF set = no character
seg000:360E                                         ;   ZF clear = character recieved, AL = character
seg000:3610                 loop    loc_0_360B
seg000:3612                 retn

первую стоку (mov si, 9086h) пропускаем.
И конечно нет корректного завершения задачи :)
Но можно поискать другие куски кода :)
1.9K
13 июля 2007 года
disasm
232 / / 06.02.2006
Знать бы точное условие...
Какую именно строку надо вывести? Или надо вывести нечто, чтобы пользователь понял что это HelloWorld?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог