Правила - Рейтинг участников - Библиотека решений

Решения задачи #18.

1. Условие задачи

2. Shur - 12 байт.

3. G3 - 12 байт.

 

Условие задачи.

Запустить программу, имя которой указано в командной строке.

Решение by Shur:

;by Shur
;12 bytes
;tasm, tlink /t
.model tiny
.code

org     100h
start:
shr     si,1
mov     bh,10h
mov     ah,4ah
int     21h     ;free memory
int     2eh     ;exec cmdline
int     20h     ;ret

end     start

 

Комментарий: Как просто и гениально! А я расписался на 63 байта: сделал проверку на неправильный ввод, сделал освобождение памяти, заполнение структуры, еще там кое-чего, а оказывается все можно сделать так просто.

Идея кода: Здесь в принципе все понятно: выделяется память для запуска файла (по-другому нельзя - того требует DOS), затем осуществляется запуск файла с помощью int 2eh (кстати ее описание приведено ниже), и программа завершается. Строка shr si, 1 нужна для того, чтобы в si оказалось смещение командной строки (при старте SI=100h; 100h/2=80h).

 

Решение by G3:

;Task #18
;tasm /m task.asm
;tlink /x /3 /t task.obj
;12 байт
;by G3
.model tiny
.386
.code
org 100h

Start:
mov    ah,4Ah
mov    bl,80h
int    21h     ;освобождение памяти

mov    si,bx
int    2eh     ;запуск приложения

int    20h     ;выход
end    Start

 

Комментарий: Идея кода у G3 такая же как и у Shur, но метод вычисления смещения командной строки другой: G3 выделяет 80h байт памяти (BL=80h), а затем использует BX=80h для перемещения в SI.

 

Hosted by uCoz