. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->标志寄存器
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  我的实验11源程序,欢迎指点  [待解决] 回复[ 1次 ]   点击[ 446次 ]  
fxl
[帖 主]   [ 发表时间:2010-03-11 16:14 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-12-27 17:13
assume cs:code  

data segment  
     db "Beginner's All-purpose symbolic Instruction Code.",0  
data ends
code segment
begin:mov ax,data
mov ds,ax
mov si,0
call letterc

mov ax,4c00h
int 21h


letterc:push ax
push si
push cx
k:mov al,[si]
cmp al,61h
jb s0
cmp al,7ah
ja s0
and al,11011111b
mov [si],al
inc si
jmp short k

s0:mov ch,0
mov cl,al
jcxz okret
inc si
jmp short k

okret:pop cx
pop si
pop ax
ret

code ends
end begin
langzi82561
[第1楼]   [ 回复时间:2010-03-31 20:51 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-02-18 19:15
子程序可以不用寄存器AX,直接用CX,这样程序会简洁很多。
这是我的程序,把前面的显示字符串子程序用上了。
Assume cs:codesg

Datasg segment
      Db "B eginner's All-purpose Symbolic Instruction Code.",0
Datasg ends

stacksg segment
      db 64 dup (0)
stacksg ends

Codesg segment
      Begin:  mov ax,datasg
              Mov ds,ax
              Mov si,0
              Call letterc

              Mov dh,8
              Mov dl,0
              Mov cl,2
              Call show_str

              Mov ax,4c00h
              Int 21h

        Letterc:
                  Push si
                  Push cx
                  Sub cx,cx
              Lp:
                  Mov cl,[si]
                  Jcxz s2
                  Cmp cl,97
                  Jb s1
                  Cmp cl, 122
                  Ja s1
                  Sub cl,20h      ;或者    and cl, 11011111B
                  Mov [si],cl
             S1:  inc si
                  Jmp short lp
        
             S2:  pop cx
                  Pop si
                  ret
        
Show_str:            ;参数:行号(dh);列号(dl);属性(cl);字符串首地址:ds:si
       Push ax
       Push bx
       Push es

       Mov al,160
       Mul dh
       Mov bx,ax    ;计算行位置

       Mov al,2
       Mul dl
       Add bx,ax    ;在行位置上加上列位置

       Mov ax,0b800h
       Mov es,ax
       Mov al,cl
   S:
       Mov ch,[si]
       Mov cl,0
       Jcxz ok1
       Mov cl,al
       Mov es:[bx],ch
       Inc bx
       Mov es:[bx],cl
       Inc si
       Inc bx
       Jmp short s
   OK1:
       Pop es
       Pop bx
       Pop ax
       Ret
        
Codesg ends

End begin
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved