曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 5258|回复: 0
打印 上一主题 下一主题

[8086] 标号

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
跳转到指定楼层
楼主
发表于 2009-4-1 01:52:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-20 14:17 , Processed in 0.073533 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表