其实,比较简便的 *** 作是,删掉这个工程中的567.ASM,重新加载567.C就行。
楼主这段程序写得不错,结构清晰,层次分明,已经正确地完成了字符的转换。只是在算法上略显不足,再就是没有显示输出。针对这两点,在楼主原有程序的基础上,我给做了一下优化和补充(这部分,我用小写),仅供参考。
DATA SEGMENT
X DB 41H,42H,43H,44H,45H,46H,47H,48H,49H,50H,51H,52H,53H,54H,55H,5EH,64H,48H,76H,77H
Y DB 20 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
LEA SI,X
LEA DI,Y
MOV CX,20
cld 清方向标志,使变址寄存器增值
push ds
pop es 使附加段与数据段在同一段位
L1: lodsb
CMP AL,'A'
JB L2
CMP AL,'Z'
JA L2
or AL,20H 逻辑运算指令远比数据传送指令运行周期短、效率高
JMP L3
L2: xor al,al
JMP L3
L3: stosb
LOOP L1
---------------------------
为显示输出做准备
mov byte ptr [si],0dh 在源字符串后面加一个回车符
inc si
mov byte ptr [si],0ah 在源字符串后面加一个换行符
inc si
mov al,'$'
mov [si],al 在源字符串后面加一个字符串输出结束标志符,这是dos功能调用9号功能的要求
stosb 在目标字符串后面加一个字符串输出结束标志符
---------------------------
下面是显示输出
lea dx,X 源字符串地址
mov ah,9 显示输出
int 21h
lea dx,Y 目标字符串地址
mov ah,9 显示输出
int 21h
---------------------------
MOV AH,4CH
INT 21H
CODE ENDS
END START
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)