Saturday, July 29, 2006

A case inverter in 16-bit DOS assembly

This is a simple case inverter, if you want to try this out download the a86 assembler here. It works like a charm in dosemu-freedos.



; case inverter

start:
mov ah, 0ah
lea dx, strptr
int 21h

lea si, string
mov cl, [strlen]

check:
mov al, [si]
cmp al, 'Z'
ja lowercase
cmp al, 'a'
jb uppercase

lowercase:
cmp al, 'a'
jb traverse
cmp al, 'z'
jbe toupper

uppercase:
cmp al, 'Z'
ja traverse
cmp al, 'A'
jae tolower

toupper:
sub al, 32
mov [si], al
jmp traverse

tolower:
add al, 32
mov [si], al

traverse:
inc si

loop check

mov ah, 02h
mov dl, 10
int 21h

mov ah, 09h
lea dx, string
int 21h
int 20h

strptr label byte
maxlen db 49
strlen db ?
string db 50 dup ('$')

“Fortune favors the prepared mind.” - Louis Pasteur

No comments: