Отправляет email-рассылки с помощью сервиса Sendsay

Задачи по ассемблеру

  Все выпуски  

Задачи по ассемблеру


Информационный Канал Subscribe.Ru


Задачи по ассемблеру.


Выпуск #30.

Добрый день, уважаемые читатели! У нас нововведение, с которым уже ознакомились некоторые подписчики: присылать решения теперь нужно только в архиве (ZIP). А то почтовый сервер считает открыто посланные исполняемые файлы потенциально опасными.

 

Сегодня в выпуске:

1. Решение задачи #29.

2. Задача #30.

 

Решение задачи #29.

 Beeblbrox - не засчитано.

Таблица рекордов:

  Участник

Размер решения

  Alexey Volkov 14 байт
  Alexey_1 14 байт
  Broken Sword 14 байт
  Edward Samokhvalov 15 байт
  G3 16 байт
  Shur 16 байт
  Ayl 20 байт

 

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

Вывести на экран строку, возвращаемую командой cpuid.

 

Решения.

Решение by Alexey Volkov :

; Assembler Tasks COMPO #29
; Способ компиляции: tasm /m 29.asm, tlink /t 29.obj
; Автор: Alexey Volkov AKA xAL
; mailto:xal@bk.ru, http://xal.newmail.ru/
; Размер: 14 байт
        .model  tiny
        .586
        .code
        org 100h
start:  
        pop     ax      ; обнуляем ax
        cpuid           ; получаем строку с названием процессора

        mov     ax, 0924h   ; al='$' (маркер конца строки) - eax сохраняется последним
                            ; ah=9 - для 21-го прерывания (9-я функция - вывод строки)
        pushad              ; сохранение всех регистров
        mov     dx, 0fff0h  ; адрес начала строки для вывода
        int     21h         ; вывод строки
        ret             ; pushad-ом мы занесли и 0000 для ret-а :)
end     start

Решение by Alexey_1:

;tasm /m2 task29.asm
;tlink /t task29
;14 bytes
;by Alex


CSEG segment
assume cs:CSEG, ds:CSEG, ss:CSEG, es:CSEG
org 100h
 .586

main:
pop ax  ;обнуляю ax
cpuid

mov ax,0924h ;ah=9 - номер ф-ции, al='$' - конец строки
pushad  ;толкаем в стек eax, ecx, edx, ebx, esp, ebp, esi, edi
  ;в памяти ... ebx,edx,ecx,'$' ...
mov dx,0fff0h ;адрес строки
int 21h  ;вывод GenuineIntel

quit:
ret  ;edi=0000fffeh,cs:[fffe]=0000 нормальный выход

cseg ends
end main

Решение by Edward Samokhvalov:

; By Sam0khvalov Edward
; 15 bYtez : FASM FOR WIN

xor ax, ax
cpuid
mov ax, 0924h ; я знаю... это очень грязно, типа magic number :)
pushad
mov dx, 0ffeeh ; тоже magic number... в своём роде...
int 21h
ret

Решение by G3:

;Task #29 by G3 (tgm80@mail.ru), 16 bytes
;tasm /m task.asm
;tlink /x /3 /t task.obj
 .model tiny
 .586
 .code


  org 100h
Start:

 xor ax,ax
 cpuid

 mov ax,0924h
 pushad

 mov dx,0FFEEh
 int 21h
 int 20h
end Start

 

Решение by Shur:

;by Shur
;16 bytes
;fasm task29.asm task29.com

xor ax,ax
cpuid
mov ax,0x0900+'$'
pushad
mov dx,0xffee
int 21h
int 20h

Решение by BeebleBrox:

; cpuid by Beeblebrox / TMA
; 15 bytes
; tasm /m9 cpuid.asm
; tlink /t/x cpuid.obj
 .model tiny
 .586
 .code
                org     100h
start:
                xchg     ax,bx   ; ax=0 - ОШИБКА!!!
                cpuid
                mov     al,24h
                pushad
                popa
                mov     dx,sp   ; dx=offset string
                xchg    ax,bx   ; ah=9
                int     21h
                int     20h
                end     start

Ошибка заключается в том, что BX при старте равен AX, а не 0. (см. соответствующую тему в форуме). Кстати в HUGI использовались данные, что BX=0.

Вот. Теперь хочу обратить Ваше внимание на решения в 14 байт. Они хорошо выполняются на XP, но иногда вызывают исключения на Win Me. Не засчитать я их не мог, потому что Правила соблюдается - строка выводится, и вывод корректный. У кого есть какие-нибудь соображения по этому поводу - просим сюда: Разбираем #29.

 

Задача #30.

 

Задание:

Дано какое-нибудь число:
Value EQU XX

! Число Value задается статически.

Ваша задача вывести на экран выражение из 9 чисел (от 1 до 9) и 8 арифметических знаков ("+"-ов и\или "-"-ов), результатом которого было бы это число.

! Ограничений по расположению чисел в данном выражении нет, но числа в выражении не должны повторяться. И еще. Вы должны выбрать единое расположение всех чисел для всех вычислений.

! Первое число в выражении всегда положительное.

! Порядок чисел может быть любым. Главное, чтобы выводилось выражение, значение которого равно Value.

! Если решения нет, то выводить на экран ничего не надо.

! Если решений несколько, то на экран нужно вывести только первое.

 

Примеры:

Value EQU 45

На экране: 1+2+3+4+5+6+7+8+9

 

Value EQU 27

На экране: 1+2+3+4+5+6+7+8-9

 

Value EQU -3

На экране: 1+2-3+4-5+6-7+8-9

 

 

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

 

Размер моего решения: 77 байт.

 

Отправить решение до 06.09.2003

 

В заключение...

На главной странице "Задач" [http://codeclimber.com/asmtasks.html] будут даны размеры программ лидеров, как только таковые появятся. И так будет с каждой задачей. Узнав, эту информацию каждый может прислать более оптимизированное решение.

Любые предложения по улучшению рассылки, Ваши задачи, вопросы прошу присылать мне на почту, указанную внизу рассылки. 

 

(с) CodeClimber - Все права защищены! 
URL: http://codeclimber.com  E-Mail: compo@codeclimber.com


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное