汇编笔记1

发现汇编非常重要….在学校没有在家接触电脑的时候多….赶快把汇编视频看一遍吧..挺有用的…毕竟是接触到了计算机底层的东西了….做点笔记..写下来..也算是一种收获吧!

指令系统.

通用数据传送指令

传送指令:mov DST,SRC

几点注意:1.DST不能为CS

                2.DST,SRC不能同时为段寄存器

               3.DST,SRC不有同时为存储器寻址

               4.DST不能为立即数

                5.立即数不能送段寄存器.

进栈指令:push SRC

出栈指令:POP DST

堆栈:”先进后出”的存储区,存在于堆栈段,SP在任何时候都指tmk sgt sdm .

几点注意:1.堆栈操作必须以字为单位

                2.不能影响标志位

                3.不能用立即寻址方式    push 1234H (错误)

               4.DST不能是CS             pop CS (错误)

交换指令:xchg opr1,opr2

几点注意:1.不能影响标志位

         2.不允许使用段寄存器

例:xchg BX,[BP+SI]

    xchg AL,BH

累加器专用传送指令(只限使用AX或AL)

输入指令(I/O→CPU)

长格式:IN AL,PORT (字节)

    IN AX,PORT (字)

执行操作:(AL)←(PORT)   (字节)

                (AX)←(PORT+1,PORT)   (字)

短格式:IN AL,DX (字节)

                IN AX,DX (字)

执行操作:(AL)←((DX))   (字节)

                (AX)←((DX)+1,(DX))   (字)

输出指令(CPU→I/O)

与IN指令相反

几点注意:1.不影响标志位.

     2.前256个端口号00H~FFH可直接在指令中指定(长格式)

     3.如果端口号>=256,端口号→DX(短格式)

例:  IN AX,28H                  ;MOV DX,28H

                                             ;IN    AX,DX

             MOV DATA_WORD,AX

例:  Mov DX,3FCH

             IN AX,DX

例:       OUT 5,AL

换码指令:XLAT或 XLAT OPR

执行操作:(AL)←((Bx)+(AL))

注意:1.不影响标志位

   2.字节表格(长度不超过256)  首地址→(BX)

   3.需转换代码→(AL)

地址传送指令

有效地址送寄存器指令: LEA REG,SRC

执行操作:       (REG)←SRC

指针送寄存器和DS指令:LDS REG,SRC

执行操作:                       (REG)←(SRC)

                                         (DS)←(SRC+2)

4个相继字节→寄存器(通常是SI),DS

指针送寄存器和ES指令:LES REG,SRC

执行操作:                       (REG)←(SRC)

                                         (ES)←(SRC+2)

4个相继字节→寄存器(通常是DI),ES

例:TABLE   (DS):1000H由低到高依次是 40H,00H,00H,30H

MOV BX,TABLE                 BX=0040H

MOV BX,OFFSET TABLE BX=1000H

LEA BX,TABLE                 BX=1000H

LDS BX,TABLE                 BX=0040H

                                          DS=3000H

LES BX,TABLE                 BX=0040H

                                           ES=3000H

几点注意:1.不影响标志位

                  2.REG不能是段寄存器

                  3.SRC必须为存储器寻址方式

类型转换指令

CBW           AL→AX

执行操作:若(AL)的最高有效位为0,则(AH)=00H

               若(AL)的最高有效位为1,则(AH)=0FFH

CWD          AX→(DX,AX)

执行操作:若(AX)的最高有效位为0,则(DX)=0000H

               若(AX)的最高有效位为1,则(DX)=0FFFFH

例:(AX)=0BA45H

   CBW        ;(AX)=0045H

   CWD        ;(DX)=0FFFFH (AX)=0BA45H

几点注意:1.无操作数指令

                2.隐含对AL或对AX进行符号扩展

               3.不影响条件标志位

算术指令

加法指令: ADD DST,SRC

执行操作:(DST)←(SRC)+(DST)

带进位加法指令:ADC DST,SRC

执行操作: (DST)←(SRC)+(DST)+CF

加1指令:   INC OPR

执行操作: (OPR)←(OPR)+1

几点注意:除INC指令不影响CF标志位外,均对条件标志位有影响。

加法指令对条件标志位(CF/OF/ZF/SF)的影响

SF=1结果为负   ZF=1结果为0

CF=1和的最高有效位有向高位的进位

OF=1两个操作数符号相同,而结果符号与之相反以

CF位表示无符号数相加的溢出

OF位表示带符号数相加的溢出

例:双精度数的加法

(DX)=0002H     (AX)=0F365H

(BX)=0005H      (CX)=0E024H

指令序列:(1)ADD AX,CX

                   ( 2 ) ADC DX,BX

(1)执行后 (AX)=0D389H          CF=1    OF=0     SF=1   ZF=0

(2 )执行后 (DX)=0D389H          CF=0    OF=0     SF=0   ZF=0

减法指令

减法指令: SUB DST,SRC

执行操作:(DST)←(DST)-(SRC)

带借位减法指令:SUB DST,SRC

执行操作: (DST)←(SRC)-(DST)-CF

减1指令:DEC OPR

执行操作:(OPR)←(OPR)-1

求补指令:NEG OPR

执行操作:(OPR)←-(OPR)

比较指令:CMP OPR1,OPR2

执行操作:(OPR1)-(OPR2)

注意:除DEC指令不影响CF标志位外,均对条件标志位有影响。

NEG指令对CF/OF的影响:

CF=0 操作数为0   否则CF=1

OF=1 操作数为-128 (字节运算)或操作数为-32768(字运算) 否则为0