计算字符串中sun的个数并以SUNXXXX的形式表示出来

DATAS SEGMENT;此处输入数据段代码  
ENG    DB 'Here is sun,sun,sun,sun,sun,...,$' 
DISP   DB  'SUN'
DAT    DB  '0000' , 0DH, 0AH, '$' 
KEYWORD DB  'sun'
DATAS ENDS

STACKS SEGMENT
   DW 100 DUP(?) ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX;此处输入代码段代码
    MOV ES, AX  ;给 ES 赋值 
BEGIN:  MOV AX, 0 
	MOV DX, DISP-ENG-2 ;计算 ENG 的长度(每次比较 sun,因此比较次数-2) 
	LEA BX, ENG 
COMP:   MOV DI, BX 
	LEA SI, KEYWORD 
	MOV CX, 3 
	REPE CMPSB  ;串比较 
	JNZ  NOMATCH 
	INC  AX  ;是,SUN 的个数加 1 
	ADD BX, 2 
NOMATCH:INC BX  ;指向 ENG 的下一个字母 
	    DEC DX 
	    JNZ COMP 
DONE:   MOV CH, 4 ;将次数转换为 16 进制数的 ASCII 码 
	    MOV CL, 4 
	    LEA BX, DAT  ;转换结果存入 DAT 单元中 
DONE1:  ROL AX, CL 
	    MOV DX, AX 
	    AND DL, 0FH  ;取一位 16 进制数 
	    ADD DL, 30H 
	    CMP DL, 39H 
	    JLE  STORE 
	    ADD DL, 07H  ;是“A~F”所以要加 7 
STORE:  MOV [BX], DL  ;转换结果存入 DAT 单元中 
	    INC BX 
	    DEC CH 
	    JNZ DONE1 
DISPLAY: 
	   LEA DX, DISP ;显示字符串程序(将 DISP 和 DAT 一起显示) 
	   MOV AH, 09H 
	   INT 21H 
	   
       MOV AH,4CH
       INT 21H
CODES ENDS
    END START

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值