微机原理的一道编程题!!!!!!

来源:百度知道 编辑:UC知道 时间:2024/06/24 15:38:45
给一个字串"38A4CE",将所有的数字改写成“#”,将所有的大写字母改成小写字母。

偶是这样想的 先判断某位的数值是否介于0-9之间or介于A-Z之间,然后再通过跳转命令转换字符,但是具体怎么实现,怎么把程序编出来,我就没有思绪了。

本人微机学的不好,希望有高人能多多指点,谢谢~~~

这题不复杂啊

解题思路:对于给定字符串的每一个字符,检查它是否是数字或大写字母,是则作相应处理,不是则继续读下一个.由此可以看出字符串什么时候结束得有限定条件,可以将字符串长度保存在寄存器或存储器中,也可设字符串以特定字符结束,通常以0结束.为了不和别人重复,设长度保存在前面的单元中.
DATAS SEGMENT
STRLEN DB 6
STR DB "38A4CE"
DATAS ENDS
编程时进行
1 设指针指向第一个字符,CX为循环次数
2 读当前指向字符
3 是数字么,是则替换为#
4 是大写字母么,是则改为小写
4 指针加1
5 LOOP 第2步

是数字或是大写字母可用函数表示
以下附代码:
DATAS SEGMENT
STRLEN DW 6
STR DB "38A4CE",13,10,'$'
DATAS ENDS

STACKS SEGMENT
DB 100 DUP (0)
STACKS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV DX,OFFSET STR
MOV AH,9
INT 21H;显示修改前的字符串
MOV CX,[STRLEN];字符串长度值送CX控制循环次数
MOV SI,OFFSET STR;SI指向第一个字符
ABC:MOV AL,BYTE PTR [SI];读当前指向字符
CALL IS0_9;是数字么?
JC NEXT1
MOV BYTE PTR [SI],'#';CF=0表示是0-9
JMP AG
N