| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 754 人关注过本帖
标题:谁帮我找一下这个程序的错误地方啊
只看楼主 加入收藏
悔悔
Rank: 1
等 级:新手上路
帖 子:11
专家分:5
注 册:2009-12-25
结帖率:0
收藏
已结贴  问题点数:10 回复次数:4 
谁帮我找一下这个程序的错误地方啊
在DATA中存放有一字符串,编写子程序实况将其中的小写字母改为大写字母。
      data   segment
      DATA   db  '1234abhfgELF78'
      count   euq   $-DATA
      data    ends
      code    segment
              aussme  cs:code,  ds:data
      main    proc  far
      push    ds
      mov     ax,00h
      push    ax
      mov     ax,data
      mov     ds,ax
      mov     SI,0
      mov     cx,count
   h1:mov     al,DATA[SI]
      call   fh
       sub    al,20h
       mov    DATA[SI],al
       inc    SI
       loop   h1
        ret
        main   endp
        fh      proc  near
        push    ax
        push    cx
        push    SI
         jb      h2
        mov     al,DATA[SI]
         pop     SI
         pop     cx
         pop     ax
     h2: ret
         fh      endp
        code     ends
                 end   main
搜索更多相关主题的帖子: 子程序 字符串 count 实况 字母 
2009-12-28 23:49
philipyou
Rank: 2
等 级:论坛游民
帖 子:14
专家分:55
注 册:2009-9-26
收藏
得分:5 
1、DATA 与data 有冲突,编译时是不区分大小写的,应该将DATA 换个名字
2、count   euq   $-DATA   改为count   =  $-DATA   
3、aussme  cs:code,  ds:data 中的aussme 改为 assume
4、jb      h2 这句前一般加上cmp 来作为跳转的依据
5、h2: 要放到 pop     SI 那一行 因为要进栈就要出栈
6、    call   fh
       sub    al,20h
       mov    DATA[SI],al
    这一段和子 fh      proc  near程序的逻辑可能有点乱
   我猜你想调用子程序来判断是否为小写字母 如果小于ASCII 码 61H
   就不用转了,如果大于的话就减去 20H 变为大写的ASCII 码
   但是实际上你的函数什么也没做就返回了
   而且返回后还执行了sub    al,20h就连其他代码也改变了
2009-12-29 23:18
philipyou
Rank: 2
等 级:论坛游民
帖 子:14
专家分:55
注 册:2009-9-26
收藏
得分:0 
这是我在你的程序的基础上改进的红色字体为修改或添加部分
data   segment
DATA1  db  '1234abhfgELF78'      
count   =  $-DATA1
       db  '$'   
data   ends


code    segment
  assume  cs:code,ds:data
main    proc  far
      push    ds
      mov     ax,00h
      push    ax
      mov     ax,data
      mov     ds,ax
      
      
      mov     SI,0
      mov     cx,count
h1:   mov     al,DATA1[SI]
      call   fh
      inc    SI
      loop   h1
      
;============================下面这一段用来显示出字符      
      mov ah,09h
      mov dx,offset DATA1
      int 21h

      ret
main  endp
;=============================函数fh的作用是判断字母的ASCII码
                             ;是否小于61H不是的话就转换
fh      proc  near
      push    ax
      push    cx
      push    SI
      cmp     al,61h
      jb      h2
      sub    al,20h
      mov    DATA1[SI],al
h2:   pop     SI
      pop     cx
      pop     ax
      ret
fh      endp

code     ends
         end   main
2009-12-29 23:26
悔悔
Rank: 1
等 级:新手上路
帖 子:11
专家分:5
注 册:2009-12-25
收藏
得分:0 
谢谢!!!!O(∩_∩)O~
2009-12-31 01:10
ltyjyufo
Rank: 9Rank: 9Rank: 9
来 自:未来
等 级:蜘蛛侠
威 望:2
帖 子:353
专家分:1166
注 册:2009-10-25
收藏
得分:5 
三楼的这里:
 ;============================下面这一段用来显示出字符      
      mov ah,09h
      mov dx,offset DATA1
      int 21h
      ret
main  endp
;=============================函数fh的作用是判断字母的ASCII码
                             ;是否小于61H不是的话就转换


那 两个MOV语句好像是颠倒了,应该先获取地址,再调用功能号。。。
          mov dx,offset DATA1
          mov ah,09h

翱翔天空的雄鹰固然令人羡慕,却容易被禁锢于牢笼之中,只有那夜色中的蝙蝠才是真正自由的飞翔者....
2010-01-01 16:46
快速回复:谁帮我找一下这个程序的错误地方啊
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.041670 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved