用汇编语言,将指定字符串中所有符号(不包括空格)转换成“*”号,不要求输入,只要求输出
本来的string可以是:“JAVA: How to Program,,D.P."
输出应该是:”JAVA* How to Program**D*P*“
请问这个程序怎么写,在线等,急,谢谢!!! 展开
DATAS SEGMENT ;数据段
STRING DB 'JAVA: How to Program, ,D.P.' ;欲转换的字符串
DAITIFU DB '*' ;该变量 内容是将要修改的字符 修改成什么字符
LENGHT DB OFFSET DAITIFU- OFFSET STRING ;字符串的长度
DATAS ENDS
CODES SEGMENT ;代码段
ASSUME CS:CODES,DS:DATAS
START: MOV AX,DATAS ;初始化
MOV DS,AX
;需要一个循环来将字符串的每一个字符逐个判断且替换.循环次数自然就是字符串的字符数
XOR CX,CX
MOV CL,LENGHT ;lenght变量其中保存的是 string字符串的字符数
MOV SI,OFFSET STRING
CLD ;反方向标志清零
KAISHI: LODSB ;取出字符串的字符
CMP AL,'0'
JB FUHAO ;如果小于 字符0则证明 不是 数字了一定是符号
CMP AL,'9'
JA DAXIEZIMU ;如果大于9 那么则去判断是否为大写字母
;到此则证明 大于0 且小于 9则 执行下一次循环即可
JMP SHORT CONTINUE
DAXIEZIMU: CMP AL,'A'
JB FUHAO ;如果小于 字符 A则证明 不是 字母 所以一定是符号
CMP AL,'Z'
JA XIAOXIEZIMU ;如果大于Z 则判断是否为小写字母
;到此则证明 此时判断的是一个 字母 所以不做任何处理执行下一次 循环即可
JMP SHORT CONTINUE
XIAOXIEZIMU: CMP AL,'a'
JB FUHAO ;如果小于 字符 a则证明 不是 字母 所以一定是符号
CMP AL,'z'
JA FUHAO ;如果大于z 则判断是否为小写字母
;到此则证明 此时判断的是一个 字母 所以不做任何处理执行下一次循环即可
JMP SHORT CONTINUE
FUHAO: CMP AL,' ' ;此处是处理特殊符号的程序段
JZ CONTINUE ;判断若是空格则不作任何处理
MOV AL,DAITIFU
STOSB
CONTINUE: MOV DL,AL ;再次 将字符输出
MOV AH,02H
INT 21H
DEC CX
CMP CX,0
JNZ KAISHI
MOV AH,07H ;暂停看结果
INT 21H
MOV AX,4C00H ;退出程序
INT 21H
CODES ENDS
END START
汇编语言爱好者为您回答,请选我.
code segment
db 'JAVA: How to Program, , D.P.','$'
start:
mov ax,cs
mov ds,ax
sub si,si ;ds:si=cs:0
big:
cmp byte ptr [si],'$'
je ok
cmp byte ptr [si],'0'
jb space
cmp byte ptr [si],'9'
jna next
cmp byte ptr [si],'A'
jb space
cmp byte ptr [si],'Z'
jna next
cmp byte ptr [si],'a'
jb change
cmp byte ptr [si],'z'
jna next
jmp short change
space:
cmp byte ptr [si],' '
je next
change:
mov byte ptr [si],'*'
next:
inc si
jmp short big
ok:
sub dx,dx ;ds:dx=cs:0
mov ah,9
int 21h
mov ah,7
int 21h
mov ax,4c00h
int 21h
code ends
end start
除了数字和字母我全部用*代替。不知是否还要改进 (当然要用英文的标点符号.如果是汉字标点符号,当做2个字节,会把这2个都变成*)