应该再好好看看cmp那段,尤其是利用cmp进行转移的,ASCLL码从61h到7Ah是小写字母,这段应该把不符合条件的跳转出去,符合条件的一直执行下去,然后将小写变为大写
还有显示那段,如果单纯显示文本,只要确定从什么位置开始就可以了,不需要和先前的例子用dh dl cl,如果使用的话,也需要事先赋值,所以显示那段也有问题assume cs:codesg,ds:datasg
datasg segment
db "Beginner's All-purpose Symbolic Instruction Code.",0
datasg ends
codesg segment
begin: mov ax,datasg
mov ds,ax
mov si,0
call s
mov ax,4c00h
int 21h
s: mov al,ds:[si]
cmp al,0
je s1
cmp al,61h
jb s2
cmp al,7Ah
ja s2
and al,11011111b
mov ds:[si],al
s2: inc si
jmp short s
s1: mov ax,0b800h
mov es,ax
mov di,0
mov si,0
mov bx,12*160+3*2
mov al,02h
s3: mov cl,ds:[si]
mov ch,0
jcxz ok
mov es:[bx+di],cl
mov es:[bx+di+1],al
inc si
add di,2
loop s3
ok: ret
codesg ends
end begin
|