dseg segment
STRING db 'aB(C12!ejL)89LM0-7Ni#'
org 40
NUM db 30 dup(?)
BCHAR db 30 dup(?)
LCHAR db 30 dup(?)
OTHER db 30 dup(?)
dseg ends
cseg segment
assume cs:cseg, ds:dseg
start:
mov ax, dseg
mov ds, ax
lea si, STRING
mov bx, 0
mov cx, 0
mov dx, 0
mov bp, 0
Next:
mov al, [si]
cmp al, '#'
je Exit
cmp al, '0'
jb OtherLetter
cmp al, '9'
ja NotNum
mov di, bx
mov NUM[di], al
inc bx
jmp OnceDone
NotNum:
cmp al, 'A'
jb OtherLetter
cmp al, 'Z'
ja NotBLetter
mov di, cx
mov BCHAR[di], al
inc cx
jmp OnceDone
NotBLetter:
cmp al, 'a'
jb OtherLetter
cmp al, 'z'
ja OtherLetter
mov di, dx
mov LCHAR[di], al
inc dx
jmp OnceDone
OtherLetter:
mov di, bp
mov OTHER[di], al
inc bp
OnceDone:
inc si
jmp Next
Exit:
mov ah, 4ch
int 21h
cseg ends
end start
8086的寄存器不够用了,不像386那样每个寄存器都能当索引,所以用的方法稍微有点麻烦,不过容易理解。