李亖 发表于 2012-5-24 11:26:49

大写字母转换成小写字母

本帖最后由 李亖 于 2012-5-24 11:45 编辑

DATA      SEGMENT
MEM0      DB 128
ACTLEN0      DB ?
CHARS0      DB 128(?)
MEM1      DB 128
ACTLEN1      DB ?
CHARS1      DB 128(?)
STRING0      DB 'Please Input(A~Z):

求大神们看看到底是哪里有问题,不胜感激!


STRING1      DB 0DH,0AH,'The Result Is:

求大神们看看到底是哪里有问题,不胜感激!


DATA      ENDS
CODE      SEGMENT
                ASSUME CS: CODE, DS: DATA
START:      MOV AX, DATA
                MOV DS, AX
                LEA DX, STRING0               
                MOV AH, 09H                              ;显示提示信息STRING0
                INT 21H
                LEA BX, MEM0
                MOV AH, 0AH                              ;输入字母
                INT 21H
                MOV CL, ACTLEN0                        ;设置循环次数
                LEA SI, CHARS0                        ;取输入的字符串的首地址
                LEA DI, MEM1
CHANGE:      XOR BX, BX
                MOV BL,
                ADD BL, 20H
                MOV DI, BL                              ;存储转换后的字母
                INC SI                                        ;取下一个字母
                INC DI                                        ;取下一个存储地址
                LOOP CHANGE
OUTPUT:      LEA DX, STRING1
                MOV AH, 09H                              ;显示提示信息STRING1
                INT 21H
                XOR CX, CX
                MOV CL, ACTLEN1                        ;取转换后的字母的总长度
                LEA DX, CHARS1                        ;取转换后的字母的首地址
                MOV BX, DX
                ADD BX,CX                              ;得到转换后字母的尾地址
                MOV BYTE PTR,'

求大神们看看到底是哪里有问题,不胜感激!

      ;在字母后插入$
                LEA DX, MEM1
                MOV AH, 09H                              ;显示转换后的字母
                INT 21H
                MOV AH, 4CH
                INT 21H
CODE      ENDS
                END START

求大神们看看到底是哪里有问题,不胜感激!我晕代码真不好复制,出现求大神。。的地方是“$'”

fujian810 发表于 2012-5-25 10:48:57

assume cs:code,ds:data,ss:stack

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;函数功能:将输入的大写字母转换为小写
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

data segment

    dwStrMaxLen   dw0
    dwStrLen      dw0
    szHintLen       db'Please input the max length of words:',0dh,0ah,'$'
    szHintText      db'Please input the content:',0dh,0ah,'$'
    szHintChange    db'Text changed is:',0dh,0ah,'$'
    szInputBuf      db128 dup (?)
    szOutBuf      db128 dup (?)   

data ends


stack segment

    db32dup (0)   
   
stack ends


code segment
   
start:      mov ax,data
            mov ds,ax
      
            mov ax,stack
            mov ss,ax
            mov sp,20h
      
            call ShowHintLen
            call InputHintLen
            call ShowHintText
            call InputHintText
            call TextChange
            call ShowHintChange
            call ShowText
            jmpStop

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;显示提示字符(输入最大长度)
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>      
ShowHintLen:   
            mov ah,9
            mov dx,offset szHintLen
            int 21h
            ret

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;处理输入最大长度,ds:dwStrMaxLen保存结果,最大128
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
InputHintLen:
            push bx
            push cx
            push dx
            push es
            push si
            
            xor bx,bx
            xor dx,dx
            mov ax,0b800h   ;设定显示的初始位置
            mov es,ax
            mov si,160*4
            
   Input1:mov ah,0
            int 16h
            cmp al,0dh;回车结束输入
            jeBack1
            cmp al,30h
            jbBack1
            cmp al,39h;判断是否为数字0-9
            jaBack1
            push ax
            mov ax,ds:dwStrMaxLen
            mov bl,10
            mul bl          ;获取已经输入的数据,*10
            
            pop bx      
            and bx,00ffh
            orbx,2c00h
            mov es:,bx
            add si,2      ;显示输入的字符
                        
            and bx,000fh    ;获得新输入的数据
            add ax,bx
            mov ds:dwStrMaxLen,ax
            
            jmp Input1         
            
    Back1:pop si
            pop es
            pop dx
            pop cx
            pop bx            
            cmp ds:dwStrMaxLen,128 ;设置最大输入长度
            jb Back1_Ret
            mov ds:dwStrMaxLen,128            
Back1_Ret: ret

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;显示提示字符(输入字符)
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                              
ShowHintText:
            mov ah,9
            mov dx,offset szHintText
            int 21h
            ret

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;处理输入字符,ds:szInPutBuf保存结果,最大128,回车结束
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>   
InputHintText:
            push bx
            push cx
            push dx
            push es
            push si
            
            xor bx,bx
            xor dx,dx
            mov ax,0b800h   ;设定显示的初始位置
            mov es,ax
            mov si,160*5
            mov cx,ds:dwStrLen
            
   Input2:mov ah,0
            int 16h   
            
            cmp al,0dh;回车结束输入
            jeBack2
            
            mov ds:szInputBuf,al
            inc bx         
            
            and ax,00ffh
            or ah,2ch
            mov es:,ax
            add si,2      ;显示输入的字符
            
            mov ax,ds:dwStrLen
            inc ax
            mov ds:dwStrLen,ax;保存输入字符的长度

            loop Input2         
            
    Back2:pop si
            pop es
            pop dx
            pop cx
            pop bx
            ret

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;处理输入字符的转换,ds:szOutBuf保存结果
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
TextChange:
            push bx
            push cx
            push dx
            push es
            push si
            
            xor bx,bx
            xor dx,dx
            mov cx,ds:dwStrLen
Change:   mov al,ds:szInputBuf
            cmp al,'A'
            jb Next1
            cmp al,'Z'
            ja Next1
            oral,20h
Next1:    mov ds:szOutBuf,al
            inc bx
            loop Change                  
            
   Back3:   pop si
            pop es
            pop dx
            pop cx
            pop bx
            ret         

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;显示提示字符(字符转换)
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ShowHintChange:
            mov ah,9
            mov dx,offset szHintChange
            int 21h
            ret

ShowText:   
            push bx
            push cx
            push dx
            push es
            push si
            
            xor bx,bx
            xor dx,dx
            mov ax,0b800h
            mov es,ax
            mov si,160*6
            mov cx,ds:dwStrLen
            
            
   Show:    mov al,ds:szOutBuf
            mov ah,2ch          ;设定颜色
            mov es:,ax
            add si,2
            inc bx
            loop Show            
            
   Back4:   pop si
            pop es
            pop dx
            pop cx
            pop bx
            ret

    Stop:      
            mov ax,4c00h
            int 21h      
   
code ends
    end start

李亖 发表于 2012-5-25 16:31:34

fujian810 发表于 2012-5-25 10:48 static/image/common/back.gif
assume cs:code,ds:data,ss:stack

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>


:L大哥 这么高级的东东 我还没学到那个水平 我就是想问哈我的代码中有哪些错误,为何转换后没有存储
页: [1]
查看完整版本: 大写字母转换成小写字母