两个子函数,一个子函数统计字符串中字符的个数并放在CX中
另一个输出AX中的无符号整数 ,可以是0,但最大只能是4位数,并且前三位不能超过255
在主函数中先调用统计字符个数的子函数COUNT,然后把CX中的数复制到AX中,在调用显示AX中的数字
注意:在调用函数时系统默认把调用之前的地址放入栈中,在子函数中如果用到了PUSH,必须都POP完,否则函数返回时错误
汇编代码:
DATAS SEGMENT;此处输入数据段代码 a1 db '123456789abcdefghjk$' A2 DB 'SDFSADFASFSADFS$'
DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码
STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS
START:MOV AX,DATASMOV DS,AX;此处输入代码段代码MOV SI,OFFSET A1CALL COUNTMOV AX,CXCALL DISPLAYMOV SI,OFFSET A2CALL COUNTMOV AX,CXCALL DISPLAYMOV AH,4CHINT 21HCOUNT PROC;统计字符串个数 SI入口参数,CX出口参数PUSH DXPUSH AXMOV CX,0
L0: MOV DL,[SI]CMP DL,'$'JE OVERMOV AH,2INT 21H ADD SI,1INC CXJA L0OVER: POP AXPOP DXRET
COUNT ENDP DISPLAY PROC;显示无符号十进制数 AX入口参数 PUSH AXPUSH BXPUSH DXMOV BH,0MOV BL,10
L0:DIV BLPUSH AXINC BHMOV AH,0CMP AL,0JNE L0L1:CMP BH,0JE OVERSUB BH,1POP DXMOV DL,DHADD DL,48MOV AH,2INT 21HJMP L1 ;没有会错误,因为栈里放着返回函数的地址,栈里新放的数据需要POP完OVER: POP DXPOP BXPOP AXRET
DISPLAY ENDPCODES ENDSEND START