Решения задачи #3.
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 |