|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
首先声明,我也是一个才学汇编一个月的24k纯金菜鸟(我还是学生党),也只是会点基础。
不过,我觉得,其实汇编真得很好学。没有C语言复杂,这是我自身的感觉。
在C里,你要去关心数据类型,到处可见的逻辑错误,等等。总之,C里经常容易犯错
你可能会说,汇编很烦人。又没让你用汇编去写个操作系统,你也别想着要干这档子事情。
在我看来,汇编两个作用,控制硬件和帮助你了解计算机。你别指望用来写大型应用程序。除非你是闲着蛋疼了。
C语言已经够底层的了。
下面是我今天写的一个小程序。人机交互的。
写好之后,确实觉得,汇编很容易。
我觉得就两个事情。处理好内存和寄存器 准确使用指令
DATA SEGMENT USE16
ACCOUNT DB 'SUNWUKONG'
LLA = $-ACCOUNT
PASSWORD DB '123456'
LLP = $-PASSWORD
MSG1 DB 0AH, 0DH, 'Please enter your account:$'
MSG2 DB 0AH, 0DH, 'Please enter your password:$'
WRONG1 DB 0AH, 0DH, 'The account does not exist!$'
WRONG2 DB 0AH, 0DH, 'Account and password dismatch!$'
LOGIN DB 0AH, 0DH, 'Log in succesfully$'
WARNING DB 0AH, 0DH, 'You have tried 3 times, the program ends now!$'
BUF1 DB 20
DB ?
DB 20 DUP(?)
BUF2 DB 20 DUP(?)
LEN3 DB 0
LEN1 DB 0
LEN2 DB 0
FLAG DB 0
COUNT DB 0
DATA ENDS
CODE SEGMENT USE16
ASSUME CS:CODE, DS:DATA
BEG:
MOV AX, DATA
MOV DS, AX
MOV AL, FLAG
XOR AL, 0
JZ INPUT
WRACC:
MOV AH, 09H
LEA DX, WRONG1
INT 21H
JMP INPUT
WRPAS:
MOV AH, 09H
LEA DX, WRONG2
INT 21H
INPUT:
INC COUNT ;用户每登录一次,计数器就+1
MOV AL, COUNT
XOR AL, 4
JZ TERMINATE ;如果输入次数超过三次,则程序强行退出
;------------------------------------
;提示用户输入账户
MOV AH, 09H
LEA DX, MSG1
INT 21H
;------------------------------------
;------------------------------------
;用户输入账户
MOV AH, 0AH
LEA DX, BUF1
INT 21H
LEA SI, BUF1+2
MOV BL, BUF1+1
MOV BH, 0
MOV BYTE PTR [BX+SI], '$'
;-------------------------------------
;-------------------------------------
;提示用户输入密码
MOV AH, 09H
LEA DX, MSG2
INT 21H
;-------------------------------------
;-------------------------------------
;接收用户的输入
LEA BX, BUF2
AGAIN:
MOV AH, 07H
INT 21H
MOV AH, AL
XOR AH, 0DH
JZ NEXT ;一旦遇到回车符,就停止接收
INC LEN3
MOV [BX], AL
INC BX
MOV AH, 02H
MOV DL, '*'
INT 21H
JMP AGAIN
;-------------------------------------
;-------------------------------------
;判断账户是否合格
;先计算输入帐号的长度,并与存储的帐号长度进行比较
NEXT:
MOV AL, BUF1+1
XOR AL, LLA
JNZ WRACC
MOV CX, LLA
LEA BX, BUF1
LEA SI, ACCOUNT
COMP:
MOV AL, [BX+2]
MOV AH, [SI]
XOR AL, AH
JNZ WRACC ;一旦发现不匹配立刻跳转
INC BX
INC SI
LOOP COMP
;开始判断密码是否有错,原理同检查帐号一样
MOV AL, LEN3
XOR AL, LLP
JNZ WRPAS
MOV CX, LLP
LEA BX, BUF2
LEA SI, PASSWORD
COMP2:
MOV AL, [BX]
MOV AH, [SI]
XOR AL, AH
JNZ WRPAS
INC BX
INC SI
LOOP COMP2 ;一旦发现不匹配就跳转
;-------------------------------------
;-------------------------------------
;提示用户登录成功
MOV AH, 09H
LEA DX, LOGIN
INT 21H
JMP SUCCEED
;-------------------------------------
TERMINATE:
MOV AH, 09H
LEA DX, WARNING
INT 21H
SUCCEED:
MOV AH, 4CH
INT 21H
CODE ENDS
END BEG
|
|