cadl吧 关注:4贴子:44
  • 12回复贴,共1

王爽-汇编语言2笔记

只看楼主收藏回复

讲的8086汇编,到现在看了一半,感觉挺有收获的,其他地方有些不懂的也感觉了解了一点。
嗯, 汇编真的应该每个人都学一下赶脚
记着点笔记省着忘,记性不好T_T。
偶是大彩笔,可能会有很多错误(挥泪


IP属地:北京1楼2013-02-21 23:48回复
    时间顺序,看到哪记到哪


    IP属地:北京2楼2013-02-21 23:48
    回复

      段寄存器:
      CS 代码段寄存器
      DS 数据段寄存器 8086CPU不支持将数据直接送入段寄存器(可先放入其他普通寄存器如BX,再mov DS, BX),mov传送内从中数据时,[]中为段内偏移量,以DS中的值作段地址
      SS 堆栈段寄存器
      ESIP: 指令指针寄存器SP: 堆栈指针寄存器
      8086机中,任意时刻,CPU将CS:IP指向的内容当作指令执行在8086加电启动或复位后,CS和IP分别被设置为FFFFH,0000H。FFFF0H单元中的指令是8086pc机开机后执行的第一条指令。
      SS:SP指向栈顶元素


      IP属地:北京3楼2013-02-21 23:49
      回复
        CPU中,用16位寄存器来存储一个字。高8位存放高位字节,低8位存放低位字节。在内存中存储时,这个字的低位字节存放在低地址单元中,高位字节放在高地址单元中。
        例: 0、1两个内存单元存放数据20000(4E20H),内存中0为低地址单元,1为高地址单元
        ---------------
        0 | 20H |
        ---------------
        1 | 4EH |
        ---------------
        2 | 12H |
        ---------------
        3 | 00H |
        ---------------
        **大端小端什么的,总整混了** =,=


        IP属地:北京4楼2013-02-21 23:52
        回复
          8086中PUSH和POP都是以字为单位
          loop指令中cx寄存器存储循环次数,每运行一次loop,(cx)-1
          在汇编程序中,数据不能以字母开头
          在汇编源程序中:
          如果[]中用一个常量idata直接给出内存单元的偏移地址,就要在[]前显示地给出段地址所在的段寄存器如:mov al, ds:[0]
          如果[]中里用寄存器,比如bx,就不同前面显示添加段寄存器了,当然,段地址默认为ds中的值指令dw的含义是定义字型数据,即 define word。数据大小为2字节


          IP属地:北京5楼2013-02-21 23:55
          回复
            伪指令end除了通知编译器程序结束外,还可以通知编译器程序的入口在什么地方。 如: end start
            程序框架:
            assume cs: code
            code segment
            :
            :
            数据
            :
            :
            start:
            :
            代码
            :
            code ends
            end start


            IP属地:北京6楼2013-02-21 23:56
            回复
              si:源变址寄存器 di:目地变址寄存器也可以像一样表示一个内存单元
              在8086CPU中,只有bx,si,di,bp这四个寄存器能在[...]中进行内存单元的寻址只要在[...]中使用寄存器bp,而指令中没有现实地给出段地址,段地址默认在ss中。
              寻址方式: 原书164(179)
              直接寻址
              寄存器间接寻址
              寄存器相对寻址
              基址变址寻址
              相对基址变址寻址


              IP属地:北京7楼2013-02-21 23:58
              回复

                指令进行的是字操作还是字节操作:
                1) 通过寄存器名指定要操作的数据的尺寸
                字操作:
                mov ax, 1
                mov bx, ds:[0]
                mov ds, ax
                mov ds:[0], ax
                inc ax
                add ax, 1000
                字节操作:
                mov al, 1
                mov al, bl
                mov al, ds:[0]
                mov ds:[0], al
                inc al
                add al, 100
                2) 在没有寄存器名存在的情况下,用操作符X ptr指明内存单元的长度, X可以为word或byte
                例:
                mov word ptr ds:[0], 1
                mov byte ptr ds:[0], 1
                3) 其他方法
                有些指令默认了访问的是字单元还是字节单元,如push[1000H]就不用指明是字单元还是字节单元,因为push指令之进行字操作


                IP属地:北京8楼2013-02-21 23:58
                回复
                  div指令
                  除数:8位或者16位,在寄存器或内存中
                  被除数:默认放在ax 或 dx和ax中。如果除数为8位,被除数为16位,被除数放在ax中;如果除数为16位,被除数则为32位,被除数在dx和ax中存放,dx存放高16位,ax存放低16位。
                  结果:如果除数为8位,al存储除法操作的商,ah存储除法操作的余数;如过除数为16位,则ax存储除法操作的商,dx存储除法操作的余数。
                  格式:div reg 或 div 内存单元


                  IP属地:北京9楼2013-02-22 23:15
                  回复

                    db(define byte)定义字节型数据,dw(define word)定义字型数据,dd(define double word)定义双字形(dword)数据 他们都是伪指令
                    dup指令,和dd,dw,dd等数据定义的为指令配合使用,用来进行数据的重复定义。
                    如: db 3 dup (0) 相当于 db 0,0,0
                    db 3 dup (0,1,2) 相当于 db 0,1,2,0,1,2,0,1,2
                    db 3 dup ('abc', 'ABC') 相当于 db 'abcABCabcABCabcABC'


                    IP属地:北京10楼2013-02-22 23:16
                    回复

                      操作符offset,功能是取得标号的偏移地址
                      如: start: mov ax, offset start
                      jmp是无条件转移指令,可以只修改ip,也可以同时修改cs和ip
                      jmp short 标号 段内短转移,对ip的修改范围为-128~127


                      IP属地:北京11楼2013-02-22 23:16
                      回复

                        jmp near 16位
                        jmp far 段间
                        jmp word ptr 内存单元地址(段内转移)
                        jmp dword ptr 内存单元地址(段间转移 高地址字为段地址,低地址字为偏移量)
                        jcxz 有条件转移指令,所有的有条件转移指令都是短转移
                        jcxz 标号(如果(cx)=0,转移到标号处执行)
                        ret 指令用栈中的数据修改ip的内容实现近转移
                        retf 指令用战中的数据修改cs,ip的内容实现远转移


                        IP属地:北京12楼2013-03-01 00:09
                        回复
                          额 看完了 后面也懒得记了。。。 没说的还有保护模式 32/64位什么的 不过这书感觉蛮赞的


                          IP属地:北京13楼2013-03-14 20:55
                          回复