浅析汇编语言中寻址方式的区别
浅析汇编语言中寻址方式的区别
王传俊
【摘要】寻址方式是汇编语言中的一个重要内容,是学习编程的基础,同时也是该门课程的一个学习难点。本文通过以Inte18086CPU为例,使用分析比较的方法阐述了各寻址方式间的区别。
【关键词】汇编语言 寻址方式 有效地址 物理地址
在计算机应用技术的发展过程中,汇编语言是一座连接软件和硬件的桥梁,也是计算机能够提供给用户最快而又最有效的语言。
汇编语言不同于用O,1数字表示的机器语言,它是用人们熟悉的英文缩写字符表示相应的操作码,用符号或数值表示地址和操作数。因此,汇编语言为程序的编写、阅读和修改提供了方便。但由于汇编语言仍是一种面向机器的语言,所以在进行程序设计时必须考虑到机器的指令系统、寻址方式及存储设备的设置和功能,而熟悉并灵活地应用机器所采用的各种寻址方式,是运用汇编语言进行程序设计的根本。而一个指令系统具有哪几种寻址方式,是否为编写程序提供方便,是指令系统设计的关键,同时也是初学者学习汇编语言的难点。
在教学过程中,通常选用Inte18086CPU的PC机为基础机型来组织教学。Inte18086提供了九类寻址方式,它们分别是立即寻址、寄存器寻址、寄存器间接寻址、直接寻址、变址寻址、基址变址寻址、串寻址、端口寻址和隐含寻址。
由于Inte18086中的寻址方式有相似之处,极易混淆。在教学过程中,应使学生抓住各种寻址方式的特点,找出它们之间的区别和联系,从而形成正确的概念。
什么是寻址方式呢?这是首先要明确的概念。一个指令是由操作码和操作数两部分组成的。操作数在存储器中存放的位置,称为操作数地址。获得操作数地址的方式,就称为操作数地址的寻址方式,简称寻址方式。
在寻址过程中,操作数的存放位置决定着寻址的方式。在汇编语言的学习过程中,区分“存放位置”是理解寻址方式的前提。因此,在学习之前应使学生理解寄存器和存储器的不同。
寄存器位于CPU内部,它的存取速度比存储器要快得多。在计算机的运算过程中寄存器主要用来存放运算过程中的各种信息,包括操作数地址,操作数和运算的中间结果。
存储器是由许多存储单元组成的,每个单元有唯一确定的地址。它是计算机的记忆场所,能把计算和处理的数据及程序存入计算机,使计算机自主工作,免受其它因素的干扰。
在指令中,辨别操作数是存放在寄存器还是存储器中最简单的方法就是看这个操作数的书写有无[]。如果有[],则操作数一定是存储器操作数,即操作数存放在存储器中,而存储器操作数所在的存储器地址就是该操作数的物理地址。若无[],则操作数的存放分两种情况:一是在指令中操作数以立即数的形式给出,如3500H,则该操作数的寻址方式为立即寻址方式;二是操作数以通用寄存器形式给出,如AX,则该操作数的寻址方式为寄存器寻址方式。
立即寻址和寄存器寻址的相同之处在于都不需要访问内存,工作效率高。但立即寻址方式主要用来为存储单元或寄存器赋初值,如:MOVAX,2043H这条指令中的源操作数2043H以立即数形式给出,与操作码一起放在代码段区域中。而寄存器寻址方式的操作数放在一个通用寄存器中,即AX、BX、cx、DX、BP、sP、SI、DI中的任意一个。如:MAXAX,cx这条指令中的源操作数存放在cx中。
直接寻址方式和前两种寻址方式的区别是:操作数存放在存储器中,16位有效地址直接包含在指令中。它的物理地址是由指令中直接给出的16位有效地址与数据段寄存器DS向高位移动4位后相加得到的。如:MOVAX,[2000H]中源操作数的16位有效地址2000H直接出现在指令中,它的物理地址=DS*10H+2000H。
寄存器间接寻址、变址寻址、基址变址寻址这三种寻址方式的操作数都存放在内存储器中,而要访问内存中存放操作数的存储单元,就需要知道存储单元在内存储器中的有效地址。在Inte18086中,用来存放有效地址的寄存器只有四个,分别是DI、SI、BP和BX,即在指令中只有这四个寄存器可以放在[]中,作为寻址寄存器。四种寻址方式的有效地址就是通过这四个寄存器以不同寻址方式而得到的。
寄存器间接寻址方式的操作数的有效地址只能由四个寄存器中的一个存放。以DI、SI或BX间接寻址时,操作数隐含在存储器的数据段区域中,操作数的地址用数据段寄存器DS内容左移4位加上DI、SI或BX中的16位有效地址获得。如:MOVAX,[BX]中源操作数的有效地址为BX内容,它的物理地址=DS*10H+(BX)。以BP间接寻址时操作数隐含在存储器的对栈段区域中,操作数的地址用堆栈段寄存器ss内容左移4位加上BP中的16位有效地址获得。若指令中标明是段超越的,则操作数的地址用段前缀寄存器内容左移4位加上BP中的16位有效地址获得。
变址寻址方式的操作数有效地址由变址寄存器(DI、SI、BP、BX)内容和指令中给定的8位或16位位移量组成。与寄存器间接寻址方式相比多了位移量。如:MOVAX,disp[DI]中有效地址为disp+(DI),物理地址=DS*lOH+disp+(DI)。在基址变址寻址方式中,将SI或DI称为变址寄存器,将BP或BX称为基址寄存器,在使用时只能同时使用一个变址寄存器和一个基址寄存器。该寻址方式中的操作数有效地址=(SI)+(BX)。如:MOVAX,[SI][BX],物理地址=DS*10H+(SI)+(BX)。
在以上六种寻址方式中,物理地址只与存放在内存储器中的操作数有关,而这种操作数在指令格式中最大的特点就是带有[],而其它操作数的存取都与内存无关,因而也就不涉及物理地址。
串寻址方式用于字符串的操作,使用隐含的变址寄存器SI和DI寻址。源串操作数用SI寻址,目的串操作数用DI寻址,在指令执行过程中根据标志寄存器的DF标志位,自动修改SI和DI内容,以给定指向下一个操作数的地址,完成各种对字符串的操作。串寻址方式的特征主要表现在操作码上,通常串寻址方式的操作码是一般操作码后加S(string字符串的缩写),以区别与其它寻址方式的不同。如:MOV实现传送指令,MOVSB则实现字符串的字节传送。
端口寻址方式用于CPU寻址外设端口。并由8位或16位(存放在寄存器DX中)立即数构成端口地址。该寻址方式只有两 《浅析汇编语言中寻址方式的区别》
本文链接地址:http://www.oyaya.net/fanwen/view/177615.html
王传俊
【摘要】寻址方式是汇编语言中的一个重要内容,是学习编程的基础,同时也是该门课程的一个学习难点。本文通过以Inte18086CPU为例,使用分析比较的方法阐述了各寻址方式间的区别。
【关键词】汇编语言 寻址方式 有效地址 物理地址
在计算机应用技术的发展过程中,汇编语言是一座连接软件和硬件的桥梁,也是计算机能够提供给用户最快而又最有效的语言。
汇编语言不同于用O,1数字表示的机器语言,它是用人们熟悉的英文缩写字符表示相应的操作码,用符号或数值表示地址和操作数。因此,汇编语言为程序的编写、阅读和修改提供了方便。但由于汇编语言仍是一种面向机器的语言,所以在进行程序设计时必须考虑到机器的指令系统、寻址方式及存储设备的设置和功能,而熟悉并灵活地应用机器所采用的各种寻址方式,是运用汇编语言进行程序设计的根本。而一个指令系统具有哪几种寻址方式,是否为编写程序提供方便,是指令系统设计的关键,同时也是初学者学习汇编语言的难点。
在教学过程中,通常选用Inte18086CPU的PC机为基础机型来组织教学。Inte18086提供了九类寻址方式,它们分别是立即寻址、寄存器寻址、寄存器间接寻址、直接寻址、变址寻址、基址变址寻址、串寻址、端口寻址和隐含寻址。
由于Inte18086中的寻址方式有相似之处,极易混淆。在教学过程中,应使学生抓住各种寻址方式的特点,找出它们之间的区别和联系,从而形成正确的概念。
什么是寻址方式呢?这是首先要明确的概念。一个指令是由操作码和操作数两部分组成的。操作数在存储器中存放的位置,称为操作数地址。获得操作数地址的方式,就称为操作数地址的寻址方式,简称寻址方式。
在寻址过程中,操作数的存放位置决定着寻址的方式。在汇编语言的学习过程中,区分“存放位置”是理解寻址方式的前提。因此,在学习之前应使学生理解寄存器和存储器的不同。
寄存器位于CPU内部,它的存取速度比存储器要快得多。在计算机的运算过程中寄存器主要用来存放运算过程中的各种信息,包括操作数地址,操作数和运算的中间结果。
存储器是由许多存储单元组成的,每个单元有唯一确定的地址。它是计算机的记忆场所,能把计算和处理的数据及程序存入计算机,使计算机自主工作,免受其它因素的干扰。
在指令中,辨别操作数是存放在寄存器还是存储器中最简单的方法就是看这个操作数的书写有无[]。如果有[],则操作数一定是存储器操作数,即操作数存放在存储器中,而存储器操作数所在的存储器地址就是该操作数的物理地址。若无[],则操作数的存放分两种情况:一是在指令中操作数以立即数的形式给出,如3500H,则该操作数的寻址方式为立即寻址方式;二是操作数以通用寄存器形式给出,如AX,则该操作数的寻址方式为寄存器寻址方式。
立即寻址和寄存器寻址的相同之处在于都不需要访问内存,工作效率高。但立即寻址方式主要用来为存储单元或寄存器赋初值,如:MOVAX,2043H这条指令中的源操作数2043H以立即数形式给出,与操作码一起放在代码段区域中。而寄存器寻址方式的操作数放在一个通用寄存器中,即AX、BX、cx、DX、BP、sP、SI、DI中的任意一个。如:MAXAX,cx这条指令中的源操作数存放在cx中。
直接寻址方式和前两种寻址方式的区别是:操作数存放在存储器中,16位有效地址直接包含在指令中。它的物理地址是由指令中直接给出的16位有效地址与数据段寄存器DS向高位移动4位后相加得到的。如:MOVAX,[2000H]中源操作数的16位有效地址2000H直接出现在指令中,它的物理地址=DS*10H+2000H。
寄存器间接寻址、变址寻址、基址变址寻址这三种寻址方式的操作数都存放在内存储器中,而要访问内存中存放操作数的存储单元,就需要知道存储单元在内存储器中的有效地址。在Inte18086中,用来存放有效地址的寄存器只有四个,分别是DI、SI、BP和BX,即在指令中只有这四个寄存器可以放在[]中,作为寻址寄存器。四种寻址方式的有效地址就是通过这四个寄存器以不同寻址方式而得到的。
寄存器间接寻址方式的操作数的有效地址只能由四个寄存器中的一个存放。以DI、SI或BX间接寻址时,操作数隐含在存储器的数据段区域中,操作数的地址用数据段寄存器DS内容左移4位加上DI、SI或BX中的16位有效地址获得。如:MOVAX,[BX]中源操作数的有效地址为BX内容,它的物理地址=DS*10H+(BX)。以BP间接寻址时操作数隐含在存储器的对栈段区域中,操作数的地址用堆栈段寄存器ss内容左移4位加上BP中的16位有效地址获得。若指令中标明是段超越的,则操作数的地址用段前缀寄存器内容左移4位加上BP中的16位有效地址获得。
变址寻址方式的操作数有效地址由变址寄存器(DI、SI、BP、BX)内容和指令中给定的8位或16位位移量组成。与寄存器间接寻址方式相比多了位移量。如:MOVAX,disp[DI]中有效地址为disp+(DI),物理地址=DS*lOH+disp+(DI)。在基址变址寻址方式中,将SI或DI称为变址寄存器,将BP或BX称为基址寄存器,在使用时只能同时使用一个变址寄存器和一个基址寄存器。该寻址方式中的操作数有效地址=(SI)+(BX)。如:MOVAX,[SI][BX],物理地址=DS*10H+(SI)+(BX)。
在以上六种寻址方式中,物理地址只与存放在内存储器中的操作数有关,而这种操作数在指令格式中最大的特点就是带有[],而其它操作数的存取都与内存无关,因而也就不涉及物理地址。
串寻址方式用于字符串的操作,使用隐含的变址寄存器SI和DI寻址。源串操作数用SI寻址,目的串操作数用DI寻址,在指令执行过程中根据标志寄存器的DF标志位,自动修改SI和DI内容,以给定指向下一个操作数的地址,完成各种对字符串的操作。串寻址方式的特征主要表现在操作码上,通常串寻址方式的操作码是一般操作码后加S(string字符串的缩写),以区别与其它寻址方式的不同。如:MOV实现传送指令,MOVSB则实现字符串的字节传送。
端口寻址方式用于CPU寻址外设端口。并由8位或16位(存放在寄存器DX中)立即数构成端口地址。该寻址方式只有两 《浅析汇编语言中寻址方式的区别》