Assembly 不存储输入的寄存器

Assembly 不存储输入的寄存器,assembly,intel,8051,Assembly,Intel,8051,我获取输入并将其存储在寄存器R1和R2中。然后,我使用CJNE命令执行比较,如果R1或R2中存储的输入与数组中的数据匹配,我会做一些事情。但问题在于下面的代码中,有时R1和R2有数据,有时没有。我已经通过调试模式验证了它,并在端口上显示了其中的内容。为什么会发生这种情况?我做错了什么 以下程序是用intel8051汇编编写的,并在keiluvision 请检查代码: ORG 00H UserName: DB 12,13,14,0 Password: DB 15,125,240,0 MOV R

我获取输入并将其存储在寄存器R1和R2中。然后,我使用
CJNE
命令执行比较,如果R1或R2中存储的输入与数组中的数据匹配,我会做一些事情。但问题在于下面的代码中,有时R1和R2有数据,有时没有。我已经通过调试模式验证了它,并在端口上显示了其中的内容。为什么会发生这种情况?我做错了什么

以下程序是用
intel8051汇编
编写的,并在
keiluvision

请检查代码:

ORG 00H

UserName: DB 12,13,14,0
Password: DB 15,125,240,0

MOV R0,#00h
mov R6,#04h
mov P1,#00h
mov p2,#00h

TakeUserName:

JB P2.1, TakePassword 

mov R1,P1 // storing username number in R1

SJMP TakeUserName

TakePassword:

JB P2.2, CheckUserName    

mov R2,P1 // storing password number in R2

 SJMP TakePassword


CheckUserName:

MOV DPTR,#UserName

Here1:

CLR A

MOVC A, @A+DPTR

INC DPTR

CJNE A, 01h,Here1   // compare A with data in R1

mov p2,#00h

Setb P2.0 

AJMP CheckPassword    

CheckPassword:

MOV DPTR,#Password

Here:

CLR A

MOVC A, @A+DPTR

INC DPTR

CJNE A, 02h,Here  

Setb P2.1 // setting of this bit shows password is successfully matched

AJMP Exit


End
请引导我找出这种奇怪行为的原因


关于

您没有说明您连接到端口的内容或您在端口上输入的内容。我建议您在调试器中逐步检查代码以找到问题。如果您使用外部存储器,只需简单说明一下8051 I/O端口:“在正常操作期间,当用作外部存储器的ADDR/数据总线时,端口0和2可能不会用作通用I/O。”(请参阅“80C51系列硬件说明”文档)我目前正在模拟Keil uVision上的代码