汇编小笔记

1、运算类指令:

(1)加法指令:ADD

带进位加法指令:ADC,比加法指令多加CF

加1指令:INC

加法指令都影响状态标志位(除了inc指令)

操作数不能是段寄存器

(2)减法指令SUB DST,SRC

带借位减法  SBB DST,SRC

减1指令  DEC OPR

求补运算  NEG OPR  

比较指令   CMP OPR1,OPR2   不保存结果,只影响标志位

例子:X,Y,Z,W均是已经定义的双字数据,用指令数据实现W<----X+Y+24-Z

MOV AX,DATA

MOV  DS,AX

MOV AX,WORD PTR X

MOV DX,WORD PTR X+2

ADD AX,WORD PTR Y

ADC  DX,WORD PTR Y+2

ADD AX,24

ADC  DX,0(加上可能产生的进位)

SUB AX,WORD PTR Z

SBB  DX,WORD PTR Z+2

MOV  WORD PTR W,AX

MOV  WORD PTR W+2,DX

所以一般低字部分用一般的加减指令,高字部分用带进位的

乘法指令:

无符号:MUL SRC(SRC不能是立即数或段寄存器)

有符号:   IMUL  SRC

有无符号看操作数的规定。

影响标志位CF,OF,无符号反映的是高半部分是不是0,是0则两个标志都是0

        有符号的反映高半部分是不是低半部分符号的拓展,是的话则两个标志都是0

若SRC是字节类型,则(AL)*(SRC)----》AX

若SRC是字类型,则(AX)*(SRC)----》(DX).,(AX)

除法指令(与乘法对应)idiv  div

AX  低部分放商,高部分放余数

2、位运算指令

(1)逻辑非  NOT OPR    你影响标志位

(2)逻辑与   AND  DST   SRC   可以置0

(3)逻辑或  OR  DST   SRC     可以置1

(4)逻辑异或   XOR  DST   SRC    选择地对某些为制反,还可以对某些寄存器清零(XOR BH,BH)

(5)逻辑测试   TEST  DST   SRC 不改变目的操作数。进行与运算,测试位置1,其他的置0。

比如测试AL是不是偶数,最低位置1,其他0.

即TEST AL,1   ;若D0=0,则是偶数,ZF=1

  JZ EVEN

3、移位指令,跟计组的移位差不多

逻辑左移

逻辑右移

算数左移

算数右移

循环

CF,等于移出去的值

OF与移位的位数有关,移1位则置1,其他置0

移位指令实现AX<-----(AX)*10

SHL  AX,1

MOV BX,AX

SHL AX,1

SHL AX,1

ADD AX,BX

注意:SHL指令移位的位数,移多于1位的,要先放在CL。就像循环次数一定要放在CX一样

例子:把DX,AX中32位数值左移一位

SHL AX,1;这一步就把AX最高位移到了CF

RCL DX,1;带进位循环左移,刚好吧CF的值移到D0,其余的左移了一位

4、表达式计算

X、Y、Z、V、W都是16位有符号数,计算W<-----(V-(X*Y+Z-1234))/X

CWD是对AX扩展,放到DX,AX

指令寻址方式:确定下一条将要执行指令地址的方法(CS:IP)

1、直接寻址方式

目标地址相对于当前IP的位移量,转移到的目标地址就是当前IP加上位移量

2、间接寻址

先访问寄存器或存储器,得到的才是目标地址

段内转移:不用变CS。   64K范围  near ptr

                   短转移,偏移地址用一个字节表示的范围   short

段间转移:    1MB内  。要改CS和IP的值   far   ptr

无条件转移指令JMP

JMP OPR 无条件跳到OPR标号 的位置开始执行

段内:IP<---(IP)+偏移量

段间:JMP FAR PTR OPR

条件转移指令:jcc   label    范围:-127到128

JZ       OPR       ZF=1

JNZ    OPR        ZF=0

JS       OPR       SF=1

JNS     OPR        SF=0

JO        OPR         SF=1

JNO         OPR       SF=0

JP          OPR       PF =1

JNP      OPR         PF=0

JC        OPR      CF=1

JNC     OPR       CF=0

看标志开头字母

比较2个无符号数,根据结果转移

JA/JNBE OPR   大于转移

JAE/JNB   OPR    大于等于转移

JNAE/JB OPR        小于转移

JNA/JBE  OPR       小于等于转移

比较2个有符号数

JG/JNLE   OPR    >

JGE/JNL  OPR    >=

JNGE/JL  OPR     < 

JNG/JLE OPR    <=

循环指令:

先CX-1

再测试是否满足条件,满足转移,继续循环。

LOOP OPR    CX!=0继续循环

LOOPZ         ZF=1&&CX!=0 继续循环

LOOPNZ        ZF=0&&CX!=0 继续循环

重复次数等于CX的值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值