Hello World! - 16 байт
Всей группой мучаемся месяц - ничего.
Как написать:-? :-? :-?
16 байт с данными. Может применить какую-нибудь кодировку.
Получил задание на лабе в универе. Hello world! - 16 байт. Командную строку не использовать.
Всей группой мучаемся месяц - ничего.
Как написать:-? :-? :-?
16 байт - это вместе с данными, т.е. вместе с "Hello world" (12 байт, если в лоб)?
Получил задание на лабе в универе. Hello world! - 16 байт. Командную строку не использовать.
Всей группой мучаемся месяц - ничего.
Как написать:-? :-? :-?
echo Hello world!
пардон, 17 символов
--- в 22 получается...
pochitajte intel'skuyu documentatziyu po opcodes i ihnej strukture ...
v 12 moshno uloshit'sya :)
pochitajte intel'skuyu documentatziyu po opcodes i ihnej strukture ...
Что - "в 12 ???" - только "Hello World!" занимает 12 байт! У меня общий код = 22 байта (со строкой)
v 12 moshno uloshit'sya :)
pochitajte intel'skuyu documentatziyu po opcodes i ihnej strukture ...
Где почитать???????????:-?
Где почитать???????????:-?
тут .. http://developer.intel.com/design/pentium4/manuals/245471.htm
;----------------------------
хмм .. я пока только в 19 байт уложился :(
надо поискать возможности реализовать cross_over_code
Удачи !
покажи, как в 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
а рабочий код испытывал?
Да все это работает. Чего вы мучаетесь. Я считаю что это не возможно. Самый короткий код для 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 байт
все, больше не выжмите.
Если захотите сжать надпись на раскодирование потратите больше, плюс словарь нужен. Даже без словаря понт! И не надо изучать опкоды, ничего это не даст!
а рабочий код испытывал?
Да все это работает. Чего вы мучаетесь. Я считаю что это не возможно. Самый короткий код для 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 байт
все, больше не выжмите.
Если захотите сжать надпись, на раскодирование потратите больше, плюс словарь нужен. Даже без словаря - понт! И не надо изучать опкоды, ничего это не даст!
Mes db 'Hello World!$'
Lotos - как хоть курс называется?
Если захотите сжать надпись, на раскодирование потратите больше, плюс словарь нужен. Даже без словаря - понт! И не надо изучать опкоды, ничего это не даст!
;------------------ EOF ------------------
ты хоть раз про такую фичу как cross_over_code слышал ?
но на пустом месте лабы не дают!
Lotos - как хоть курс называется?
На пустом месте лабы действительно не дают. Курс- Системное программное обеспечение, т.е. дебри ассемблера.
Единственное, что сказали по поводу проги, надо кодировать каждый символ несколькими битами.:)
ты хоть раз про такую фичу как cross_over_code слышал ?
Ну давай, просвети меня :)
Единственное, что сказали по поводу проги, надо кодировать каждый символ несколькими битами.:)
Ну можно попробывать закодировать. Но там у нас
девять различных символов, плучается что можно закодировать все по три бита, а один 4-ре (теоретически) через биноминальное дерево. Но на раскодирование этой лабуды ты затратишь гораздо больше+словарь для раскодирования. Ну а если для раскодирования как словарь использовать готовую таблицу символов, которая в памяти? Конечно можно: запустить прогу, которая перекодит таблицу символов для нас, а потом уже наша прога будет пользоваться ей. Можно попробывать, но это теоретически. А кто-нить слышал, можно ли имя своей проги как-нить вынуть из памяти, тогда можно было бы часть сообщения в имени файла проги записать :)
А если нам перед запуском проги просто перекодировать таблицу символов, ну скажем с 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
это выход, но "черный"... если исправлять таблицу символов, то не проще ли просто написать в видеопамять эту строку руками...
А как ты ее умудришься запихнуть с кодом и данными на 16 байт, только настойка сегментного регистра на видеопамять 4 байта сожрет если самым коротким путем пойти
push 0b800h ; 3 байта
pop es ; 1 байт
Ответ никак. Ведь кто-то предлагал вектор прерывания заранее поменять. Почему ты этот путь черным не назал?
А как ты ее умудришься запихнуть с кодом и данными на 16 байт, только настойка сегментного регистра на видеопамять 4 байта сожрет если самым коротким путем пойти
push 0a000h ; 3 байта
pop es ; 1 байт
Ответ никак. Ведь кто-то предлагал вектор прерывания заранее поменять. Почему ты этот путь черным не назал?
Замена прерывания - это вообще не выход :)
а насчет видеопамяти - так напрямую, в отладчике писать :)))
Тут у меня мысль вообще поперла :)
А если нам перед запуском проги просто перекодировать таблицу символов, ну скажем с 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
Препод может запустить прогу на любом компе, а на всех таблицу не поменяешь.
Имя файла может быть любым, так что его использовать не получится.
Сегодня препод клялся, что написать как-то можно.
Препод может запустить прогу на любом компе, а на всех таблицу не поменяешь.
Имя файла может быть любым, так что его использовать не получится.
Сегодня препод клялся, что написать как-то можно.
Был такой короткометражный фантастический фильм, там собрали группу ученых, показали им хронику, на которой какой-то Кулибин изобрел ранцевый антигравитационный двигатель и разбился при испытаниях. После этого ученые несколько месяцев грызли науку. Потом оказалось, что хроника была фальшивой, но ученые к тому времени уже изобрели такой же двигатель.
Похожая ситуация? :D
Получил задание на лабе в универе. Hello world! - 16 байт. Командную строку не использовать.
Командная строка имеется ввиду - "параметры командной строки"?
потому, что, этот пример работает так:
la.com "Hello World!"
Командная строка имеется ввиду - "параметры командной строки"?
потому, что, этот пример работает так:
la.com "Hello World!"
Если бы так было можно, то это было бы слишком просто и писалось за пару минут.
Если бы так было можно, то это было бы слишком просто и писалось за пару минут.
вот и я говорю... А когда препод обещал показать, как это реализовано?
Получил задание на лабе в универе. 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 метод не подойдёт..., есть подобные команды, которые дадут нужный эффект
" " = 20h - причем не вначале и не вконце!
"Н" = 48h
" " = 20h - причем не вначале и не вконце!
ОК. 4 бита изгаляються :) (между H и w) большой диапазон бббблинн... хотя всё таки разработать примитивный вариант архивации можно...
К сожелению нет под рукой таблицы ASCII.....
:) напомни лучше - что за прерывание такое 29?
:)
Это такое недокументированное прерываение ДОС, которое выводит символ в al
а где можно раздобыть справочник прерываний?
Не знаю :)