汇编第三天

标志寄存器

add 带进位加法指令

sbb 带借位减法指令。利用了CF位上的记录的借位值。->sub

  如sbb ax bx; (ax)=(ax)-(bx)-CF

  作用:对任意大的数进行减法运算。

cmp 功能和sub类似,只是不保存结果,但对标志寄存器进行设置。

    结果执行后,ZF=1(表示结果是?0),PF=1(结果的二进制中1 ?偶数个),SF=0(?有符号标志 ),CF=0(?产生借位),OF=0。(?是否产生溢出)

          是为1 ;否为0;

   cmp进行无符号比较时,相关指令:je 等于则转移 ZF=1。   // j = jump; ne=not equal

        jne 不等于则转移 ZF=0  

        jb  低于则转移 CF=1     // below

        jnb  不低于则转移 CF=0

        ja  高于则转移 CF=0,ZF=0  // above

        jna  不高于则转移 CF=1,ZF=1

rep movsb 循环实现cx个字符的传送

//rep的作用是根据CX的值,重复执行后面的串传送指令。

// movsb和movsw进行的是串传送操作的一个步骤。

  movsb(以字节位单位传送):将ds:si指向的内存单元中的字节送入es:di中。根据标志寄存器DF位的值,将si,di递增或递减。

  movsw(以字为单位传送):将ds:si指向的内存单元中的字 送入es:di中。根据标志寄存器DF位的值,将si,di递增2或递减2。

  DF=0,si=si+1 ;di=di+1  //cld: 将标志寄存器的CF位 置0 clear

  DF=1,si=si-1;di=di-1  // std: 将标志寄存器的DF位 置1   set  

// 由于每执行一次movsb指令 si和di都会递增或递减 指向后一个单元或前一个单元。

// rep movsb可以循环实现(CX)个字符的传送。

使用串传送指令进行数据传输时,需要提供一些必要的信息。他们是:

1: 传送的原始位置 ds si

2: 传送的目的位置 es di

3: 传送的长度:CX

4: 传送的方向:DF

pushf : 将标志寄存器的值压栈

popf :从栈中弹出数据,送入标志寄存器中。

猜你喜欢

转载自www.cnblogs.com/30ends/p/9134854.html