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

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

  Все выпуски  

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


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


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


Выпуск #29.

Добрый день, уважаемые подписчики! На сайте открылся форум (пока работает в тестовом режиме, но уже можно отправлять сообщения). Чтобы высказать свои мысли по поводу COMPO, заходите сюда.

 

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

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

2. Задача #29.

 

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

 

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

  Участник

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

1. G3 16 байт

 

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

Сделать программу, выводящую на экран число в заданной системе счисления.

 

Решения.

Решение by G3:

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

Sys  EQU 10 ;Система счисления, где 1<XX<11
Value  EQU 155 ;Число, где 0 =< XX =< 255
KolVo  EQU 8 ;Количество выводимых цифр, где XX - любое число, например 3

  org 100h
Start:
 xchg ax,di   ;di = 0
 mov al,Value
 mov bl,KolVo-1

MainLoop: 
 aam Sys   ;ah = al / Sys,  al = al mod Sys
 mov [di+bx],al
 mov al,ah
 dec bx
 jns MainLoop

 int 20h

end Start

В прошлый раз я не совсем корректно дал задание. Возможно поэтому с ним справился только G3. Здесь я приведу свое решение. На будущее: если сказано, что нужно расположить что-то по адресу CS:DI, то это значит, что DI - это указатель на буфер. Т.е. в DI нужно было заносить смещение буфера, а не заносить в DI случайное значение.

Решение by Igoryk:

;AL    - Value
;CS:DI - String

Sys     EQU     10              ;Система счисления
Value   EQU     255             ;Число
Kolvo   EQU     8               ;Кол-во выводимых знаков

        org     100h
start:
        mov     di, Bufer + Kolvo
        std
        mov     al, Value       ;Число
        mov     cl, Kolvo
cloop:
        DB      0D4h, Sys       ;AH = AX div Sys
                                ;AL = AX mod Sys
        add     al, 30h
        stosb
        mov     al, ah
        loop    cloop
;************* ТЕСТ ***************
;        mov     di, Bufer
;        add     di, Kolvo + 1
;        mov     al, '$'
;        stosb
;        mov     ah, 09h
;        mov     dx, Bufer + 1
;        int     21h
;**********************************
        ret

        Bufer   DB      ? 

 

Задача #29.

 

Задание:

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

 

Если выполнить такой код:

xor ax, ax
cpuid

то в Регистры EBX EDX ECX (именно в таком порядке) заносится соответственно 'Genu','ineI','ntel'.

Ваша задача вывести на экран строковое содержимое регистров EBX, EDX, ECX. Т.е. на экране должна появиться строка "GenuineIntel".

 

! Прошу обратить особое внимание, на то, что команда xor ax,ax обязательна. Если в командной строке будет введено что-либо, то при старте программы AX=0FFh (см. Правила).

 

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

 

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

 

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

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

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

 

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

 


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

В избранное