汇编

    想不起来是什么原因促使我看《编程高手箴言》了,好像是在逛帖子的时候碰到的。在看这本PDF的时候看了第一章程序点滴和第四章高级语言的原理,发现有必要把汇编学习一下,起码能做到能看懂汇编代码那种就可以了,后来就开启了汇编的学习旅程,刚好碰上国庆,外面人多,景点人挤人,所以直接宅在家里了,学习了汇编,从网上下载了王爽的汇编语言那本PDF,同时也跟着视频看,学习了两天,感觉汇编还挺有趣,解决问题的思路还真不一般,从计算机的角度解决问题,思考问题。举个例子吧,字符的大小写转换(char a[]="BaSiC";char b[]="UNiX";),将数组a中的大写字符转成小写,将数组b中的小写字符转成大写,用汇编和C解决。用C来解决的话,我们一般的思维是判断数组中的每一个字符到底是大写还是小写,若是小写,将小写转成大写;若是大写,将大写转成小写。这样就多了判断的语句,试想一下,若有很多的字符要转换,时间可能会长一点。但是还有其他一种方法,字符(a-z,A-Z)的ASCII码有个规律,大写字符的第五位是0(A=01100101),小写字符的第五位是1(a=01100001),这样将字符的第五位置为0,它必将变为大写字母,将字符的第五位置为1,它必将变为小写字母。这样岂不是省了判断的语句了。

    以下为汇编的代码(重要的部分,将小写转换成大写)

 s: mov al,[bx]

    mov al,11011111B            ;变为大写字母 

    mov [bx],al

    loop s

一下为C语言的实现:

        char a[]="BaSiC"; //转换成大写

char b[]="MinIX"; //转换成小写

int i=0;

do 

{

a[i]=a[i]&0xDF; //11011111b=DFH

b[i]=b[i]|0x20; //00100000b=20H

i++;

} while (i<5);

        

这样做则更高效。
    在学习汇编是也在纠结一个问题:怎样通过将字符’a’转化为ASCII码61H的?在网上找到了一片博客挺不错,http://www.crifan.com/files/doc/docbook/char_encoding/release/html/char_encoding.html,还提供了下载。


你可能感兴趣的:(汇编,c/c++)