只为记录汇编作业
题目:已知字符串STRING以‘$’为结束标志;统计其中小写字母的个数,结果送到COUNT单元,并把该字符串中的小写字母变成大写字母,其它字符保持不变。要求分别在屏幕上输出原字符串以及修改后的字符串。
代码如下:
;2.已知字符串STRING以‘$’为结束标志;统计其中小写字母的个数,结果送到COUNT单元,
;并把该字符串中的小写字母变成大写字母,其它字符保持不变。
;要求分别在屏幕上输出原字符串以及修改后的字符串。
DATA SEGMENT
STRING DB '1a2a3aABCabc!@#$' ;定义字符串
LEN DB $-STRING ;len用来记录string长度
COUNT DB 0 ;count用来记录小写字母个数
CRLF DB 0AH,0DH,"$" ;回车换行
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
XOR CX,CX ;CX初始化
MOV CL,LEN ;设置循环次数
LEA DX,STRING ;使dx指向string初始地址
MOV AH,09H ;输出原字符串
INT 21H
LEA BX,STRING ;使bx指向string初始地址
X: MOV AL,[BX] ;取bx指向地址所在的字符并放入al中
CMP AL,'a' ;字符与小写a作比较
JB NEXT ;小于则跳转next函数
CMP AL,'z' ;字符与小写z作比较
JA NEXT ;大于则跳转next函数
INC COUNT ;使count自增1
SUB AL,20H ;使当前的小写字母变成小写
MOV [BX],AL ;把小写字母变成大写
NEXT:
INC BX ;使bx指向下一个地址
LOOP X ;做循环,cx-1 当cx=0时则退出循环,执行下一条语句
LEA DX, CRLF;回车换行
MOV AH, 09H
INT 21H
LEA DX,STRING ;输出更新后的字符串
MOV AH,09H
INT 21H
LEA DX, CRLF;回车换行
MOV AH, 09H
INT 21H
ADD COUNT,30H ;让count变成ascll码并且输出
MOV DL,COUNT
MOV AH,02H
INT 21H
MOV AH,4CH ;结束
INT 21H
CODE ENDS
END START
以下代码可以输出10个以上的小写字母个数
;2.已知字符串STRING以‘$’为结束标志;统计其中小写字母的个数,结果送到COUNT单元,
;并把该字符串中的小写字母变成大写字母,其它字符保持不变。
;要求分别在屏幕上输出原字符串以及修改后的字符串。
DATA SEGMENT
STRING DB 'aaaaaaaaaaaaaaaaaaaaaaaaaa!@#$' ;定义字符串 26个a
LEN DB $-STRING ;len用来记录string长度
COUNT DW 0 ;count用来记录小写字母个数
CRLF DB 0AH,0DH,"$" ;回车换行
ANS DB 6 DUP(0)
TIMES DB 0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
XOR CX,CX ;CX初始化
MOV CL,LEN ;设置循环次数
LEA DX,STRING ;使dx指向string初始地址
MOV AH,09H ;输出原字符串
INT 21H
LEA BX,STRING ;使bx指向string初始地址
X: MOV AL,[BX] ;取bx指向地址所在的字符并放入al中
CMP AL,'a' ;字符与小写a作比较
JB NEXT ;小于则跳转next函数
CMP AL,'z' ;字符与小写z作比较
JA NEXT ;大于则跳转next函数
INC COUNT ;使count自增1
SUB AL,20H ;使当前的小写字母变成小写
MOV [BX],AL ;把小写字母变成大写
NEXT:
INC BX ;使bx指向下一个地址
LOOP X ;做循环,cx-1 当cx=0时则退出循环,执行下一条语句
LEA DX, CRLF;回车换行
MOV AH, 09H
INT 21H
LEA DX,STRING ;输出更新后的字符串
MOV AH,09H
INT 21H
LEA DX, CRLF;回车换行
MOV AH, 09H
INT 21H
XOR AX,AX ;将count输出
MOV AX,COUNT ;将count放入ax中
XOR BX,BX ;bx初始化
MOV BX,10 ;将10放入bx中
MOV DI,OFFSET ANS ;使di指向ans头地址
F:
XOR DX,DX ;dx初始化
DIV BX ;ax/bx 因为count是dw类型因此商在AX,余数在DX,这里的余数<=9,因此也在DL
ADD DL,30H ;将dl中的0-9变成ascll码里的0-9方便输出
MOV [DI],DL ;将dl放入di指向地址的内容里
INC DI ;di指针+1
INC TIMES ;tiems+1,方便后面的倒叙输出
CMP AX,0 ;ax和0作比较,如果ax=0则说明已经被除完了
JNE F ;如果ax≠0,则跳到f函数
DEC DI ;di指针-1,此时指向的是最高位
XOR CX,CX ;cx初始化
MOV CL,TIMES ;把times给cl方便循环输出
FUNCTION:
MOV DL,[DI] ;把dl指向地址的内容给dl,并做dos单字符输出操作
MOV AH,2
INT 21H
DEC DI ;di指针-1
LOOP FUNCTION ;cl>0则cl-1并且循环fuction,否则执行下一条语句
MOV AH,4CH ;结束
INT 21H
CODE ENDS
END START