请教一下这段代码为什么不显示?
assume cs:codesgdatasg 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:
cmp al,0
je s1
cmp al,61h
jb s2
cmp al,71h
ja s2
inc si
jmp short s
s2: and al,11011111b
mov ds:,al
jmps
s1: mov ax,0b800h
mov es,ax
mov di,0
sub dh,1
mov al,160
mul dh
mov bx,ax
sub dl,2
mov al,2
mul dl
mov bx,ax
mov cl,2
mov al,cl
mov ch,0
s3: mov cl,ds:
jcxzs3
mov es:,cl
mov es:,al
inc si
add di,2
jmp short s1
ret
codesg ends
end begin
应该再好好看看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:
cmp al,0
je s1
cmp al,61h
jb s2
cmp al,7Ah
ja s2
and al,11011111b
mov ds:,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:
mov ch,0
jcxz ok
mov es:,cl
mov es:,al
inc si
add di,2
loop s3
ok: ret
codesg ends
end begin
页:
[1]