请帮我看看编得对不对,如果不对,应该怎么样改正?编程讲STRING为首址的字符串中的大写字母改写成小写字母,设字符串以$结尾,“$”=24HLEA DI,STRINGMOV AL,'$'CLDAGAIN:SCASBJE FICMP AL.'A'JL A1CMP AL,'Z'JG A1OR
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/31 11:12:32
![请帮我看看编得对不对,如果不对,应该怎么样改正?编程讲STRING为首址的字符串中的大写字母改写成小写字母,设字符串以$结尾,“$”=24HLEA DI,STRINGMOV AL,'$'CLDAGAIN:SCASBJE FICMP AL.'A'JL A1CMP AL,'Z'JG A1OR](/uploads/image/z/6116726-38-6.jpg?t=%E8%AF%B7%E5%B8%AE%E6%88%91%E7%9C%8B%E7%9C%8B%E7%BC%96%E5%BE%97%E5%AF%B9%E4%B8%8D%E5%AF%B9%2C%E5%A6%82%E6%9E%9C%E4%B8%8D%E5%AF%B9%2C%E5%BA%94%E8%AF%A5%E6%80%8E%E4%B9%88%E6%A0%B7%E6%94%B9%E6%AD%A3%3F%E7%BC%96%E7%A8%8B%E8%AE%B2STRING%E4%B8%BA%E9%A6%96%E5%9D%80%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%E7%9A%84%E5%A4%A7%E5%86%99%E5%AD%97%E6%AF%8D%E6%94%B9%E5%86%99%E6%88%90%E5%B0%8F%E5%86%99%E5%AD%97%E6%AF%8D%2C%E8%AE%BE%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%BB%A5%24%E7%BB%93%E5%B0%BE%2C%E2%80%9C%24%E2%80%9D%3D24HLEA+DI%2CSTRINGMOV+AL%2C%27%24%27CLDAGAIN%3ASCASBJE+FICMP+AL.%27A%27JL+A1CMP+AL%2C%27Z%27JG+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