如何使用汇编语言编写此程序

时间:2013-12-21 00:38:28

标签: assembly

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

我的代码是否正确?

1 个答案:

答案 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和四个条件跳转。

此外,您的程序缺少告诉用户输入字符的字符串以及打印消息,告知用户是否符合条件。