基本汇编指令

1.标号:标号是由指令语句中所定义的标识符,它与助记符之间用冒号间隔,用于指示相应指令的地址

2.与高级语言一样,汇编语言中也可以使用变量。变量必须首先进行定义,然后才能使用。变量是由伪指令来定义的。

DB    定义字节变量,即8位(1字节)变量

DW   定义字变量,即16位(2字节)变量

DD    定义双字变量,即32位(4字节)变量

DQ    定义长字变量,即64位(8字节)变量

DT    定义一个10字节的变量

例如:

各个数据定义伪指令均可以连续定义变量。
示例如下:
DATAS SEGMENT            ;定义数据段
BUF0 DB 1                      ;定义一个字节型变量,名称是BUF0,初始值是01H
BUF1 DB "2"                   ;定义一个字符型变量,名称是BUF1,初始值是"2"
BUF2 DW 1                     ;定义一个字型变量,名称是BUF2,初始值是0001H
BUF3 DD 2                     ;定义一个双字型变量,名称是BUF3,初始值是00000002H
BUF4 DB 1 DUP(50)        ;定义连续50个字节型变量,名称是BUF4,初始值是01H
BUF5 DB "12345678"      ;定义一个字符型变量,名称是BUF5,初始值是"12345678"

DATAS ENDS                 ;数据段定义结束

微处理器主要包含两个独立的逻辑单元:执行单元EU(executeion unit)和总线接口单元BIU(bus interface unit)。ALU的数据总线(16位)。数据总线的位数就是计算机的位数。

8086CPU内部有14个16位的寄存器,按功能可以分为8个通用寄存器、4个段寄存器和2个控制寄存器。寄存器是汇编语言中指令可以使用的操作数,具有至关重要的地位,我们应该切实掌握。

  通用寄存器又称数据寄存器,既可作为16位数据寄存器使用,也可作为两个8位数据寄存器使用。当用作16位时,称为AX、BX、CX、DX。当用作8位时,AH、BH、CH、DH存放高字节,AL、BL、CL、DL存放低字节,并且可独立寻址。这样,4个16位寄存器就可当作8个8位寄存器来使用。

  指针和变址寄存器:
堆栈指针SP用以指出在堆栈段中当前栈顶的地址。入栈(PUSH)和出栈(POP)指令由SP给出栈顶的偏移地址。
基址指针BP指出要处理的数据在堆栈段中的基地址,故称为基址指针寄存器。
变址寄存器SI和DI用来存放当前数据段中某个单元的偏移量。

  段寄存器共有4个CS、DS、SS、ES。
代码段寄存器CS表示当前使用的指令代码可以从该段寄存器指定的存储器段中取得,相应的偏移值则由IP提供;
堆栈段寄存器SS指定当前堆栈的起始地址;
数据段寄存器DS指示当前程序使用的数据所存放段的起始地址;

附加段寄存器ES则指出当前程序使用附加段地址的起始位置,该段一般用来存放原始数据或运算结果。

  指令指针与标志寄存器:
指令指针IP的功能跟程序计数器PC的功能类似。正常运行时,IP中存放的是BIU要取的下一条指令的偏移地址。它具有自动加1功能,每当执行一次取指令操作时,它将自动加1,使它指向要取的下一内存单元,每取一个字节后IP内容加1,而取一个字后IP内容则加2。某些指令可使IP值改变,某些指令还可使IP值压入堆栈或从堆栈中弹出。
标志寄存器PSW是16位的寄存器,8086共使用了9个有效位,标志寄存器格式如图2.5所示。其中的6位是状态标志位,3位为控制标志位。状态标志位是当一些指令执行后,表征所产生数据的一些特征。而控制标志位则可以由程序写入,以达到控制处理机状态或程序执行方式的表征。 

/*******************************2018.04.24 23:04******************************/

汇编指令: mov、lea、push、pop、ret、call、jmp、jn。

mov为通用传送类指令。

lea指令:取地址操作。

eax、ebx、ecx、edx、eip、esp、edp。

ebp寄存器:控制栈帧,它指向栈帧的栈底。

esp寄存器:指向栈帧的顶端。

esi寄存器:地址寄存器(也叫程序计数器),esi中存即将执行的6条连续指令的地址。

参考书目《深入理解计算机系统》第五章。

《Linux内核设计原理》

格式:MOV DST,SRC  ;  // (DST)<===(SRC)将源操作数传送到目的操作数中。

说明:将SRC(源操作数)中的一个字节或一个字传送到DST(目标操作数)所指定的位置。MOV指令可以在立即数、存储单元、寄存器和段寄存器之间传送数据。

  push和pop为堆栈操作指令。

  (1)压入堆栈指令(PUSH)

格式:PUSH  SRC   ;将SRC压入堆栈,即(SP)《===(SP)_2,(SP)《===(SRC)

         PUSHF          ;将PSW压入堆栈,即(SP)《===(SP)_2,(SP)《===(PSW

说明:压入堆栈指令PUSH(push word onto stack)将先修正堆栈指针SP的内容,然后再将SRC或PSW的内容送入堆栈。SRC必须是字型。sp指针指向栈顶元素。

  (2)弹出堆栈指令(POP)。

格式:POP DST   ;从堆栈弹出DST,即(DST)《===(SP),(SP)《===(SP)+2

说明;弹出堆栈指令POP(pop word off stack)可以堆栈的内容送人DST所指定的寄存器、存储单元或PSW,然后修正SP的内容。

     jmp为无条件转移指令

格式:JMP  LABEL   ; 转移到标号LABEL处执行执行程序

          JMP  REG16   ;转移到由通用寄存器REG指定的位置执行程序

          JMP  MEM       ;转移到由存储单元MEM指定的位置执行程序

说明:在jmp label中,label为标号,当label与该转移指令位于同一个段内时,则为段内转移,转移目的地址(CS)不变,(IP)《===(IP)+DISP16.其中DISP16表示转移目标地址与JMP转移指令的16位偏移量。

  call子程序调用指令。

  ret为子程序返回指令。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值