首页
社区
课程
招聘
dos汇编中我困惑了[求助]
发表于: 2006-6-5 17:35 4928

dos汇编中我困惑了[求助]

2006-6-5 17:35
4928
data    segment
var1    dw    5 dup(?)
var2    dw    20H,30H
data    ends
code    segment
        assume    cs:code,ds:data
start:  mov    ax,data
        mov    ds,ax
        mov    ax,[var2]
        mov    bx,var2
        mov    cx,[offset    var2]
        mov    dx,offset    var2   
        mov    si,0ah
        mov    di,[000ah]
        mov    ah,4ch
        int    21h
     
code    ends
        end    start
用codeview调试发现程序被翻译成这样了:

mov    si,0ah
mov    di,[000ah]
完全是两种不同的寻址方式,怎么最后di中也被初始化为000ah了

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
2
改成这样
mov di,[si]
2006-6-5 18:18
0
雪    币: 380
活跃值: (101)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
3
mov    di,[000ah]
不行吗,存储器直接寻址就是这种格式啊,
版主帮帮我~~~
2006-6-5 18:25
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
4
不行,如果一定要这样寻址,必须在前面加上段地址。如:
mov di,ds:[000ah]
2006-6-5 18:30
0
雪    币: 380
活跃值: (101)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
5
那我的mov    di,[000ah]算什么寻址了?
2006-6-5 18:32
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
6
你的是直接寻址,不过MASM不支持这种写法(其它的编译器不知支持不支持)。必须指明是那个段的地址才行。具体原因我也不太清楚。
2006-6-5 18:37
0
雪    币: 380
活跃值: (101)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
7
版主,再来关注一下,
我的mov di,[000ah]
在反汇编中都变成mov di,000ah了,好像是立即数寻址了呢,。。。。。
2006-6-5 21:27
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
呃是 Real Mode 定址方法不同的晷?
Real Mode 所能定址的大小是 1MB
而一?16bits的Register(例如 DI)
只能有 2^16 = 64K 的定址能力
所以,在Real Mode的定址,一定得配上一? segment register (CS, DS, ES, SS)
2006-6-5 22:11
0
雪    币: 380
活跃值: (101)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
9
不太清楚1M的寻址范围和我的mov di,[000ah]有什么联系,不是默认会在DS所指的段中取数据的吗
2006-6-5 22:53
0
游客
登录 | 注册 方可回帖
返回
//