|
EXP1:(普通标号的使用)assume cs:code code segment
a:db 1,2,3,4,5,6,7,8 ;注意有 :号
b:dw 0
start:
mov si,offset a ;取得 a 的便宜地址(0000),所以 si 为 0000
mov al,cs:[si] ;取得 a 标号起的第一个值,即此时 al = 1
mov al,[si] ;省略 "cs:",则默认在 "ds:"里寻址
mov ax,b ;直接标号送给 ax 也可以,此时值为 0008
mov ax, ;"[..]" 这里对b无用,ax 的值仍然为 0008
mov ax,4c00h
int 21h
EXP2:(使用另一种标号)
使用没有 " :" 的标号,这种标号不但表示内存单元的地址,还表示了内存单元的长度。
assume cs:code
code segment
a db 1,2,3,4,5,6,7,8
b dw 0,2,4,,6,8
start:
mov al,a ;假设 DS=0700,0700:0000 处的值为 CDh ;则此时al中的为 cdh
inc a
mov al,a ; al = ceh
;因为 a 表示的是内存单元的地址,a 的值为 0000 ,完整的地址为 ds:0000;
;inc a 使 ds:0000 中的内容加 1 ,所以就会出现上面的结果
mov si,0
mov al,a[si] ;al = 1 注意:masm编译的结果会使al=1;EMU8086的情况不同,仍然
;会到ds:0000处取值
mov bx,b[si]
inc si
mov al,a[si] ;al = 2
mov bx,b[si] |
|