在LST清单中,汇编程序在这样的二进制指令后记以R。在例10.3的LST清单中,由于 .data是段地址,这是汇编程序不能确定的,因而指令
mov ax,
@data
的机器语言值不定,后面记以符号R。而
mov cx, count
指令的机器语言虽然已有了一个值,但因count是浮动地址,因而在机器指令后仍记以符号R,以表示这一指令中的地址是浮动地址。
同学们也许会问,既然偏移地址是相对于段地址而言的相对地址,那么重新分配段地址值对偏移地址本身会有什么影响呢?
确实,就一个程序模块本身来说,它确实没有什么影响。但是,在下一节里我们将介绍多个程序模块相连接的情况。在某些情况下,当连接程序把几个模块中的某些段连接在一起形成一个段时,地址的浮动就会直接影响机器指令代码。在这种情况下,连接程序将会修改汇编程序标以R的地址值以得到正确的机器指令。
例10.3
.model small
;********************************
0000 .data
000A org 10
000A E3 num db -29
000B 0064[ array db 100 dup(?)
??
]
006F 0005 count dw 5
0071 82 04 2A masks db 82h,04h,2ah
;********************************
0000 .code
0000 main proc far
0000 start:
0000 B8 ---- R mov ax,@data
0003 8E D8 mov ds,ax
;
0005 8B 0E 006F R mov cx,count
0009 repeat:
0009 49 dec cx
; .
; .
; .
000A B8 4C00 mov ax,4c00h
000D CD 21 int 21h
000F main endp
;********************************
000F end start