请帮我看看编得对不对,如果不对,应该怎么样改正?编程讲STRING为首址的字符串中的大写字母改写成小写字母,设字符串以$结尾,“$”=24HLEA DI,STRINGMOV AL,'$'CLDAGAIN:SCASBJE FICMP AL.'A'JL A1CMP AL,'Z'JG A1OR

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/04 19:15:27
请帮我看看编得对不对,如果不对,应该怎么样改正?编程讲STRING为首址的字符串中的大写字母改写成小写字母,设字符串以$结尾,“$”=24HLEA DI,STRINGMOV AL,'$'CLDAGAIN:SCASBJE FICMP AL.'A'JL A1CMP AL,'Z'JG A1OR

请帮我看看编得对不对,如果不对,应该怎么样改正?编程讲STRING为首址的字符串中的大写字母改写成小写字母,设字符串以$结尾,“$”=24HLEA DI,STRINGMOV AL,'$'CLDAGAIN:SCASBJE FICMP AL.'A'JL A1CMP AL,'Z'JG A1OR
请帮我看看编得对不对,如果不对,应该怎么样改正?
编程讲STRING为首址的字符串中的大写字母改写成小写字母,设字符串以$结尾,“$”=24H
LEA DI,STRING
MOV AL,'$'
CLD
AGAIN:SCASB
JE FI
CMP AL.'A'
JL A1
CMP AL,'Z'
JG A1
OR AL 20H
STOSB
A1:JMP AGAIN
FI:INT 21H

请帮我看看编得对不对,如果不对,应该怎么样改正?编程讲STRING为首址的字符串中的大写字母改写成小写字母,设字符串以$结尾,“$”=24HLEA DI,STRINGMOV AL,'$'CLDAGAIN:SCASBJE FICMP AL.'A'JL A1CMP AL,'Z'JG A1OR
一、修改你的程序段
一定要注意,使用字符扫描指令SCASB,默认的段是附加段ES,且执行一次SCASB指令,目的变址寄存器DI自动增1(已执行CLD指令).
LEA DI,STRING
MOV AL,'$'
CLD
AGAIN:SCASB
JE FI
CMP byte ptr es:[di-1],'A' ;在执行过程中,AL的值始终是'$',不是你想象的被扫描的字符
jb AGAIN
CMP byte ptr es:[di-1],'Z'
jb AGAIN
OR byte ptr es:[di-1],20H
JMP AGAIN
FI:mov ah,4ch
INT 21H
二、换思路,重新编写
用lodsb指令,默认的段是数据段DS,且执行一次lodsb指令,源变址寄存器SI自动增1(已执行CLD指令).
lea si,STRING
cld
Again:lodsb
cmp al,'$'
jz exit
cmp al,'A'
jb Again
cmp al,'Z'
ja Again
or al,20h
mov [si-1],al
jmp Again
exit:
mov ah,4ch
int 21h