LC-3汇编语言
.orig x3000
LOOP1 AND R1,R1,#0ADD R1,R1,#3LEA R0, string1PUTS ;打印string1AND R0,R0,#0ADD R0, R0, #10 OUT ;打印换行符GETCOUT;检查输入的字符是否为'W'(ASCII码为87)ADD R0,R0,#-16ADD R0,R0,#-16ADD R0,R0,#-16ADD R0,R0,#-16ADD R0,R0,#-16ADD R0,R0,#-7BRnp LOC4AND R0,R0,#0ADD R0, R0, #10 OUT ;打印换行符
LOOP2 LEA R0, string2 PUTS ;打印string2AND R0,R0,#0ADD R0,R0,#10OUT ;打印换行符LD R2, BUFFER
INPUT GETC ;用键盘输入一个字符OUT ;在控制台上显示输入的字符STR R0, R2, #0 ;存储字符到缓冲区;如果输入的字符是'Y(ASCII码为89),则结束输入循环ADD R3, R0, #-16ADD R3, R3, #-16ADD R3, R3, #-16ADD R3, R3, #-16ADD R3, R3, #-16ADD R3, R3, #-9BRz LOOP3 ADD R2, R2, #1 ;移动到下一个缓冲区位置BR INPUT ;继续输入下一个字符LOOP3 LD R2,BUFFER ;把x4000存到R2,从x4000开始放输入的字符串LEA R3,string3 ;把string3的地址存到R3
LOC0 LDR R4,R2,#0 ;R4存BUFFER的当前字符LDR R5,R3,#0 ;R5存string3的当前字符ADD R6,R4,#0 ;把BUFFER的当前字符放R6ADD R6,R6,#-16 ;判断BUFFER当前字符是否为'Y',如果是,说明已遍历完输入的字符串ADD R6,R6,#-16ADD R6,R6,#-16ADD R6,R6,#-16ADD R6,R6,#-16ADD R6,R6,#-9BRnp LOC1 ADD R5,R5,#0 ;判断string3当前字符是否为NULL,如果是,说明比较完成BRz LOC2
LOC1 NOT R6,R4 ;R4取反加1放到R6ADD R6,R6,#1 ADD R7,R5,R6 ;R7=R5-R4BRnp LOC3 ;如果不是0,说明有不同的字符,密码错误ADD R2,R2,#1 ;移动到BUFFER下一个字符ADD R3,R3,#1 ;移动到string3下一个字符BR LOC0 LOC2 AND R0,R0,#0ADD R0, R0, #10OUT ;打印换行符LEA R0, string4PUTS ;输出"Success!"BR LOC4LOC3 AND R0,R0,#0ADD R0,R0,#10OUTADD R1,R1,#-1BRz LOOP4 ;如果R1为0,说明机会用完了LEA R0, string5PUTS ;输出string5;把R1里数字的ASCII码输出到控制台ADD R0,R1,#15ADD R0,R0,#1ADD R0,R0,#15ADD R0,R0,#1ADD R0,R0,#15ADD R0,R0,#1OUT;输出' ',ASCII码为32AND R0,R0,#0ADD R0, R0, #15ADD R0,R0,#1ADD R0, R0, #15ADD R0,R0,#1OUTLEA R0, string6PUTS ;输出string6AND R0,R0,#0ADD R0, R0, #10OUT ;输出换行符BR LOOP2LOOP4 LEA R0, string7 PUTS ;输出string7AND R0,R0,#0ADD R0, R0, #10OUT ;输出换行符BR LOOP1
LOC4 HALTstring1 .STRINGZ "Welcome to the bank system! Type 'W' to withdraw some fund."
string2 .STRINGZ "Please input your password:"
string3 .STRINGZ "PB22061161"
string4 .STRINGZ "Success!"
string5 .STRINGZ "Incorrect password!"
string6 .STRINGZ "attempt(s) remain."
string7 .STRINGZ "Fails."BUFFER .FILL x4000.end