汇编语言指令基础版(笔记)

学习文章来源于汇编指令入门级整理-CSDN博客

汇编指令是机器指令的注记符,与机器指令是一一对应的

1.数据传送指令

  • MOV  传送指令  MOV dest,src  将数据src移动到dest

//mov时注意数据大小,一个AX寄存器只能存4个16进制数超过4个的部分不会存在AX中add同理

  • PUSH  进栈指令  PUSH src  把源操作数sec压入堆栈
  • POP  出栈指令  POP desc  从栈顶弹出字数据到dest

//PUSH和POP在c语言中函数调用原理中有涉及

2.算数运算指令

  • ADD  加法指令  ADD dest,src  在dest基础上加src并将该值存入dest中
  • SUB  减法指令  SUB dest,src  在dest基础上减src并将该值存入dest中
  • INC  加1指令  INC dest  在dest基础上加1……
  • DEC  减1指令  DEC  dest  在dest基础上减1……

汇编指令

控制CPU完成的操作

用高级语言的语法描述

mov  ax,18

将18送入寄存器AX

AX=18

mov  ah,78

将78送入寄存器AH

AH=78

add ax,8

将寄存器AX中的数值加上8

AX=AX+8

mov ax,bx

将寄存器BX中的数据送入寄存器AX

AX=BX

add ax,bx

将AX和BX中的数值相加,结果存在AX中

AX=AX+BX

//注:若ax,bx中的数据均为8226H执行 add ax,bx后的值不为1044CH因为ax是16位寄存器,只能存放4位十六进制的数据,所以最高位的1不能在ax中保存,所以ax中的数据为:044CH。

一开始al中的数据为C5H,相加后所得的值为158H但是al为8位寄存器,所以最高位1丢失,ax中的数据为0058H。(此处与上一处的丢失只是不能在8(16)位寄存器中保存,但是CPU并不会真的丢弃这个进制值)

在进行数据传送或运算时,要注意指令的两个操作对象的位数应当是一致的。

3.逻辑运算指令

  • NOT  取反运算指令  NOT dest  把操作数dest按位取反

//假设寄存器 AL 的值为 0x5A(二进制表示为 01011010),执行以下指令:

NOT AL

执行后,AL 的值将变为 0xA5(二进制表示为 10100101)。

  • AND  与运算指令  AND dest,sec  把dest和src进行运算后送回dest

//按位与(AND)运算的规则是:两个二进制数的对应位进行比较,如果两个对应位都为 1,则结果的该位为 1;否则为 0。

  • OR  或运算指令  OR dest,src  把dest和src进行运算后送回dest

//位或(OR)运算的规则是:两个二进制数的对应位进行比较,如果两个对应位中至少有一个为 1,则结果的该位为 1;否则为 0。

  • XOR  异或运算  XOR dest,src  把dest和src进行异或运算之后送回dest

//按位异或(XOR)运算的规则是:两个二进制数的对应位进行比较,如果两个对应位的值不同,则结果的该位为 1;如果相同,则为 0。

4.循环控制指令

  • LOOP  计算循环指令  LOOP label  使ECX的值减1,当ECX的值不为0的时候跳转至label,否则执行LOOP之后的语句

//ecx是 x86 架构中的一个通用寄存器

5.转移指令

  • JMP  无条件转移指令  JMP lable  无条件地转移到标号为label的位置
  • CALL 过程调用指令  CALL labal  直接调用label
  • JE  条件转移指令  JE lable  zf=1时跳转到标号为label的位置
  • JNE  条件转移指令  JNE lable  zf=0时跳转到标号为label的位置

//zf 是零标志(Zero Flag)的缩写,它是 CPU 状态寄存器中的一个位。当执行比较或算术运算时,如果结果为零,则 zf 被设置为1;否则,zf 被清除为0。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值