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

Ваш аккаунт

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

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

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

Hello World! - 16 байт

2.3K
10 ноября 2002 года
Lotos
8 / / 10.11.2002
Получил задание на лабе в универе. Hello world! - 16 байт. Командную строку не использовать.
Всей группой мучаемся месяц - ничего.
Как написать:-? :-? :-?
16 байт с данными. Может применить какую-нибудь кодировку.
Страницы:
3
10 ноября 2002 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by Lotos
Получил задание на лабе в универе. Hello world! - 16 байт. Командную строку не использовать.
Всей группой мучаемся месяц - ничего.
Как написать:-? :-? :-?



16 байт - это вместе с данными, т.е. вместе с "Hello world" (12 байт, если в лоб)?

525
11 ноября 2002 года
December
82 / / 20.08.2000
Цитата:
Originally posted by Lotos
Получил задание на лабе в универе. Hello world! - 16 байт. Командную строку не использовать.
Всей группой мучаемся месяц - ничего.
Как написать:-? :-? :-?



echo Hello world!

пардон, 17 символов

476
11 ноября 2002 года
man2002ua
218 / / 16.10.2002
в 4 байта впихнуть вывод строки...?
--- в 22 получается...
1.8K
11 ноября 2002 года
Exfector
74 / / 12.10.2002
v 12 moshno uloshit'sya :)
pochitajte intel'skuyu documentatziyu po opcodes i ihnej strukture ...
476
11 ноября 2002 года
man2002ua
218 / / 16.10.2002
Цитата:
Originally posted by Exfector
v 12 moshno uloshit'sya :)
pochitajte intel'skuyu documentatziyu po opcodes i ihnej strukture ...



Что - "в 12 ???" - только "Hello World!" занимает 12 байт! У меня общий код = 22 байта (со строкой)

2.3K
12 ноября 2002 года
Lotos
8 / / 10.11.2002
Цитата:
Originally posted by Exfector
v 12 moshno uloshit'sya :)
pochitajte intel'skuyu documentatziyu po opcodes i ihnej strukture ...


Где почитать???????????:-?

475
12 ноября 2002 года
Winnie
90 / / 20.03.2000
Разве что попробовать данные как код использовать - ничего там не совпадает с кодами инструкций
1.8K
12 ноября 2002 года
Exfector
74 / / 12.10.2002
Цитата:
Originally posted by Lotos

Где почитать???????????:-?



тут .. http://developer.intel.com/design/pentium4/manuals/245471.htm
;----------------------------
хмм .. я пока только в 19 байт уложился :(
надо поискать возможности реализовать cross_over_code

Удачи !

476
12 ноября 2002 года
man2002ua
218 / / 16.10.2002
покажи, как в 19 байт уложился...
1.8K
13 ноября 2002 года
Exfector
74 / / 12.10.2002
Цитата:
Originally posted by man2002ua
покажи, как в 19 байт уложился...



Ну если до выполнения программы скопировать вектор прерывания 21h в вектор прерывания 03h ...

;--------------------------------------------
01. mov DX,0107h
02. mov AH,09h
03. int
04. retn
;-------------------------------------------
01. mov reg16,imm16 --> 1011 1b
reg16 --> 010b
imm16 --> 0107h

==> 0BAh 07h 01 /3Byte
;-------------------------------------------
02. mov reg8,imm8 --> 1011 0b
reg8 --> 100b
imm8 --> 09h

==> 0B4h 09h /2Byte
;-------------------------------------------
03. int --> 1100 1100b

==> 0CCh /1Byte
;-------------------------------------------
04. retn --> 1100 0011

==> 0C3h /1Byte
;-------------------------------------------
//7Byte
+ сообщение /12Byte
-------
19Byte

1.8K
13 ноября 2002 года
Exfector
74 / / 12.10.2002
блин, там ещё и "!" ... извеняюсь, 20 байт.
476
13 ноября 2002 года
man2002ua
218 / / 16.10.2002
а рабочий код испытывал?
395
13 ноября 2002 года
RelB
367 / / 09.11.2002
Цитата:
Originally posted by man2002ua
а рабочий код испытывал?



Да все это работает. Чего вы мучаетесь. Я считаю что это не возможно. Самый короткий код для TASM следующий

.model tiny
.code

org 100h

Start:
mov dx,offset Mes ; 3 байта
mov ah,09h ; 2 байта
int 21h ; 2 байта
retn ; 1 байт
Mes 'Hello World!$' ; 13 байт
end Start ; Итого 21 байт

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

395
13 ноября 2002 года
RelB
367 / / 09.11.2002
Цитата:
Originally posted by man2002ua
а рабочий код испытывал?



Да все это работает. Чего вы мучаетесь. Я считаю что это не возможно. Самый короткий код для TASM следующий

.model tiny
.code

org 100h

Start:
mov dx,offset Mes ; 3 байта
mov ah,09h ; 2 байта
int 21h ; 2 байта
retn ; 1 байт
Mes 'Hello World!$' ; 13 байт
end Start ; Итого 21 байт

все, больше не выжмите.
Если захотите сжать надпись, на раскодирование потратите больше, плюс словарь нужен. Даже без словаря - понт! И не надо изучать опкоды, ничего это не даст!

395
13 ноября 2002 года
RelB
367 / / 09.11.2002
Sorry, после Mes db забыл, т.е.
Mes db 'Hello World!$'
476
13 ноября 2002 года
man2002ua
218 / / 16.10.2002
но на пустом месте лабы не дают!

Lotos - как хоть курс называется?
1.8K
13 ноября 2002 года
Exfector
74 / / 12.10.2002
а чем этот тебе не рабочий ?
1.8K
13 ноября 2002 года
Exfector
74 / / 12.10.2002
все, больше не выжмите.
Если захотите сжать надпись, на раскодирование потратите больше, плюс словарь нужен. Даже без словаря - понт! И не надо изучать опкоды, ничего это не даст!

;------------------ EOF ------------------

ты хоть раз про такую фичу как cross_over_code слышал ?
2.3K
14 ноября 2002 года
Lotos
8 / / 10.11.2002
Цитата:
Originally posted by man2002ua
но на пустом месте лабы не дают!

Lotos - как хоть курс называется?



На пустом месте лабы действительно не дают. Курс- Системное программное обеспечение, т.е. дебри ассемблера.
Единственное, что сказали по поводу проги, надо кодировать каждый символ несколькими битами.:)

395
14 ноября 2002 года
RelB
367 / / 09.11.2002
Цитата:
Originally posted by Exfector

ты хоть раз про такую фичу как cross_over_code слышал ?



Ну давай, просвети меня :)

395
14 ноября 2002 года
RelB
367 / / 09.11.2002
Цитата:
Originally posted by Lotos


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



Ну можно попробывать закодировать. Но там у нас
девять различных символов, плучается что можно закодировать все по три бита, а один 4-ре (теоретически) через биноминальное дерево. Но на раскодирование этой лабуды ты затратишь гораздо больше+словарь для раскодирования. Ну а если для раскодирования как словарь использовать готовую таблицу символов, которая в памяти? Конечно можно: запустить прогу, которая перекодит таблицу символов для нас, а потом уже наша прога будет пользоваться ей. Можно попробывать, но это теоретически. А кто-нить слышал, можно ли имя своей проги как-нить вынуть из памяти, тогда можно было бы часть сообщения в имени файла проги записать :)

395
14 ноября 2002 года
RelB
367 / / 09.11.2002
Тут у меня мысль вообще поперла :)
А если нам перед запуском проги просто перекодировать таблицу символов, ну скажем с 230?
Можно тупо закодировать последовательно, т.е.
код 230 - символ 'H'
231 - 'e'
232 - 'l'
233 - 'l'

и т.д.

И потом написать прогу

mov cx,12 ;3 байта
mov ax,02E6h ;3 байта (E6 - 230)
lp:
push ax ;1 байт, al после вызова кажись обнуляется
int 21h ;2 байта
pop ax ;1 байт
inc al ;1 байт
loop lp ;2 байта
ret ;1 байт

Итого у нас 14 байт. Хе - хе :D
476
14 ноября 2002 года
man2002ua
218 / / 16.10.2002
это выход, но "черный"... если исправлять таблицу символов, то не проще ли просто написать в видеопамять эту строку руками...
395
14 ноября 2002 года
RelB
367 / / 09.11.2002
Цитата:
Originally posted by man2002ua
это выход, но "черный"... если исправлять таблицу символов, то не проще ли просто написать в видеопамять эту строку руками...



А как ты ее умудришься запихнуть с кодом и данными на 16 байт, только настойка сегментного регистра на видеопамять 4 байта сожрет если самым коротким путем пойти

push 0b800h ; 3 байта
pop es ; 1 байт

Ответ никак. Ведь кто-то предлагал вектор прерывания заранее поменять. Почему ты этот путь черным не назал?

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


А как ты ее умудришься запихнуть с кодом и данными на 16 байт, только настойка сегментного регистра на видеопамять 4 байта сожрет если самым коротким путем пойти

push 0a000h ; 3 байта
pop es ; 1 байт

Ответ никак. Ведь кто-то предлагал вектор прерывания заранее поменять. Почему ты этот путь черным не назал?



Замена прерывания - это вообще не выход :)
а насчет видеопамяти - так напрямую, в отладчике писать :)))

2.3K
15 ноября 2002 года
Lotos
8 / / 10.11.2002
Цитата:
Originally posted by RelB
Тут у меня мысль вообще поперла :)
А если нам перед запуском проги просто перекодировать таблицу символов, ну скажем с 230?
Можно тупо закодировать последовательно, т.е.
код 230 - символ 'H'
231 - 'e'
232 - 'l'
233 - 'l'

и т.д.

И потом написать прогу

mov cx,12 ;3 байта
mov ax,02E6h ;3 байта (E6 - 230)
lp:
push ax ;1 байт, al после вызова кажись обнуляется
int 21h ;2 байта
pop ax ;1 байт
inc al ;1 байт
loop lp ;2 байта
ret ;1 байт

Итого у нас 14 байт. Хе - хе :D



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

3
15 ноября 2002 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by Lotos


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



Был такой короткометражный фантастический фильм, там собрали группу ученых, показали им хронику, на которой какой-то Кулибин изобрел ранцевый антигравитационный двигатель и разбился при испытаниях. После этого ученые несколько месяцев грызли науку. Потом оказалось, что хроника была фальшивой, но ученые к тому времени уже изобрели такой же двигатель.
Похожая ситуация? :D

476
15 ноября 2002 года
man2002ua
218 / / 16.10.2002
да и рассказ такой был про вечный двигатель - дали дум ученым машинку, к-я работала все время - они ее раскрутили всю, кроме маленькой черной коробочки и короче сделали вечный двигатель... как потом оказалось - коробочка была батарейкой...
476
15 ноября 2002 года
man2002ua
218 / / 16.10.2002
Цитата:
Originally posted by Lotos
Получил задание на лабе в универе. Hello world! - 16 байт. Командную строку не использовать.



Командная строка имеется ввиду - "параметры командной строки"?

потому, что, этот пример работает так:
la.com "Hello World!"

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


Командная строка имеется ввиду - "параметры командной строки"?

потому, что, этот пример работает так:
la.com "Hello World!"



Если бы так было можно, то это было бы слишком просто и писалось за пару минут.

503
16 ноября 2002 года
CD
39 / / 20.12.1999
Интересно, а в условие входит нормальное завершение программы?
476
16 ноября 2002 года
man2002ua
218 / / 16.10.2002
Цитата:
Originally posted by Lotos


Если бы так было можно, то это было бы слишком просто и писалось за пару минут.



вот и я говорю... А когда препод обещал показать, как это реализовано?

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



Забейте на препода!!! :D :D

Символы можно спокойно обрезать до 4 бит.... (первая половина ascii)
Это уже в данных не 12, а 6 байт и того 10 байт на прогу.... вполне не плохо

Более того, если употребить обратный алгоритм команды ааm!!! То есть закодировать этут 4 битную строку..., то можно сделать очень маленький и красивый распоковщик.

Команда aam напомню осуществляет деление на 10
при этом остаток помещаеться в ah, а в al -- часное....

Если закодировать строку так, чтобы при aam байт из строки получался ax - с символами... то тогда
вывод будет такой....

(а это возможно поскольку буквы не превышают значения 64h..., вот про "!" я не помню)

;;=========================================
Вывод!!!
Вывод без косоли?*????
А вот он очень простой!!! без всякого там обращения к видио памяти!!!

(это ком файл)

start:
mov cl,6
looping:
lodsb
;; Сейчас в al оказываются два символа
;; как их разбить???

aam
;; Теперь в al, ah наши байты
int 29h
mov al,ah
int 29h
loop looping

Даже если я не влжился.... Этот код только на вскидку...

Так что удачи.....
Предел ли 16???? Не знаю:D :D

P.S.
Даже если окажеться, что aam метод не подойдёт..., есть подобные команды, которые дадут нужный эффект

476
16 ноября 2002 года
man2002ua
218 / / 16.10.2002
"Н" = 48h
" " = 20h - причем не вначале и не вконце!
467
16 ноября 2002 года
Edmond
72 / / 20.05.2000
Цитата:
Originally posted by man2002ua
"Н" = 48h
" " = 20h - причем не вначале и не вконце!



ОК. 4 бита изгаляються :) (между H и w) большой диапазон бббблинн... хотя всё таки разработать примитивный вариант архивации можно...

К сожелению нет под рукой таблицы ASCII.....

476
16 ноября 2002 года
man2002ua
218 / / 16.10.2002
:) напомни лучше - что за прерывание такое 29?
467
16 ноября 2002 года
Edmond
72 / / 20.05.2000
Цитата:
Originally posted by man2002ua
:) напомни лучше - что за прерывание такое 29?



:)
Это такое недокументированное прерываение ДОС, которое выводит символ в al

476
16 ноября 2002 года
man2002ua
218 / / 16.10.2002
а где можно раздобыть справочник прерываний?
467
16 ноября 2002 года
Edmond
72 / / 20.05.2000
Цитата:
Originally posted by man2002ua
а где можно раздобыть справочник прерываний?



Не знаю :)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог