1 - 编写程序以测试从键盘读取的字符并将控件转移到标签ok_here,如果字符是:
(i)有效的小写字母('a'< = character< ='z')
(ii)大写或小写字母('A'<= character&lt; ='Z'OR'a'&lt; = character&lt; ='z')
(iii)不是小写字母,即字符&lt; 'a'或字符&gt; “Z”。 程序应显示相应的消息以提示输入并指示角色是否满足相关测试。
i)个
.Model small
.stack 100h
.code
Main proc
Mov ah,1h
Int 21h
Cmp AL,'a'
JE then
Tmp else
Then:ok_here
JMP End if
Else mov AH,4CH
Int 21h
End if
ⅱ)
mov AH,1h
int 21h
cmp Al,'a'
JE then
Cmp AL,'A'
JE then
Cmp AL,'z'
JE then
JMP else
Then ok_here
Jmp End if
Else mov AH,4CH
Int 21h
End if
2 - 编写一个读取大写字母的程序,将其转换为小写并显示小写的等效字母。该程序让用户可以根据需要重复此过程。在每次迭代后,要求用户输入“y”以执行操作。
.model small
.stack 100h
.data
CR EQU 0DH
LF EQU 0AH
MSG1 DB 'enter an uppercase letter'
MSG2 DB CRLF ' the lowercase equivalent'
CHAR DB ?
.code
Main proc
Mov AX @data
Mov DS,AX
LEA DX,MSG1
Mov AH,@H
Int 21h
SAR AL.20h
Mov CHAR,AL
LGA DX ,MSG2
Mov AH,02H
Int 21h
Mov AH,4CH
Int 21h
Main Endp
End main
我的代码是否正确?
答案 0 :(得分:0)
没有
您的第一个程序仅测试AL是否为小写'a'。它还有语法错误,因为您使用ok_here作为指令,而不是标签(标签将是Then
)。此外,我猜Tmp指令实际上是JMP指令。
要使你的第一个程序正确,你必须测试AL中的值是否等于或大于'a'并且是否等于或小于'z':
CMP AL,'a'
JB notok
CMP AL,'z'
JA notok
ok_here: ;if we reach this point, AL is a lowercase letter
你的第二个程序做了类似的事情:如果AL是'A','a'或'z',则只进入ok_here。您只使用JE指令,如果AL等于CMP指令的第二个操作数,则跳转指令。要解决此问题,请使用前面的代码来测试AL是否为小写,如果是,则重复测试,但这次使用“A”和“Z”。那就是:四个CMP和四个条件跳转。
此外,您的程序缺少告诉用户输入字符的字符串以及打印消息,告知用户是否符合条件。