最新《汇编语言》王爽(第二版)第16章-直接定址表教学讲义PPT.ppt

最新《汇编语言》王爽(第二版)第16章-直接定址表教学讲义PPT.ppt

ID:62261055

大小:431.50 KB

页数:106页

时间:2021-04-24

最新《汇编语言》王爽(第二版)第16章-直接定址表教学讲义PPT.ppt_第1页
最新《汇编语言》王爽(第二版)第16章-直接定址表教学讲义PPT.ppt_第2页
最新《汇编语言》王爽(第二版)第16章-直接定址表教学讲义PPT.ppt_第3页
最新《汇编语言》王爽(第二版)第16章-直接定址表教学讲义PPT.ppt_第4页
最新《汇编语言》王爽(第二版)第16章-直接定址表教学讲义PPT.ppt_第5页
资源描述:

《最新《汇编语言》王爽(第二版)第16章-直接定址表教学讲义PPT.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、《汇编语言》王爽(第二版)第16章-直接定址表第16章直接定址表16.1描述了单元长度的标号16.2在其他段中使用数据标号16.3直接定址表16.4程序入口地址的直接定址表引言这一章,我们讨论如何有效合理地组织数据,以及相关的编程技术。16.1描述了单元长度的标号程序中,code、a、b、start、s都是标号。这些标号仅仅表示了内存单元的地址。但是,我们还可以使用一种标号,这种标号不但表示内存单元的地址,还表示了内存单元的长度,即表示在此标号处的单元,是一个字节单元,还是字单元,还是双字单元。上面的程序我们还可以写成这样

2、:程序16.1描述了单元长度的标号assumecs:codecodesegmentadb1,2,3,4,5,6,7,8bdw0start:movsi,0movcx,8s:moval,a[si]movah,0addb,axincsiloopsmovax,4c00hint21hcodeendsendstart16.1描述了单元长度的标号我们在code段中使用的标号a、b后面没有“:”,它们是同时描述内存地址和单元长度的标号。标号a,描述了地址code:0,和从这个地址开始,以后的内存单元都是字节单元;而标号b描述了地址code

3、:8,和从这个地址开始,以后的内存单元都是字单元。16.1描述了单元长度的标号因为这种标号包含了对单元长度的描述,所以,在指令中,它可以代表一个段中的内存单元。比如,对于程序中的bdw0。指令:movax,b相当于:movax,cs:[8]指令:movb,2相当于:movwordptrcs:[8],2指令:incb相当于:incwordptrcs:[8]在这些指令中,标号b代表了一个内存单元,地址为code:8,长度为2字节。16.1描述了单元长度的标号下面的指令会引起编译错误:moval,b因为b代表的内存单元是字单元,

4、而al是8位寄存器。如果我们将程序中的指令:addb,ax,写为addb,al,将出现同样的编译错误。16.1描述了单元长度的标号对于程序中的adb1,2,3,4,5,6,7,8:指令:moval,a[si]相当于:moval,cs:0[si]指令:moval,a[3]相当于:moval,cs:0[3]指令:moval,a[bx+si+3]相当于:moval,cs:0[bx+si+3]16.1描述了单元长度的标号可见,使用这种包含单元长度的标号,可以使我们以简洁的形式访问内存中的数据。以后,我们将这种标号称为数据标号。它标

5、记了存储数据的单元的地址和长度。它不同于仅仅表示地址的地址标号。特别提示检测点16.1(page278)没有通过此检测点,请不要向下进行!16.2在其他段中使用数据标号一般来说,我们不在代码段中定义数据,而是将数据定义到其他段中。在其他段中,我们也可以使用数据标号来描述存储数据的单元的地址和长度。注意:在后面加有“:”的地址标号,只能在代码段中使用,不能在其他段中使用。16.2在其他段中使用数据标号右面的程序将data段中a标号处的8个数据累加,结果存储到b标号处的字中。assumecs:code,ds:datadatas

6、egmentadb1,2,3,4,5,6,7,8bdw0dataendscodesegmentstart:movax,datamovds,axmovsi,0movcx,8s:moval,a[si]movah,0addb,axincsiloopsmovax,4c00hint21hcodeendsendstart16.2在其他段中使用数据标号注意,如果想在代码段中,直接用数据标号访问数据,则需要用伪指令assume将标号所在的段和一个段寄存器联系起来。否则编译器在编译的时候,无法确定标号的段地址在哪一个寄存器中。16.2在其他

7、段中使用数据标号当然,这种联系是编译器需要的,但绝对不是说,我们因为编译器的工作需要,用assume指令将段寄存器和某个段相联系,段寄存器中就会真的存放该段的地址。我们在程序中还要使用指令对段寄存器进行设置。16.2在其他段中使用数据标号比如:在上面的程序中,我们要在代码段code中用data段中的数据标号a、b访问数据,则必须用assume将一个寄存器和data段相联。在程序中,我们用ds寄存器和data段相联,则编译器对相关指令的编译如下:指令:moval,a[si]编译为:moval,[si+0]指令:addb,ax

8、编译为:add[8],ax16.2在其他段中使用数据标号因为这些实际编译出的指令,都默认所访问单元的段地址在ds中,而实际要访问的段为data,所以,若要访问正确,在这些指令执行前,ds中必须为data段的段地址。则,我们在程序中使用指令:movax,data movds,ax设置ds指向data段。1

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。