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

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

2006-6-5 17:35
4448
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了

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

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