- 0
- 0
- 约8.48千字
- 约 65页
- 2019-11-06 发布于广东
- 举报
8.9 dup dup是一个十分有用的操作符 比如我们要定义一个容量为 200 个字节的栈段,如果不用dup,则必须用这样的格式: stack segment dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 stack ends 8.9 dup 当然,读者可以用dd,使程序变得简短一些,但是如果要求定义一个容量为1000字节或10000字节的呢? 如果没有dup,定义部分的程序就变得太长了; 有了dup就可以轻松解决。如下: stack segment db 200 dup (0) stack ends 小结 * 8.5 指令要处理的数据有多长? 有些指令默认了访问的是字单元还是字节单元, 比如:push [1000H]就不用指明访问的是字单元还是字节单元, 因为push指令只进行字操作。 8.6 寻址方式的综合应用 下面我们通 过一个问题来进一步讨论各种寻址方式的作用。 实际应用 8.6 寻址方式的综合应用 关于DEC公司的一条记录(1982年): 公司名称:DEC 总裁姓名:Ken Olsen 排 名:137 收 入:40 著名产品:PDP 1988年DEC公司的信息有了变化: 1、Ken Olsen 在富翁榜上的排名已升至38位; 2、DEC的收入增加了70亿美元; 3、该公司的著名产品已变为VAX系列计算机。 任务:编程修改内存中的过时数据。 8.6 寻址方式的综合应用 首先,我们应该分析一下要修改的数据: (1)(DEC公司记录)的(排名字段) (2)(DEC公司记录)的(收入字段) (3)(DEC公司记录)的(产品字段)的(第一个字符)、(第二个字符)、(第三个字符) 8.6 寻址方式的综合应用 从要修改的内容,我们就可以逐步地确定修改的方法: (1)我们要访问的数据是DEC公司的记录,所以,首先要确定DEC公司记录的位置:R=seg:60 确定了公司记录的位置后,我们下面就进一步确定要访问的内容在记录中的位置。 (2)确定排名字段在记录中的位置:0CH。 (3)修改R+0CH处的数据。 (4)确定收入字段在记录中的位置:0EH。 (5)修改R+0EH处的数据。 8.6 寻址方式的综合应用 从要修改的内容,我们就可以逐步地确定修改的方法: (续) (6)确定产品字段在记录中的位置:10H。要修改的产品字段是一个字符串(或一个数组),需要访问字符串中的每一个字符。所以我们要进一步确定每一个字符在字符串中的位置。 (7)确定第一个字符在产品字段中的位置:P=0。 (8)修改R+10H+P处的数:P=P+1。 (9)修改R+10H+P处的数据: P=P+1。 (10)修改R+10H+P处的数据。 8.6 寻址方式的综合应用 根据上面的分析,程序如下: mov ax,seg mov ds,ax mov bx,60h mov word ptr [bx+0ch],38 add word ptr [bx+0eh],70 mov si,0 mov byte ptr [bx+10h+si],’V’ inc si mov byte ptr [bx+10h+si],’A’ inc si mov byte ptr [bx+10h+si],’X’ ;确定记录地址:ds:bx ;排名字段改为38 ;收入字段增加70 ;用si来定位产品字符串中的字符 8.6 寻址方式的综合应用 8.6 寻址方式的综合应用 8.6 寻址方式的综合应用 我们可以看到,8086CPU提供的如[bx+si+idata]的寻址方式为结构化数据的处理提供了方便。 使得我们可以在编程的时候,从结构化的角度去看待所要处理的数据。 从上面我们可以看到,一个结构化的数据包含了多个数据项,而数据项的类型又不相同,有的是字型数据,有的是字节型数据,有的是数组(字符串)。 8.6 寻址方式的综合应用 一般来说,我们可以用[bx+idata+si]的方式来访问结构体中的数据。 用bx定位整个结构体,用idata定位结构体中的某一个数据项,用 s
原创力文档

文档评论(0)