This variation of the Base64 encodeing sytem is slightly cheaper to code than the standard due to the rearranging of the values used.
| 6 bit input value | ASCII character range produced | gap |
| 0...9 | "0"..."9" | 30h, 48d, '0' |
| 10...35 | "A"..."Z" | 7, 'A'-':' |
| 36...61 | "a"..."z" | 6, 'a'-'[' |
| 62 | "+" | -80d, -50h, '+'-'{' |
| 63 | "?" | 20d, 14h, '?'-',' |
Encode 3 bytes into 4 bytes consisting of only the characters 0...9, A...Z, a...z, and +
Entry:
lodsd
dec esi
mov edx,eax
mov ecx,4
.Repeat
and al, 00111111y
add al, ('0')
.If al > '9'
add al, ('A' - ':')
.If al > 'Z'
add al, ('a' - '[')
.If al > 'z'
.if al > 'z'+1
mov al, '?'
.else
mov al, '+'
.EndIf
.EndIf
.EndIf
.EndIf
stosb
shr edx, 6
mov al,dl
.Untilcxz
Decode
get value .if al < 'a' .if al < 'A' .if al < '0' .if al == '+' mov al, 62 .else stc breakpoint .endif .elseif al > '9' .if al == '?' mov al, 63 .else stc breakpoint .endif .else ;0...9 sub al, '0' .endif .elseif al > 'Z' stc breakpoint .else ;A...Z sub al, 'A' - 10 .endif .elseif al > 'z' stc breakpoint .else ;a...z sub al, 'a' - 36 .EndIf
Better?
sub al, '0'
.if Carry?
.if al == '+' - '0'
mov al, 62
.else
breakpoint ;invalid character in Mime input stream
.endif
.else
.if al > 9
sub al, 'A' - ':' ; if it was A, now its 10
.if Carry?
.if al == '?' - ('A' - '0')
mov al, 63
.else
breakpoint ;invalid character in Mime input stream
.endif
.else
.if al > 9 + 26
sub al, 'a' - '[' ; if it was a, now its 36
.if al > 9 + 26 + 26
breakpoint ;invalid character in Mime input stream
.endif
.endif
.endif
.endif
.endif
| file: /Techref/method/b64n.htm, 2KB, , updated: 2018/2/1 16:33, local time: 2025/10/25 08:11,
216.73.216.180,10-8-63-169:LOG IN
|
| ©2025 These pages are served without commercial sponsorship. (No popup ads, etc...).Bandwidth abuse increases hosting cost forcing sponsorship or shutdown. This server aggressively defends against automated copying for any reason including offline viewing, duplication, etc... Please respect this requirement and DO NOT RIP THIS SITE. Questions? <A HREF="http://techref.massmind.org/techref/method/b64n.htm"> X86 Base64 Variant</A> |
| Did you find what you needed? |
Welcome to massmind.org! |
|
Ashley Roll has put together a really nice little unit here. Leave off the MAX232 and keep these handy for the few times you need true RS232! |
.