小旭哥0922 发表于 2013-4-10 00:05:54

致汇编初学者

首先声明,我也是一个才学汇编一个月的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!$'
LOGINDB 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
JZINPUT

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
JZTERMINATE    ;如果输入次数超过三次,则程序强行退出
;------------------------------------
;提示用户输入账户
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 , '$'
;-------------------------------------
;-------------------------------------
;提示用户输入密码
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 , 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,
MOV AH,
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,
MOV AH,
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

czfengyong 发表于 2013-4-10 00:26:09

wzhxkz 发表于 2013-4-10 01:36:07

看不懂呵呵,学习才第3天,不过感觉有很大动力

竹海 发表于 2013-4-10 02:05:49

强烈支持楼主ing……喵了个咪的~~

1142811765 发表于 2013-4-10 03:00:08

无回帖,不论坛,这才是人道。
页: [1]
查看完整版本: 致汇编初学者