| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1032 人关注过本帖
标题:我的第一个汇编程序问题,帮忙解决
只看楼主 加入收藏
crazypenguin
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2008-10-12
收藏
 问题点数:0 回复次数:2 
我的第一个汇编程序问题,帮忙解决
编译没问题,但是dos下运行exe时,只调用了10号字符串输入,而没有调用9号字符串输出;DEBUG下,T命令执行到输入时会停住不动了,很奇怪

 DATA SEGMENT
        BUF DB 30,?,30 DUP(?)
DATA ENDS

CODE SEGMENT
         ASSUME DS:DATA,CS:CODE
START:  MOV DX,OFFSET BUF    ;初始化DX
           MOV BX,SEG BUF         ;初始化
           MOV DS,BX                 ;DS
           MOV AH,0AH               ;10号
           INT   21H                   ;调用
           MOV  BX,DX                ;初始化CX(实际输入字符个数,即循环次数),
           MOV  BL,[BX+1]           ;由于使用MOV WORD PTR[CX],[DX+1]语法错误,
           MOV  CL,BL                ;需采用BX,
           MOV  CH,00H             ;因此显得有点繁杂。
           MOV SI,DX                 ;利用SI来代替DX,保护DX
           ADD SI,2                   ;SI指向第一个输入的字符内存单元
LOOP1: MOV  BL,[SI]              ;将SI指向的字符的16位ACSII码
           CMP  BL,5AH             ;和5AH('Z')比较
           JGE    NEXT1             ;大于5AH(即为小写字母时)则跳到NEXT1
           INC   SI                    ;SI指向下一个字符的内存单元
           LOOP LOOP1             ;循环LOOP1
NEXT1: MOV AL,20H          ;将小写字母的16位ACSII码
           SUB  AL,[SI]              ;减去20H(小写字母比大写字母的ACSII码大20H)
           MOV  [SI],AL             ;转换后的大写字母覆盖回对应内存单元
           LOOP LOOP1             ;循环LOOP1
           MOV  BL,24H            ;将‘$’(9号调用需要字符串以此字符结尾)
           MOV  [SI+1],BL         ;存进输入字符串紧接的内存单元
           ADD  DX,2
           MOV  AX,9                ;9号
           INT    21H                 ;调用
           MOV AH,4CH              ;返回
           INT   21H                  ;DOS
CODE ENDS
        END START
搜索更多相关主题的帖子: 汇编程序 
2008-10-12 11:45
crazypenguin
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2008-10-12
收藏
得分:0 
自己搞定了
输入字母串,全部转化为大写
 DATA SEGMENT
        BUF DB 30,?,30 DUP(?)
DATA ENDS

CODE SEGMENT
         ASSUME DS:DATA,CS:CODE
START:  MOV DX,OFFSET BUF    ;初始化DX
           MOV BX,SEG BUF         ;初始化
           MOV DS,BX                 ;DS
           MOV AH,0AH               ;10号
           INT   21H                   ;调用
           MOV  BX,DX                ;初始化CX(实际输入字符个数,即循环次数),
           MOV  BL,[BX+1]           ;由于使用MOV WORD PTR[CX],[DX+1]语法错误,
           MOV  CL,BL                ;需采用BX,
           MOV  CH,00H             ;因此显得有点繁杂。
           MOV SI,DX                 ;利用SI来代替DX,保护DX
           ADD SI,2                   ;SI指向第一个输入的字符内存单元
LOOP1: MOV  BL,[SI]              ;将SI指向的字符的16位ACSII码
           CMP  BL,5AH             ;和5AH('Z')比较
           JGE    NEXT1             ;大于5AH(即为小写字母时)则跳到NEXT1
           INC   SI                    ;SI指向下一个字符的内存单元
           LOOP LOOP1             ;循环LOOP1
NEXT1: MOV AL,20H          ;将小写字母的16位ACSII码
           SUB  [SI],AL              ;减去20H(小写字母比大写字母的ACSII码大20H)
                                         ;转换后的大写字母覆盖回对应内存单元
            INC SI                       ;SI指向下一个字符的内存单元
           LOOP LOOP1             ;循环LOOP1
           MOV  BL,24H            ;将‘$’(9号调用需要字符串以此字符结尾)
           MOV  [SI],BL         ;存进输入字符串紧接的内存单元
           ADD  DX,2
           MOV  AH,9                ;9号
           INT    21H                 ;调用
           MOV AH,4CH              ;返回
           INT   21H                  ;DOS
CODE ENDS
        END START
2008-10-12 12:30
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
不错 注释很详细

加油
2008-10-12 12:31
快速回复:我的第一个汇编程序问题,帮忙解决
数据加载中...
 
   



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

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