1 ;===================== 2 ;字符串中大寫變小寫 3 DATAS segment 4 String db 10, ?, 10 dup(?) ;最多接收10個字符,最后的回車算一個字符 5 DATAS ends 6 7 CODES segment 8 START: 9 mov AX,DATAS 10 mov DS,AX 11 ;正式代碼部分 12 13 mov dx,offset String 14 mov ah,0ah ;10號功能調用設置 15 int 21h ;調用10號DOS中斷,輸入字符串 16 17 mov si,offset String+1 ;獲取記錄輸入字符個數內容的偏移地址 18 xor cx,cx ;cx清零 loop循環的次數由cx設置 19 mov cl,[si] ;設置循環次數將: DS:si中的內容取出來放入cl中 20 lp: 21 inc si ;si自增1 22 mov al,[si] ;把si地址中存放的數據傳給al 23 cmp al,'A' ;字符比較 24 jb next ;如果小於'A'則跳轉到next: 25 cmp al,'Z' 26 ja next ;如果大於'Z'則跳轉到next: 27 add al,20h ;在'A'~'Z'范圍內,加20h變成小寫 28 mov [si],al ;將內容重新存放進內存空間 29 next: 30 loop lp ;循環調用 31 mov byte ptr [si+1],'$' ;字符串最后加個'$'便於用9號功能輸出避免輸出許多無關內容 32 33 mov ah,2 34 mov dl,0ah 35 int 21h ;換行 36 mov dl,0dh 37 int 21h ;換行 38 ;為什么+2?因為錄入字符串的時候string 指向的內存地址空間依次存放的 0ah,錄入的 39 ;個數,錄入的字符串 40 mov dx,offset String+2 41 mov ah,9 42 int 21h ;調用9號DOS中斷,顯示首地址為DS:DX的字符串 43 44 mov al,0 45 mov AH,4CH 46 INT 21H 47 CODES ends 48 end START