标题:我的第一个汇编程序问题,帮忙解决
取消只看楼主
crazypenguin
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2008-10-12
 问题点数:0 回复次数:1 
我的第一个汇编程序问题,帮忙解决
编译没问题,但是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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-237759-1-1.html




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

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