Assembler - язык неограниченных возможностей


Символьные устройства - часть 7


; выполнить ВОТ13-преобразование над буфером cld rot13_loop: ; цикл по всем символам буфера lodsb ; AL = следующий символ из буфера в ES:SI cmp al,'А' ; если он меньше "А", jl rot13_done ; это не буква, cmp al,'Z' ; если он больше "Z", jg rot13_low ; может быть, это маленькая буква, cmp al,('A'+13) ; иначе: если он больше "А" + 13, jge rot13_dec ; вычесть из него 13, jmp short rot13_inc ; а иначе - добавлять rot13_low: cmp al,'а' ; если символ меньше "а", jl rot13_done ; это не буква, cmp al,'z' ; если символ больше "z", jg rot13_done ; то же самое, cmp al,('a'+13) ; иначе: если он больше "а" + 13, jge rot13_dec ; вычесть из него 13, иначе: rot13_inc: add al,13 ; добавить 13 к коду символа, jmp short rot13_done rot13_dec: sub al,13 ; вычесть 13 из кода символа, rot13_done: int 29h ; вывести символ на экран loop rot13_loop ; и повторить для всех символов write_finished: xor ах,ах ; сообщить, что ошибок не было pop si ret write endp

; процедура инициализации драйвера init proc near mov ah,9 ; функция DOS 09h mov dx,offset load_msg ; DS:DX - сообщение об установке int 21h ; вывод строки на экран mov word ptr es:[si+0Eh],offset init ; записать адрес mov word ptr es:[si+10h],cs ; конца резидентной части xor ах,ах ; ошибок не произошло ret init endp

; сообщение об установке драйвера load_msg db "ROT13 device driver loaded",0Dh,0Ah,'$'

start: ; точка входа ЕХЕ-программы push cs pop ds mov dx,offset exe_msg ; DS:DX - адрес строки mov ah,9 ; функция DOS int 21h ; вывод строки на экран mov ah,4Ch ; функция DOS 4Ch int 21h ; завершение ЕХЕ-программы

; строка, которая выводится при запуске не из CONFIG.SYS: exe_msg db "Эту программу надо загружать как драйвер устройства из" db "CONFIG.SYS",0Dh,0Ah,'$'

.stack

end start





Начало  Назад  Вперед