|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Сен 7, 2003 16:49:46 Ян не может пока зарегистрироваться. Посылаю его письмо со своего логина. ---------- Меня зовут Ян. Мне нравится писать в машинных кодах. Программа выводит на экран большие и маленькие буквы английского алфавита в столбик. Можно ли эту программу написать так, чтобы она была короче? база файла 0, потом после загрузки будет база+100h 0000: B4 09 ; поместить в ah номер функции 09 0002: BA 13 01 ;поместить в dx адрес строки (0113h) 0005: B9 1A 00 ;поместить в cx 001A (количество букв) 0008: CD 21 ;вывести строку 000A: 81 06 13 01 01 01 ;прибавить к каждому из первых ;двух байтов строки по 1. Получатся числовые ;значения следующей буквы алфавита. 0010: E2 F6 ;уменьшить cx на один, если он не 0 - ;прибавить к IP (IP будет равен 110+2) минус 10 ;чтобы в IP оказался адрес 108 0012: C3 ;перейти по адресу в [SP] в com файле там всегда 0. ;а по адресу 0 всегда CD 20 (выход). 0013: 41 61 0D 0A 24 ; Первая заглавная и маленькая буква, перевод строки. ;$ - символ ограничения. |
|
|
Дата: Сен 7, 2003 18:01:43 Используя значения регистров при старте можно уменьшить на 3 байта, не меняя алгоритм. Подобны задачки решают на http://codeclimber.com. .model tiny .code org 100h start: xchg ax,bp ;при старте bp=09xxh mov cl,26 ;при старте cx=00FFh inc si ;при старте si=0100h=ip mov dx,offset Mess L10: int 21h add Mess,si loop L10 ret Mess dw 'aA' db 0Dh, 0Ah, '$' end start |
|
|
Дата: Сен 7, 2003 19:09:03 · Поправил: _G3 Еще на байт уменьшил. В итоге 20 байт. .model tiny .code org 100h start: db 40h ;inc ax db 60h ;pusha db 0Dh, 0Ah, '$' ;or ax,240Ah xchg ax,bp ;при старте bp=09xxh mov cl,26 ;при старте cx=00FFh mov dx,si ;при старте si=0100h=ip L10: add [si],0101h int 21h loop L10 int 20h end start |
|
|
Дата: Сен 7, 2003 19:47:09 · Поправил: _G3 Еще на байт уменьшил. В итоге 19 байт. .model tiny .code org 100h start: db 1Ah,'A','a' ;sbb al,[bx+si+60] db 0Dh,0Ah,'$' ;or ax,240Ah xchg ax,bp ;при старте bp=09xxh mov cl,26 ;при старте cx=00FFh inc si mov dx,si ;при старте si=0100h=ip L10: int 21h add [si],si loop L10 ret end start |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.080 |