mc小火吧 关注:32贴子:188
  • 6回复贴,共1

黑客吧原创教程 汇编语言基础

只看楼主收藏回复


  才写了一点由于要贴图所以先发上来一点,大家别断楼,谢谢. 
    
 
  
  
 
--------------------------------------------------------------------------------
 
2 回复:黑客吧原创教程 汇编语言基础  
 当你对木马,拿站,甚至盗号,DDOS 感兴趣的时候,想要去学习,,来到论坛看着别人说的^(&@)*()*(@晕的不行的时候开始自学,很多同学由于基础不太好,所以很吃力,当你看到大叔整天的0xE8, 0x00, 0x00, 0x00, 0x00,  
73D34208 FF15 9C63DD73  感觉很难 很囧,想学又无从下手,自己看书又没有耐性,别急 百度黑客吧 推出 系列教程 从 汇编 C C++ 到ASP PHP 从API到缓冲区溢出,只要你有耐心 就算你的数学和英语只有初中水平 由浅入深 简明易懂的教程 让你从菜鸟到高手之路变得更短   
讲课前先来补充几点“误区“  
 1.很多人感觉16位指令,8086处理器,DOS操作系统是很古老很陈旧的东西, 但是它们就是P4处理器,WINDOWS和LINUX操作系统的基础。 
 因为有了16位汇编语言的基础,如果弄懂了 剩下的也就自然好学,如果直接从32位指令和WIN平台入门会有一定难度,还有一点 所谓的32位语言的学习,其实是利用WIN控制台的环境, 还有要用汇编编写WIN环境下的程序 需要了解WIN窗口应用程序接口API的编程经验 但是需要学习VC++ 才可以,这个要通过非常复杂的学习才能达到 . 但是不管在复杂的学习我都会把它整理细微后已简明的方式提供给大家,比如省略去了大量大算法,公式等. (本教程仅提供给正在入门的小鸟,大虾爬过!) 
.  
准备了一些时候,现在开课讲汇编基础,此教程属于原创,很多“废话“就不说了  要不我会很累.  
 本人水平有限,文中有错误的地方还请各位大牛 批评指认.     
 本人教程参考 (清华大学 80x86程序语言设计 美河汇编语言程序设计 电子工业出版社 汇编语言程序设计) 
      
  
第一阶段 汇编基础  
  
1.什么是汇编语言  
编语言(Assembly Language)是面向机器的程序设计语言。  
汇编语言编写的程序,机器可以直接识别,(这里的机器就是指 计算机硬件)要由一种程序将汇编语言翻译成机器语言。这种起翻译作用的程序叫汇编程序 .. 小菜们一定不懂什么叫做 机器语言 :机器语言就是 0和1组成不同形式可以被计算机直接识别成二进制指令代码的集合叫做机器语言. 什么是二进制(它由两个基本字符0,1组成,二进制数运算规律是逢二进一) 其实我们的计算机程序都是由最基本的0和1组成的.   
 
  
 
 
--------------------------------------------------------------------------------
 
5 回复:黑客吧原创教程 汇编语言基础  
 十六进制 数制表示 H 基数 16 , 
十进制数 D 基数 10 , 
八进制数O 基数 8 ,  
二进制 数制表示 B 基数2  
它们可以相互之间转换,提供给一种简单的方法 
 方法:十进制数转换成二进制数和十六进制数可以用除法,要把转换的的十进制数不断除以二进制和十六进制的基数2或是16,记住余数,直到商为0就OK了.最后一个余数起逆向取各个余数,  



1楼2009-05-03 20:48回复

    来看一下 
     拿十进制数 10来说,把它转换成2进制数是多少呢?  
     
      
      
     
    --------------------------------------------------------------------------------
     
    7 回复:黑客吧原创教程 汇编语言基础  
     1  
     
      
      
     
    --------------------------------------------------------------------------------
     
    8 回复:黑客吧原创教程 汇编语言基础  
     在看 30B= 31B=  
     
      
     
    --------------------------------------------------------------------------------
     
    9 回复:黑客吧原创教程 汇编语言基础  
     找到什么规律了么?  
      
     拿反过来呢? 给你一个二进制数你怎么转换成十进制数呢. 
      
     随便写一个把. 100111B  
     怎么转换成10进制数呢?  
     我们先来看100111一共有多少位数 一共是6位! 
     从左到右第一位是1 那么就是2全部的位数-1次幂 可能说的有些模糊 
     就是100111 一共有6位数 那么从最左边的1开始算2的5次方如果是0忽略不计到+2的2次方+2的一次方+2的0次方 
     最后就是39 还是划图写出来吧 自己看得都晕 呵呵~~  
     
      
     
    --------------------------------------------------------------------------------
     
    10 回复:黑客吧原创教程 汇编语言基础  
     我们知道了基础的二进制 0和1 那么它们是怎么组合的呢?它们有什么规律 
      
     二进制加法  
      
                  0 + 0 = 0          
                  0 + 1 = 1           
                  1 + 0 = 1           
                  1 + 1 = 0(进位1)  
     这个重点就是1+1=0 进位1的意思就是逢2进1 像前进1了原位就是0了 
     我们做一下习题 101001+101100 =? 1001111+111= ? 自己随便写几个数字来做, 可以用计算器 
     我们做题的目的主要是锻炼计算和理解运算方法,计算器作为最后演算的工具  
     减法 10011-111 = ? 1111-10011 = ? 
     先看加法 101001+101100 = 1010101 怎么得到的 ?  
      
     从最后一位开始看 1+0=1, 0+0=0 ,0+1 =1 ,1+1 =0 (注意 向前进1位) (进1)0+0(1) = 1 
     1+1= 0 (进1) 最后得到 1010101 后的那个自己运算一遍, 
     减法 10011 - 111 = 1100 怎么得到的? 最后一位开始看 1-1 =0 , 1-1 = 0 ,0-1 = 1 ( 向前0借位) 1-0 = 1  
    


    2楼2009-05-03 20:48
    回复
        
       在看 110111 - 10011 = 101100 111011 - 10101 = 110110 自己算一下 看对么? 自己想为什么  
       
        
        
       
      --------------------------------------------------------------------------------
       
      11 回复:黑客吧原创教程 汇编语言基础  
       . 转换图表  
       
       
      --------------------------------------------------------------------------------
       
      12 回复:黑客吧原创教程 汇编语言基础  
       常用BCD编码方式 
      最常用的BCD编码,就是使用"0"至"9"这十个数值的二进码来表示 
      ASCII码  
      美国标准信息交换码 
      Bin Dec Hex 缩写/字符 解释  
      0000 0000 0 00 NUL (null) 空字符  
      0000 0001 1 01 SOH (start of handing) 标题开始  
      0000 0010 2 02 STX (start of text) 正文开始  
      0000 0011 3 03 ETX (end of text) 正文结束  
      0000 0100 4 04 EOT (end of transmission) 传输结束  
      0000 0101 5 05 ENQ (enquiry) 请求  
      0000 0110 6 06 ACK (acknowledge) 收到通知  
      0000 0111 7 07 BEL (bell) 响铃  
      0000 1000 8 08 BS (backspace) 退格  
      0000 1001 9 09 HT (horizontal tab) 水平制表符  
      0000 1010 10 0A LF (NL line feed, new line) 换行键  
      0000 1011 11 0B VT (vertical tab) 垂直制表符  
      0000 1100 12 0C FF (NP form feed, new page) 换页键  
      0000 1101 13 0D CR (carriage return) 回车键  
      0000 1110 14 0E SO (shift out) 不用切换  
      0000 1111 15 0F SI (shift in) 启用切换  
      0001 0000 16 10 DLE (data link escape) 数据链路转义  
      0001 0001 17 11 DC1 (device control 1) 设备控制1  
      0001 0010 18 12 DC2 (device control 2) 设备控制2  
      0001 0011 19 13 DC3 (device control 3) 设备控制3  
      0001 0100 20 14 DC4 (device control 4) 设备控制4  
      0001 0101 21 15 NAK (negative acknowledge) 拒绝接收  
      0001 0110 22 16 SYN (synchronous idle) 同步空闲  
      


      3楼2009-05-03 20:48
      回复
        0001 0111 23 17 ETB (end of trans. block) 传输块结束  
        0001 1000 24 18 CAN (cancel) 取消  
        0001 1001 25 19 EM (end of medium) 介质中断  
        0001 1010 26 1A SUB (substitute) 替补  
        0001 1011 27 1B ESC (escape) 溢出  
        0001 1100 28 1C FS (file separator) 文件分割符  
        0001 1101 29 1D GS (group separator) 分组符  
        0001 1110 30 1E RS (record separator) 记录分离符  
        0001 1111 31 1F US (unit separator) 单元分隔符  
        0010 0000 32 20 空格  
        0010 0001 33 21 ! 
        0010 0010 34 22 "  
        0010 0011 35 23 #  
        0010 0100 36 24 $  
        0010 0101 37 25 %  
        0010 0110 38 26 & 
        0010 0111 39 27 '  
        0010 1000 40 28 (  
        0010 1001 41 29 )  
        0010 1010 42 2A *  
        0010 1011 43 2B +  
        0010 1100 44 2C ,  
        0010 1101 45 2D -  
        0010 1110 46 2E .  
        0010 1111 47 2F /  
        0011 0000 48 30 0  
        0011 0001 49 31 1  
        0011 0010 50 32 2  
        0011 0011 51 33 3  
        0011 0100 52 34 4  
        0011 0101 53 35 5  
        0011 0110 54 36 6  
        0011 0111 55 37 7  
        0011 1000 56 38 8  
        0011 1001 57 39 9  
        0011 1010 58 3A :  
        0011 1011 59 3B ;  
        0011 1100 60 3C < 
        0011 1101 61 3D =  
        0011 1110 62 3E >  
        0011 1111 63 3F ?  
        0100 0000 64 40 @  
        0100 0001 65 41 A  
        0100 0010 66 42 B  
        0100 0011 67 43 C  
        0100 0100 68 44 D  
        0100 0101 69 45 E  
        0100 0110 70 46 F  
        0100 0111 71 47 G  
        0100 1000 72 48 H  
        0100 1001 73 49 I  
        


        4楼2009-05-03 20:48
        回复
           
          13 回复:黑客吧原创教程 汇编语言基础  
           计算机中的数和数的符号都是用二进制表示的,这样的数称为机器数 
          一般用最高有效位来表示数的符号  
          原码 : 
           最高有效位表示符号( 正数用0,负数用1)其他位直接表示数值大小,有符号数的这种表示法就称为“原码表示法“  
          原码表示:符号 + 绝对值  
           X=105=01101001B,  
           X=-105=11101001B  
           这里面最高位,在字长为8位时,后面7位是数值,如果是16位的那么后面15位是数值,用原码表示有符号数的时候,+105和-105数值相同,第一位的符号不一样了 
          原码表示简单的和易懂 而且和实际的“真值“转换方便了,但两个异号数相加或同号数相减,就要做减法。为了把减法运算转换为加法就有了后面两个“反码“  “补码“  
           
            
            
           
          --------------------------------------------------------------------------------
           
          16 回复:黑客吧原创教程 汇编语言基础  
           继续 
          反码 正数的反码与原码相同,最高符号位用0表示、剩下的是数值位,而负数的反码则为它的正数的各位(包括符号位)按位取反走的..就是0变1 , 1变0 
            
           来看 
           X= +105=01101001B 
           X= -105=10010110B 
           负数的反码与原码有区别,最高符号位还是用1表示,但是数值就不同了 数值0,原码和反码有+0和-0,8位二进制原和反表示的数值范围+127到-127  
           
           
           
          --------------------------------------------------------------------------------
           
          18 回复:黑客吧原创教程 汇编语言基础  
           补码: 
           正数的补码表示和原码相同,即最高位用0表示正,其余位为数值位。负数的补码侧为他的反码,在最低有效位+1。 
          来看 正数的补码和原码相同,即最高有效位用0,剩下的是数值, 
            
           X=105 =01101001B 看和原码是相同的 
            
           来看负数的补码 
           首先来看反码 反X=105=10010110B 最低有效位+1 就是最后面的那位+1 
           就是X=-105 = 100101111  
           
            
           
          --------------------------------------------------------------------------------
           
          19 回复:黑客吧原创教程 汇编语言基础  
           最后来看二进制运算的乘法和除法,前面我们讲过了加减运算,如果熟悉了这也非常容易, 
           看一下 乘法运算规则 
            
           1 * 0 = 0 
           1 * 1 = 1 
           0 * 0 = 0 
           0 * 1 = 0 
           那1101 * 0011 看图  
           
           
           
          --------------------------------------------------------------------------------
           
          20 回复:黑客吧原创教程 汇编语言基础  
           除法 1001001/1101  
           
            
           
          --------------------------------------------------------------------------------
          


          6楼2009-05-03 20:48
          回复
             
            21 回复:黑客吧原创教程 汇编语言基础  
             逻辑运算 
             (与AND)(或OR) (非NOT) (异或XOR)  
              
             表格想画出来,可惜没拿技术  
             看下面 
             首先我们依次用符号AND OR NOT XOR "表示" 
              
             与运算 1 AND 0 = 0 
             1 AND 1 = 1 
             0 AND 0 = 0 
             0 AND 1 = 0 
             或运算 1 OR 0 = 1 
             1 OR 1 = 1 
             0 OR 0 = 0 
             0 OR 1 = 1 
              
             非运算 NOT 0 = 1 
             NOT 1 = 0 
              
            异或运算 1 XOR 0 = 1 
             1 XOR 1 = 0 
             0 XOR 0 = 0 
             0 XOR 1 = 1 
             举个例子 1101 AND 0011 = 0001 
             1101 OR 0011 = 1111 
             NOT 1101 = 0010 
             1101 XOR 0011 = 1110  
             
              
               
             
            --------------------------------------------------------------------------------
             
            30 回复:黑客吧原创教程 汇编语言基础  
             下面简单了解下8086寄存器  
             
              
             
             
            --------------------------------------------------------------------------------
             
            31 回复:黑客吧原创教程 汇编语言基础  
             1  
             
              
             
            --------------------------------------------------------------------------------
             8086寄存器组 
              在8086的EU和BIU两部分中包含有一些工作寄存器,这些寄存器用来存放计算过程中的各种信息,如操作数地址、操作数及运算的中间结果等。微处理器从寄存器中存取数据比从存储器中存取数据要快的多,因此,在计算过程中,合理利用寄存器保存操作数、中间结果或其它信息,能提高程序的运行效率。根据这些寄存器所起的作用,8086寄存器组可以分为通用寄存器、专用寄存器和段寄存器三类 
              1. 通用寄存器 
              通用寄存器包括了8个16位的寄存器:AX、BX、CX、DX、SP、BP、DI及SI。其中AX、BX、CX、DX在一般情况下作为通用的数据寄存器,用来暂时存放计算过程中所用到的操作数、结果或其他信息。它们还可分为两个独立的8位寄存器使用,命名为AL、AH、BL、BH、CL、CH、DL和DH。这4个通用数据寄存器除通用功能外,还有如下专门用途: 
              AX作为累加器用,所以它是算术运算的主要寄存器。在乘除指令中指定用来存放操作数。另外,所有的I/O指令都使用AX或AL与外部设备传送信息。 
              BX在计算存储器地址时,可作为基址寄存器使用。 
              CX常用来保存计数值,如在移位指令、循环指令和串处理指令中用作隐含的计数器。 
            DX在作双字长运算时,可把DX和AX组合在一起存放一个双字长数,DX用来存放高16位数据。此外,对某些I/O操作,DX可用来存放I/O的端口地址。 
            


            7楼2009-05-03 20:48
            回复


              10楼2010-03-24 13:23
              回复