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

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

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

2. Решение by Ungydrid (14 байт).

3. Решение by Ayl (16 байт).

4. Решение by Broken Sword (16 байт).

5. Решение by Maverick (16 байт).

6. Решение by Ilya D. (16 байт).

7. Решение by Eugene (16 байт).

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

Дано: AX - любое двухзначное десятичное число больше нуля.

Задание: Вывести на экран это число

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

by Ungydrid: размер 14 байт.

model tiny
.286 
.Code
.StartUp
mov al,38 
aam     ;та же самая операция деления, но в 2-х байтах (второй
        ;байт - делитель, так что иногда полезно пользоваться при
        ;оптимизации для быстрого деления на байт, подставляя 
        ;db D4,?? (см. Зубков)
call Twice ;красиво, черт возьми, - to Maverick & Ilia D
Twice:
xchg ah, al
or al,30h 
int 29h 
ret 
end

 

by Ayl: размер 16 байт.

.Model TINY
.286
.Code
.StartUp
  mov  ax, 19
  aam
  or   ax, 3030h
  xchg ah, al
  int 29h
  xchg ah, al
  int 29h
  ret
end

by Broken Sword: размер 16 байт.

; tasm entry.asm
; tlink /x /3 /t entry.obj
; entry.com
; by Broken Sword [HI-TECH]
; size: 16 bytes
                  .model      tiny
                  .386
                  .code                 
                  org         100h
@@start:
                  mov         AL,29h            ; BIN/DEC number
                  push        AX                ; save it
                  shr         AL,4              ; high digit
@@M:              or          AL,30h            ; ASCII-conversion
                  int         29h               ; out
                  pop         AX                ; restore num
                  inc         DI                ; on start: DI=FFFEh
                  jnz         @@M              
                  int         20h               ; finish
                  end         @@start

Q: Почему при завершении этой программы с помощью ret происходит сбой?

A: Потому, что pop ax используется два раза, и из-за этого теряется 0 из стека, который нужен команде ret.

by Maverick: размер 16 байт.

;Task #3
;Способ компиляции:
;tasm 3.asm
;tlink /t 3.obj
;Автор: Maverick
;Размер: 16 байт
.model      tiny
.code                
org         100h
start:
mov al,79             ;Число для вывода
mov cl,10             ;Система счисления
div cl                ;Делим на 10
call one              ;Вызов вывода al
xchg ah,al            ;Обменяем
one:
add al,'0'            ;Преобразуем al
int 29h               ;Выведем
ret                   ; Ret сработает 2 раза, для выхода из подпрограммы и выхода
end start

by Ilya D.: размер 16 байт.

        .model tiny
        .code
        org 100h
begin:
        mov ax,63
hex2dec:
        aam
        or ax,3030h
        xchg al,ah
        int 29h
        xchg al,ah
        int 29h
        ret
        end begin

by Eugene: размер 16 байт.

;Eugene
;способ компиляции:
;fasm 3.asm 3.com
;размер 17 байт
        org     100h
        mov     ax,3328h ;наше число в al
        ror     ax,4
        ror     ah,4
        int     29h
        xchg    ah,al
        int     29h
        ret