首页 > 编程语言 > 详细

汇编学习(三)——汇编语言程序入门

时间:2015-11-20 10:23:19      阅读:168      评论:0      收藏:0      [点我收藏+]

一、寻址方式

1、概念:

    一条指令由操作码和操作数构成,操作码是系统定义好的符号,执行指定的操作,操作数即是指令的对象,而寻址方式就是操作数的指定方式

操作码   目的操作数,源操作数

 

2、寻址方式的三种情况:

(1)CPU中(2)储存器(3)I/O中

 

3、寻址方式分类

(1)隐含寻址:

    指令中只有操作码没有指定的操作数,但是根据操作码就可确定相应的操作数

MUL BL;
 
DIV BL;

(2)立即寻址:

    指令中直接给出要操作的数

ADD AL,50

    立即寻址只能用在源操作数上

(3)寄存器寻址:

A、指令中给出寄存器的名字,寄存器中的内容是要操作的数,这种方式称为寄存器寻址。

B、可以使用寄存器:8个通用16位寄存器(AX,BX,CX,DX,SI,DI,BP,SP),以及8个8位寄存器(AH,AL,BH,BL,CH,CL,DH,DL)

ADD AL,BL

(4)段寄存器寻址:

A、指令中给出段寄存器的名字,段寄存器中的内容是要操作的数,这种方式称为段寄存器寻址。

B、可以使用段寄存器:4个段寄存器(CS,DS,ES,SS)

C、8086中只有数据传输指令MOV,堆栈操作指令PUSH和POP可以使用段寄存器寻址方式

(5)I/0口寻址

A、操作数在I/O接口中,这种寻址方式为I/O寻址

B、只用使用IN/OUT操作。

C、直接IO寻址:使用一个8位无符号数指定端口号

    间接IO寻址:使用一个16位寄存器DX来指定端口号

(6)转移地址的寻址:

    指令指针IP会一直指向下一条要执行的命令,所以使用指令转移IP内容,成为转移地址的寻址

(7)储存器操作数的寻址

①概念:

   8086CPU有20根地址线,所以储存器每个单元的地址是20位(2进制),称为物理地址,而CPU内部的寄存器都是16位,只用一个寄存器不能完整表示储存器地址,所以拆成2个分量:段地址(CS,DS,ES,SS),偏移地址(BX,BP,SI,DI)

物理地址 = 段地址*10H + 偏移地址

 

②直接寻址

ADD AL,[Xvar]

将Xvar地址中的内容与AL相加,并储存在AL中;其中Xvar是在数据段中定义的一个变量名

A、直接寻址:要用变量名指定地址

     立即寻址:常数作为源操作数

ADD AL,[20H]

认为是立即寻址

 

③寄存器间接寻址

A、将储存器的偏移地址存在一个16位寄存器中,然后用方括号中的16位寄存器指定此偏移地址,成为寄存器间接寻址

B、BX,SI,DI搭配DS(数据段)

    BP搭配SS(堆栈段)

ADD AL,[BX];       从数据段的此地址取数据
ADD AL,[BP];       从堆栈段的此地址取数据

 

④寄存器相对寻址

A、就是在寄存器间接寻址的基础上,使用BX+D(8位或者16位的常数偏移量)作为地址

ADD AL [SI+5];    
ADD AL [BP-5];

 

⑤基址变址寻址

A、将一个基址寄存器(BX,BP)与一个变址寄存器(SI,DI)的内容相加作为偏移地址,段寄存器搭配由基址寄存器决定:BX搭配DS,BP搭配SS

B、计算公式:

物理地址=DS*10H+BX/DP+SI/DI

C、指令

ADD AL,[BX+SI];     只能相加
ADD AL,[BP-DI];     不能相减
ADD AL [BX+BP];     也不能是两个基址寄存器
ADD AL,[SI+DI];     或者是两个变址寻址器

 

⑥相对基址变址寻址

A、就是在寄存器基址变址寻址的基础上,使用BX+SI+D(8位或者16位的常数偏移量)作为地址

ADD AL,[BP+BI+5]
ADD AL,[BP+BI-5];   同样的,不能有减法

 

二、数据传送指令

汇编学习(三)——汇编语言程序入门

原文:http://www.cnblogs.com/BlueMountain-HaggenDazs/p/4979813.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!