基本指令与简单程序设计

上传人:宝路 文档编号:47885393 上传时间:2018-07-05 格式:PPT 页数:93 大小:648.97KB
返回 下载 相关 举报
基本指令与简单程序设计_第1页
第1页 / 共93页
基本指令与简单程序设计_第2页
第2页 / 共93页
基本指令与简单程序设计_第3页
第3页 / 共93页
基本指令与简单程序设计_第4页
第4页 / 共93页
基本指令与简单程序设计_第5页
第5页 / 共93页
点击查看更多>>
资源描述

《基本指令与简单程序设计》由会员分享,可在线阅读,更多相关《基本指令与简单程序设计(93页珍藏版)》请在金锄头文库上搜索。

1、第3章 基本指令与简单程序设计 第3章 基本指令与简单程序设计 3.1 寻址方式 3.2 基本指令 3.3 单个字符的输入输出 3.4 源程序的基本格式 3.5 顺序程序设计 习题三 第3章 基本指令与简单程序设计 3.1 寻 址 方 式 3.1.1 立即数型寻址方式这种寻址方式又称为立即数或立即寻址,是直接把参与操作的数据写在指令中。用汇编语言书写时,操作数可以是各种数制下的数值,也可以是带单引号的字符。比如,下面的MOV指令中源操作数都是立即寻址的简单情况。汇编语言要求指令在一行写完,指令后面所带的分号表示该行的后续内容是注释。 第3章 基本指令与简单程序设计 MOV AL,30;源操作数

2、是十进制形式的立即数30MOV AX,3030H;源操作数是十六进制形式的立即数3030HMOV AL,11001101B;源操作数是二进制形式的立即数11001101BMOV AL,3 ;源操作数是字符形式的立即数3,即其ASCII值33H尽管MASM支持把立即数加上方括号的写法,比如上面的第一条指令也可以写成MOV AL,30但是,这会导致初学者概念上的混淆,建议读者不要使用这种 写法。 第3章 基本指令与简单程序设计 立即寻址还有一些比较复杂的情况。如果操作数是由数值和运算符构成的表达式,汇编程序在翻译时会计算出表达式的值,并把计算结果以立即数形式翻译到机器指令中。比如下面的指令中源操作

3、数就是这种情况:MOV AL,3-30H该指令中的源操作数是一个可直接计算的表达式。汇编程 序会计算出表达式的值是3,并以3作为立即寻址方式的源操作数。 第3章 基本指令与简单程序设计 3.1.2 寄存器型寻址方式这种寻址方式比较简单,就是在指令的操作数部分写寄存器的名称。可用的名称有:AH,AL,BH,BL,CH,CL,DH,DL 8位通用寄存器;AX,BX,CX,DX,SI,DI,BP,SP 16位通用寄存器;CS,DS,ES,SS 16位的段寄存器。第3章 基本指令与简单程序设计 下面的指令中所有操作数都是寄存器寻址方式。MOV AL,BLMOV AL,DHMOV BP,SPMOV AX

4、,SIMOV AX,CSMOV DS,DX 第3章 基本指令与简单程序设计 【注意】 指令指针IP、标志寄存器PSW以及所有标志位的代号CF、ZF、OF等都不能作为寄存器寻址方式的操作数,不允许出现在汇编语言的任何指令中。另外,8088汇编语言还规定,不允许用MOV等具有赋值功能的指令修改CS的值,也就是说,类似于“MOV CS,AX”试图对CS赋值的指令在8088汇编语言中是不允许的。 第3章 基本指令与简单程序设计 3.1.3 内存型寻址方式 内存型寻址方式是指参与操作的数据在内存中,因此必须指明操作数究竟在内存的什么地方,即指出内存的逻辑地址。 逻辑地址的段地址部分来自某个段寄存器。每一

5、个内存型操作 数都有一个不需要在指令中写出的缺省段寄存器与之对应,如 果就以这个缺省段寄存器的值作为段地址,则指令中只要确定 偏移地址即可。但是,有时指令中需要使用其它段寄存器而不 用缺省段寄存器作为段地址,这时就要先写出需要使用的段寄 存器的名字,后面加冒号“:”,再接偏移地址的各种写法。这种不用缺省段寄存器而明确写出段寄存器名称的方式称为“ 段跨越”。按照确定操作数偏移地址的不同方法,内存型寻址 又细分为5种具体情况,分别称为直接寻址、寄存器间接寻址 、寄存器相对寻址、基址变址和相对基址变址。 第3章 基本指令与简单程序设计 3.1.3.1 直接寻址这种寻址方式是在指令中直接写明操作数所在

6、的偏移地址。在汇编语言中,这个偏移地址通常以变量的形式出现,在指令中就是直接写变量的名字。变量名字与偏移地址之间存在固定的对应关系,在源程序中写变量的名字,汇编程序会把名字翻译成相应的偏移地址。确立这种对应关系的方法是定义变量 。定义变量的具体写法在第5章中加以说明,在此需要说明的是,定义变量时会说明它的类型(字节、字或者双字),定义后的变量就有了一个确定的偏移地址,程序中还会有伪指令说明变量对应的缺省段寄存器是哪一个。也就是说,每个已定义的变量都有缺省段寄存器与之对应,都有固定的偏移地址和类型 。 第3章 基本指令与简单程序设计 设buf是已经定义的字节型变量,指令“MOV AL,buf”中

7、源操作数寻址方式就是直接寻址。用方括号把变量名字括起来 是直接寻址的基本写法。上述指令中的“buf”表示以变量buf对应的偏移地址和缺省段寄存器中的值作为完整的逻辑地址,操作数在逻辑地址所确定的内存单元中。假定上述指令中变量buf的缺省段寄存器是DS,执行上述指令时DS的值是1234H,buf的偏移地址是0ABCDH,则物理地址的形成可用图3.1表示,图中数据均为十六进制。 第3章 基本指令与简单程序设计 图3.1 直接寻址方式下操作数的物理地址的形成 第3章 基本指令与简单程序设计 直接寻址方式可以使用段跨越。下面是两个使用段跨越的例子 :MOV AL,CS:bufMOV AL,ES:buf

8、使用段跨越时物理地址的形成方式,只要在图3.1中把段寄存器DS换成段跨越符号所指明的段寄存器即可。MASM V5.0还支持不写方括号的直接寻址方式,前面的3个例子可以写成如下形式:MOV AL,bufMOV AL,CS:bufMOV AL,ES:buf 第3章 基本指令与简单程序设计 变量占据内存空间的大小是以字节为单位的,一个变量 并不一定只占一个字节,2.3节就已说明了一个变量占多个字节时在内存中如何安排。汇编语言中还有类似高级语言的数 组变量的形式。假定变量buf是存放5个数据的数组,每个数据是字节型,所以共占5字节。现在需要取它的第3个数据送到寄存器AL中,又该怎么写呢?很简单,可以在

9、变量名的后面用加号连接一个数值的形式书写,比如:MOV AL,buf+2 第3章 基本指令与简单程序设计 对字节型数组变量buf,分别用buf、buf+1、buf+2、buf+3和buf+4依次对应它所占据的5个字节的偏移地址。汇编程序在翻译这种“变量数值”的写法时,先找出变量名所对应的偏移地址,再与另一个数值相加(如果是用减号连接则计算出两者的差),计算结果作为操作数的偏移地址,以直接寻址方式翻译到机器指令中。如果buf变量所占据的5个字节中依次存放的是1、2、3、4、5,上述指令取到AL中的数据会是3而不是2。尽管下面的写法与上述指令完全等同,但也不建议使用:MOV AL,buf2 第3章

10、 基本指令与简单程序设计 3.1.3.2 寄存器间接寻址这种寻址方式是把一个基地址寄存器或变址寄存器中的字型数据当作偏移地址,写法是以该寄存器的名字加上方括号。这表示寄存器的内容作为偏移地址,而不是参与操作的数据本身,操作数需要到内存中去找。注意与寄存器寻址相区分。下面的例子中源操作数都是寄存器间接寻址方式。MOV AL,BXMOV AL,SIMOV AL,BP 第3章 基本指令与简单程序设计 【注意】 并不是所有的通用寄存器都能加上方括号,按寄存器间接寻址方式到内存去寻找操作数。8088汇编语言规定,只有基址寄存器BX和BP,变址寄存器SI和DI共4个寄存器可以作为间接寻址方式使用的寄存器。

11、 第3章 基本指令与简单程序设计 如果需要,寄存器间接寻址方式也可以使用段跨越,比如:MOV AL,DS:BPMOV AL,ES:BXMOV AL,SS:DI直接寻址和寄存器间接寻址是汇编语言中内存型操作数最常用的两种寻址方式。如果与高级语言相比较,直接寻址相当于高级语言中的整数、字符等类型的简单变量,而寄存器间接寻址则相当于指向某种数据类型的指针变量。 第3章 基本指令与简单程序设计 3.1.3.3 寄存器相对寻址寄存器相对寻址又称作变址寻址,是以一个基址寄存器或变址寄存器中的值与一个字型数据相加,相加的结果作为偏移地址。相加的结果如果超过16位二进制,超出部分会被忽略。从书写形式上说,以下

12、几个例子中的源操作数都采用了正确形式的寄存器相对寻址方式,其中的标识符buf是已经定义的变量。但是,建议读者在编程时尽量使用第1、第3和第5个例子的写法,以清楚地表明偏移地址是两个数据相加而来。其中的方括号不能省略,方括号中不允许出现一个变量减一个寄存器的写法。 第3章 基本指令与简单程序设计 MOV AL,buf+SIMOV AL,bufDIMOV AL,buf+BPMOV AL,bufBXMOV AL,BX+15汇编语言中还支持更复杂的寄存器相对寻址写法,下面是几个这样的例子。MOV AL,buf+BX+3MOV AL,BX-30H 第3章 基本指令与简单程序设计 对于“buf+BX+3”

13、的写法,汇编程序会先把buf对应的偏移地址与数值3相加,得到的和与BX一起,以寄存器相对寻址的形式翻译到机器指令中;对于“BX-30H”,汇编程序会把-30H翻译成相应的补码形式,即0FFD0H,并把减法转变成加法。前面几个例子说明了寄存器相对寻址方式下偏移地址的处理方法,但段地址从何而来呢?这里当然也存在缺省段寄存器的问题。 第3章 基本指令与简单程序设计 寄存器相对寻址的缺省段寄存器按下列规则处理:(1) 如果是“变量+寄存器”的形式,以变量对应的缺省段寄存器为准。(2) 如果是“寄存器+数值”的形式,则以寄存器对应的缺省段寄存器为准。(3) 寻址方式中不允许同时出现两个或两个以上的变量相

14、加的情况,但可以出现两个变量相减。减法表示两个变量偏移 地址的差值,这个差值不再作为变量看待,而是当作数值,此 时缺省段寄存器按第(2)条处理。以指令“MOV AL,BX+15”为例,源操作数采用了寄存 器相对寻址,形成物理地址的方式如图3.2所示。 第3章 基本指令与简单程序设计 图3.2 寄存器间接寻址方式下物理地址的形成 第3章 基本指令与简单程序设计 【例3.1】 设变量buf1和buf2定义在同一个段中,偏移地址分别是102H和3ACH,两个变量对应的缺省段寄存器都是ES,寄存器BX和BP的值分别是2000H和3000H。试计算下列各指令中源操作数的偏移地址值,并判断缺省段寄存器是哪

15、一个。(1) MOV AL,buf1+BX(2) MOV AL,BX+13(3) MOV AL,BP+buf1-buf2(4) MOV AL,buf2+BP-4000H 第3章 基本指令与简单程序设计 【解】 (1) 偏移地址为 102H+2000H2102H 段寄存器为buf1对应的缺省段寄存器ES。 (2) 偏移地址为 2000H+13200DH 段寄存器为BX对应的缺省段寄存器DS。 (3) 偏移地址为 3000H+102H3ACH2D56H 段寄存器为BP对应的缺省段寄存器SS。 (4) 偏移地址为 3ACH+3000H4000H0F3ACH 段寄存器为buf2对应的缺省段寄存器ES。

16、 第3章 基本指令与简单程序设计 【例3.2】 设arr是一个整型数组变量,其中存放了10个字型带符号整数,用C语言写出相应的变量定义,编写程序段显示该数组中各元素的值;并说明如果使用汇编语言的寄存器相 对寻址方式arr+BX分别去取各元素,BX应如何变化。【解】 C语言的变量定义为int arr10;程序段写作:for(i=0;i10;i+)printf(“%dn”,arri); 第3章 基本指令与简单程序设计 在汇编语言中,如果要用arr+BX的形式分别访问各元素,则BX应分别取值为十进制的0、2、4、6、8、10、12、14、16、18,即每次加2,因为每个整数(字型带符号数)占2字节。在C语言中,下标变量i从0到9逐个递增,而

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号