菜鸟与你分享如何写程序
如何写程序是个很深的话题,不敢妄加臆断.在这里只想通过一个小程序与大家分享一下心得,纯属个人经验,不足之处还请老鸟斧正.
相信很多和我一样的朋友曾经有这样的困惑,看书上的例子都懂,课后习题也大概的懂.或者看着书上的例子也能敲出一点东西来,但是一离
开书本基本就没什么头绪了.感觉想写什么都无从下手,学了那么长时间那么多东西感觉无一点用处.于是乎,很苦恼的坐在电脑前发呆,看看网页
,玩玩游戏,慢慢的时间混过去了...
首先我们要明白一点,程序是为了解决问题的.而解决问题就需要工具,语言就是写程序的工具,仅仅是个工具.一定要确定语言的地位,战略上藐视它,实践中重视它.
有些初学者被语言奴役了,学完这个学那个,整天被不同语言的语法区别搞的晕头转向.要意识到我们才是主人,语言才是奴隶.我们让它做什么,它就要不停的做,直到收到停止指令.
编程重要的是思想.一个问题出来后,我们要想到怎么去解决它,然后用语言实现就好了.好了,废话说多了.举个简单的例子,王爽汇编书中的一个实验题,相信很多人看过或者正在看或者即将要看.
题目:
'1. display '
'2. brows '
'3. replace '
'4. modify '
要求:将上面4个字符串前四个字母变成大写.
拿到题目后,我们开始糊涂了....
不急,这时候我们有可能只记得一个最重要的知识点就是 二进制ASCII码 和11011111B,与(and)一下就变成大写了.这点应该是看书后的绝大多数人记得的吧.有时候,确实我们能想到的就是一些解决问题的关键步骤,但是具体实现完全没头绪.没事,想到这里我们立刻转变成程序语句.
二进制ascii码 and 11011111B
到这里,自然的想到:哎呀,这样的东西,程序怎么能执行呢,管他呢,想到了就写出来吧.知道一点语法的知道,汇编不能识别(二进制ASCII码)这样的东西的.对了,汇编书不都是介绍了8086有很多寄存器么,既然是汇编给的那肯定能认识了吧.那就拿过来存放字符串吧,随便选个寄存器.就bx吧.
于是就变成:
and [bx],11011111B
问题又来了:and操作需要指明2个操作数的大小的,后面11011111B一看就知道是8位的.前面[bx]就需要我们指明了.其实这里不指明也不要紧,编译时,肯定出错一看提示就明白了.这也是我们经常遇到的这类情况,很正常的.我们还是指明下不用编译时候再回来改了.
and byte ptr [bx],11011111B ;指明[bx]"三维"是byte型的和后面的对应
好了,这里实现了一个字符的大写转换,那要实现4个呢.那就循环一下吧
我们希望bx从0变到3.那就每次循环加1吧,初始值设为0.
mov cx,4 ;先设置一下循环次数
mov bx,0 ;初始设为0,从第一个字母开始.
s: and byte ptr [bx],11011111B
inc bx ;每次循环+1,指向下个字母.
loop s
mov cx,4 ;先设置一下循环次数
mov bx,0 ;初始设为0,从第一个字母开始.
s: and byte ptr [bx+3],11011111B
inc bx ;每次循环+1,指向下个字母.
loop s
mov cx,4 ;4行循环4次
mov di,0 ;从第一行开始
s0: {每行变大写}
add di,16 ;每次循环变到下一行.或者 add di,10h.每行大小是16个字节,不足的用空格填充的.
loop s0
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)