这几天第一次写了汇编的程序,说句实在话,汇编真的比什么C啊,C++容易很多,因为它就是最底层的东西,所有的东西都清清楚地摆在你面前,不像一些高级语言,别人给你包装好了,自己用的时候却老出现不明不白的错误。照编程惯例,哥的第一个程序也是HELLO WORLD,居然一次通过了。
但是汇编写程序真的很烦啊,这也就是高级语言存在的原因。有同学老是问我那我们学汇编有什么用呢?其实我也在刚学,我也没打算将来靠汇编来写程序。我突然自己想出一句话:如果你只会用高级语言写程序,你是个代码工人,至多是个软件工程师;但是如果你还会汇编,那就软硬能吃了。(信口胡绉,别拍砖)对于我们电子类专业的学生来说,学会汇编对理解微机的工作是很有帮助的。而且学会底层的语言也会加深你对上层语言的理解和运用,就像学会C在用JAVA的时候就会知道,程序是要回收空间的,虽然在JAVA里不用写相应语句,但是程序还是会执行这些东西的,如果不考虑这一点,有时是会影响你程序的正常运行的。这是我目前的收获。
HELLO WORLD:
DATA SEGMENT
CR EQU 0DH
LF EQU 0AH
MES DB 'HELLO WORLD!',CR,LF,'$'
DATA ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET MES
MOV AH,9
INT 21H
MOV AX,4C00H
INT 21H
MAIN ENDP
CODE ENDS
END START
ASIC码转二进制:
DATA SEGMENT
D1 DB 6,?,10 DUP(?) ;longest:6
ZE EQU '0'
TEN EQU 10
DATA ENDS
STACK SEGMENT STACK 'STACK'
STT DB 100 DUP(?)
STACK ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,STACK
MOV SS,AX
PUSH DS
MOV AX,0
PUSH AX ;return DOS
MOV AX,DATA
MOV DS,AX ;Init end
MOV DX,OFFSET D1
MOV AH,0AH
INT 21H ;get input
MOV CL,D1[1] ;get strlen
MOV BX,2
MOV AX,0
R1: MOV DX,10
MUL DX
ADD AL,D1[BX]
ADC AH,0
SUB AX,ZE
INC BX
LOOP R1
MOV CX,16
CHG: RCL AX,1
PUSH AX
JNC C1
MOV DL,'1'
MOV AH,2
INT 21H
JMP C2
C1: MOV DL,'0'
MOV AH,2
INT 21H
C2: POP AX
LOOP CHG
RET
MAIN ENDP
CODE ENDS
END START