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

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

  Все выпуски  

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


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


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


Выпуск #22.

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

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

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

2. Задача #22.

3. Команда для COMPO: HUGI COMPO 21

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

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

  Участник

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

1.

Ayl

17 байт

2.

G3

17 байт

3.

Broken Sword

21 байт

4.

Torax

21 байт

5.

Shur

22 байта

6.

Alexey_1

22 байта

7.

Odin

23 байта

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

Посчитать сумму цифр в веденном числе.

Решения.

Решение by Ayl, G3:

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

Start:
  mov ah,3Fh ;
  mov dx,bp ;адрес буфера = 09xx
  int 21h ;считать строку в буфер

  or si,bp ;si = 09xx, df=0
  db 0D6h ;al=0, так как df=0
MainLoop:
  add bx,ax
  lodsb
  sub al,'0'
  jnc MainLoop ;если al<'0', то выход
  ret
end Start

 

Решение by Broken Sword:

.model         tiny
                .code
                .386
                org            100h
@@start:
                mov            AX,0AFFh         ; AH = 0Ah function, AL = str max len
                mov            DI,DX            ; DI = buf for string
                stosb                           ; First byte of buf <= FF (max len)
                int            21h

                cbw                             ; AH = 00
                mov            SI,DI            ; SI => real len
                lodsb                           ; AL = real len
                xchg           AX,CX            ; CL = real len
@@S1:
                lodsb                           ; AL = ASCII of num
                sub            AL,30h           ; AL = num
                add            BX,AX            ; BX = sum
                loop           @@S1             ; CL (real len) times

                ret                             ; fin
                end            @@start

Решение by Torax:

;Решение задачи ╧21 - 21 байт (символично :)
;fasm 21.asm 21.com
;Created by Torax

        mov ah, 3fh
        ;xor bx, bx
        inc ch
        int 21h
        mov dx, di
        dec ax
        dec ax
        mov cx, ax
l1:     lodsb
        sub al, '0'
        add bx, ax
        loop l1
        int 20h

Решение by Shur:

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

 org 100h
start:
 mov ah,0ah ;fn 0ah
 mov dx,offset _str
 int 21h  ;read string
 mov si,dx ;buf addr
 lodsw  ;ah=strlen
 mov cl,ah ;cx=strlen
_next:
 lodsb  ;load symbol
 and ax,0fh ;convert to digit
 add bx,ax ;add it
 loop _next ;next symbol
 ret  ;exit
_str db 0ffh  ;buffer length
        end start

Решение by Alexey_1:

;tasm /m2 task21.asm
;tlink /t task21
;22 байта
;by Alex

CSEG segment
assume cs:CSEG, ds:CSEG, ss:CSEG, es:CSEG
org 100h
 .386
main:
mov  ah,0ah
mov  dx,offset bufer
int  21h
mov  si,dx

lodsw  ; al:=0ffh (первый байт bufer), ah:=len
xchg  cl,ah ; ah:=0ffh (при загрузке cl=0ffh) в отладчике не работает!!!
inc  ax ; ax:=0ffffh+1=0

cicl:
lodsb
sub  al,30h
add  bx,ax

loop  cicl

quit:
ret  ;выход
bufer db 255,256 dup(?)
CSEG ends
end main

Решение by Odin:

; task 21
; fasm task.asm task.com
; by Odin, size 23 bytes
        org     100h
        mov     ah, 0Ah
        mov     dx, string
        int     21h
        xor     ax, ax
        mov     si, string+1
        lodsb
        xchg    cx, ax
sum:
        lodsb
        sub     al, 30h
        add     bx, ax
        loop    sum
        ret
string db 0FEh

 

У кого есть более короткое решение присылайте указав в теме номер задачи.

Задача #22.

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

Задание:

Считать с клавиатуры две строки. Найти в первой вторую. Если поиск удался, то AL=символ первой строки с которого начинается совпадение со второй, иначе AL=0.

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

Команда для COMPO.

Hugi предлагает для решения COMPO 21. Те кто, хочет решать его в команде напишите письмо мне, для включения в команду. Написать нужно даже тем, кто включен в нее - для проверки. Только учтите, что решения будут посылаться от команды, а не от одного человека!!!

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

На главной странице сайта http://www.igoryksoft.narod.ru/ будут даны размеры программ лидеров, как только таковые появятся. И так будет с каждой задачей. Узнав, эту информацию каждый может прислать более оптимизированное решение.

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

(с) IgorykSoft Все права защищены! 
URL: http://www.igoryksoft.narod.ru/  E-Mail: Igoryk@FromRu.Com


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

В избранное