初学汇编,在建立汇编开发环境的过程中,可能会遇到些挫折. 不建立好训练环境,只是看书没有实践导致学习进度减慢.我想也许有刚学汇编的人也会遇到这样的问题,所以总结一点自己的经验在这里分享,希望能帮上初学的人.
我看的书是汇编教材书,是16位DOS的汇编程序(不知是不是这样称呼).编译工具是MASM10.0的版本.
从网上抄个程序如下:
DATA1 SEGMENT
MSG1 DB 13, 10, "Iteration: "
NUM1 DB '1', "$"
MSG2 DB 13, 10, "Alphabet: $"
NUM2 DB 'A', " $"
MSG3 DB 13, 10, "Type digits, then press ENTER: $"
DATA1 ENDS
CODE1 SEGMENT
ASSUME CS:CODE1, DS:DATA1
START: MOV AX, DATA1
MOV DS, AX
MOV CX, 9
MOV AH, 09H
MOV DX, OFFSET MSG1
.REPEAT
INT 21H
INC NUM1 ;显示Iteration: 1,2,~,9
.UNTILCXZ
MOV DX, OFFSET MSG2
INT 21H ;显示字符串"Alphabet:"
MOV AH, 09H
MOV DX, OFFSET NUM2
.REPEAT
INT 21H
INC NUM2 ;显示当前字母
;当前字母向后移
.UNTIL NUM2 > 'Z' ;显示整个大写字母表
MOV AH, 09H
MOV DX, OFFSET MSG3
INT 21H
.WHILE 1 ;循环条件为永真的循环
MOV AH, 07H
INT 21H ;不带回显地从键盘读一个字符
.BREAK .IF AL == 13 ;如果输入“回车”键,则终止循环
.CONTINUE .IF (AL<'0') || (AL>'9') ;如果字符不是数字字符,则继续循环
MOV DL, AL
MOV AH, 02H
INT 21H ;显示所输入的数字字母
.ENDW
MOV AX, 4C00H
INT 21H
CODE1 ENDS
END START
构建这个程序的过程如下: (假如上面的片段组织在a.asm中)
1:ml /c a.asm
2:link16 a.obj (不是link)
3:进入cmd运行该程序
上面这个构建过程有个缺点是生成的a.obj文件会ml所在的目录下.
所以我改进如下.
把ml所在的目录设为系统环境路径,这样我们可以进入到asm所在的目录,再键入上面的命令.
由于每次的构建都是类似, 都会经过上述三步.所以我在ml所在的目录建立一个批处理文件
//build16.bat
if exist %1.obj del %1.obj
if exist %1.exe del %1.exe
ml /c %1.asm %1.obj
if errorlevel 1 goto errasm
link16 %1.obj
if errorlevel 1 goto errlink
dir %1.*
%1.exe
goto theend
:errlink
echo _
echo Link error
goto theend
:errasm
echo _
echo Assbmbly Error
goto theend
:theend
pause
这样一条语句就可以完成 build16 a
我原来想是在批处理文件中把生成在ml所在目录下的文件拷贝至目标目录,可是我在批处理文件中处理字符串时遇到些麻烦,而且每次要使用时还得进入ml所在的目录,会影响效率.
32位的基于windows的使用radasm就可以了.而且有个教程写得很好,上网一搜就可以找到.
上面是学习汇编的搭建训练环境的一点经验, 也不知还有什么其它方法, 希望得到各位朋友的补充和指点.
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)