kz82 发表于 2012-3-14 20:06:50

请教一下这段代码为什么不显示?

assume cs:codesg
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,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

夏洛 发表于 2012-3-14 21:15:18

应该再好好看看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]
查看完整版本: 请教一下这段代码为什么不显示?