鱼C论坛

 找回密码
 立即注册
查看: 1734|回复: 4

[技术交流] 致汇编初学者

[复制链接]
发表于 2013-4-10 00:05:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
头像被屏蔽
发表于 2013-4-10 00:26:09 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-10 01:36:07 | 显示全部楼层
看不懂呵呵,学习才第3天,不过感觉有很大动力
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-10 02:05:49 | 显示全部楼层
强烈支持楼主ing……喵了个咪的~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-10 03:00:08 | 显示全部楼层
无回帖,不论坛,这才是人道。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 20:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表