Size: a a a

Ассемблер

2020 July 31

ST

Saenro T in Ассемблер
Руслан Ковальчук
Помогите перевести этот код в ТАСМ
begin 100h

mov cx, endtext-text-1
mov si, text+17
mov di, si
lodsb
rep movsb
stosb
ret

text: db "Better late than never"
endtext:
TASM — обязательное условие?
источник

РК

Руслан Ковальчук... in Ассемблер
У нас лабораторные роботы через ТАСМ
источник

ST

Saenro T in Ассемблер
楽園松本
Ишь ты, 512 байт заголовок, но можно же уменьшить до 32
источник

ST

Saenro T in Ассемблер
@echo off
tasm /m9 /ml name.asm
if ERRORLEVEL 1 goto end
tlink /t /x name.obj
:end

— ???
источник

s

s54816 in Ассемблер
Saenro T
.model small 
.code
main proc

push cs ; ?
push cs ; ?
pop ds ; ?
pop es ; ?
mov cx, 4
mov si, offset text + 17
mov di, si
lodsb
rep movsb (или repe movsb)
stosb
ret

main endp

.data
text db "Better late than never"

END main

Может так попробовать, а потом резануть?)
Сколько резать-то? Там у тебя в si кладётся 13h, оно куда-то в PSP указывать будет.
источник

楽園松本 in Ассемблер
Плохая идея сделать exe и потом что-то насильно отрезать.
источник

楽園松本 in Ассемблер
Exe файл требует от ОС особых настроек при загрузке. Его нельзя считать исполняемым "как есть".
источник

楽園松本 in Ассемблер
Исполняемые "как есть" это sys и com.
источник

s

s54816 in Ассемблер
楽園松本
Плохая идея сделать exe и потом что-то насильно отрезать.
Только лишь отрезать не получится. Но можно добавить лоадер, аналогичный системному, который пропатчит ссылки на сегменты, инициализирует стек правильно и прыгнет по entrypoint. Будет .com без MZ и с кастомным форматом внутри.
источник

ST

Saenro T in Ассемблер
Только что скомпилировал NEVER.EXE, EXEшник получился 1112 байта: 768 байт заголовок, 35 байт полезного кода и 309 байт какого-то мусора в конце файла.
Далее, вырезал из этого EXEшника 35 байт, сохранил их как never.com — работает 😉 (в коде ничего не правил)
источник

ST

Saenro T in Ассемблер
Попробую видосик запилить с действиями
источник

ST

Saenro T in Ассемблер
Хм, а вот скомпилированный NEVER.EXE (1112) вроде не работает 😂 (пока не вырезал в .com)
источник

ST

Saenro T in Ассемблер
Но думаю всё получится)
источник

N

Nrys in Ассемблер
Махинатор
источник

ST

Saenro T in Ассемблер
Voi la!
Рабочий EXEшник!
Если из него вырезать и сохранить выделенные байты (весь полезный код) как never.comnever.com работает!)
источник

楽園松本 in Ассемблер
Saenro T
Voi la!
Рабочий EXEшник!
Если из него вырезать и сохранить выделенные байты (весь полезный код) как never.comnever.com работает!)
Если ты не используешь загрузку сегментных регистров, то должно работать.
источник

ST

Saenro T in Ассемблер
Но мы же второй день обсуждаем как, ручками, из ЕХЕ можно сделать СОМ и наоборот, как то путём вырезания из него полезного кода.
И потом, спор начался из-за смещения в регистре si.
Но в этом экзешнике, как и в коме, всё смиренно стоит на своих местах (и там и там si указывает на слово "never".)

mov cx, length-1
mov si, text
mov di, si
lodsb
rep movsb
stosb
ret

Правда пришлось добавить один JMPS из-за пары байт которые ОС тулит прямо в рабочий код на предмет достаточно ли памяти.
источник

ST

Saenro T in Ассемблер
Не, ну надо сказать, что с другими екзешниками может не прокатить)
источник

ST

Saenro T in Ассемблер
楽園松本
Если ты не используешь загрузку сегментных регистров, то должно работать.
Скорее не работало бы из-за разницы в смещении EP
источник

楽園松本 in Ассемблер
Saenro T
Скорее не работало бы из-за разницы в смещении EP
Ты разницу можешь спокойно задать с помощью ORG
источник