注册 登录
编程论坛 汇编论坛

[求助]低级问题,请指点!

tl0760 发布于 2007-01-07 15:34, 1056 次点击

以前学了点汇编的皮毛,现在要用到它。可自己调一个简单的程序都实现不了。特来请教!

下面的程序是在数据段中给a赋值0。在代码段中将a的偏移地址放入ax中,段地址放入bx中。
可是在TD中查找到其存放地址,发现那个地址上的内容并不是a的值0。

data1 segment
a dw 0
data1 ends
code1 segment
assume cs:code1,ds:data1
start:
mov ax,data1
mov ds,ax

mov ax,offset a
mov bx,seg a
code1 ends
end start

16 回复
#2
曾小2007-01-07 20:20
-d 0b4f :0000 得到的是 0 啊!
你没搞错吧>???????



[此贴子已经被作者于2007-1-7 20:22:54编辑过]

#3
曾小2007-01-07 20:23
以下是引用曾小在2007-1-7 20:20:27的发言:
-d 0b4f :0000 得到的是 0 啊!
你没搞错吧>???????




#4
tl07602007-01-08 22:00

谢谢楼上的同志!

我是真的搞不懂了,我可能连怎么查看内存内容都忘记了。

请给我说一下怎么查看!

#5
菜鸟上路2007-01-08 22:12

用基址寄存器或变址寄存器试下吧

[此贴子已经被作者于2007-1-9 13:04:50编辑过]

#6
tl07602007-01-09 12:10
能不能说明白点呢?

我也去网上查查吧。
#7
菜鸟上路2007-01-09 13:04
以下是引用tl0760在2007-1-7 15:34:04的发言:

下面的程序是在数据段中给a赋值0。在代码段中将a的偏移地址放入ax中,段地址放入bx中。
可是在TD中查找到其存放地址,发现那个地址上的内容并不是a的值0。



不知道这句是什么意思。那个地址是哪个地址?
基址寄存器就是BX,BP,变址寄存器就是SI,DI,SP

#8
tl07602007-01-10 12:35

我认为段地址(16位)左移4位(20位)+偏移地址(16位)就是其物理地址,
所以通过 mov bx,seg a 将段地址存入bx通用寄存器,
通过 mov ax,offset a 将偏移地址存入ax通用寄存器。
然后,查看数据段中a存放位置的值。

我就是这样搞的。

#9
菜鸟上路2007-01-10 12:52
都没看过mov ax,offset a这种写法,不如用mov di,offset a试试
#10
tl07602007-01-10 20:48

好象还是不行,可能我哪里弄错了。。。

算了,找其他方法解决吧。

谢谢楼上的同志了!

#11
lefttime2007-01-10 21:07

一个值而已,搞得那么多支节
楼主就是想得到a的物理地址吧,再从物理地址查看a的值吧;
先把你的程序写好,你漏了程序结束,这样编译能通过,但是执行可就会出错
......
mov bx,seg a
mov ah,4ch
int 21h

code1 ends
end start
行啦,生成可执行程序后,让我们跟踪下
在命令提示符下用DEBUG调试看看(假设生成文件为test.exe)
debug test.exe
-t
.... ;这是显示跟踪单步后出的数据
-t
.... ;同上
-t
....
-t
.... ;照你的程序跟踪执行4步已经能得看到ax,bx中的值,也就是你想得到的段基址和偏移地址啦
-d XXXX:XXXX ;红色部分改成bx中的值,后面改为ax中的值,这样你就能看到啦


#12
tl07602007-01-12 16:15
以下是引用lefttime在2007-1-10 21:07:27的发言:
debug test.exe
-t
.... ;这是显示跟踪单步后出的数据
-t
.... ;同上
-t
....
-t
.... ;照你的程序跟踪执行4步已经能得看到ax,bx中的值,也就是你想得到的段基址和偏移地址啦
-d XXXX:XXXX ;红色部分改成bx中的值,后面改为ax中的值,这样你就能看到啦

楼上的同学比起我来真是太厉害了。。。
十分感谢你的帮忙!

随便问一下上面我引用部分的命令原来我都不知道也(不知道是我们学校什么都不教,还是我什么都不爱学。。),如果要学习的话应该学习什么好呢?

#13
YYFYQZY2007-05-09 22:24
我也想知道
#14
爱以走远2007-05-09 22:33
你最后加mov ah,4ch
int 21h
#15
爱以走远2007-05-09 22:35
以下是引用菜鸟上路在2007-1-10 12:52:58的发言:
都没看过mov ax,offset a这种写法,不如用mov di,offset a试试

可以哈 不过我个人认为还是用lea ax,a 这样用不着加什么 呵呵
不好意思 我没看问题已经解决拉 多留拉一哈

#16
chaogang2007-05-10 00:12
以下是引用爱以走远在2007-5-9 22:35:42的发言:

可以哈 不过我个人认为还是用lea ax,a 这样用不着加什么 呵呵
不好意思 我没看问题已经解决拉 多留拉一哈

好象问题的本质是 ax不能直接拿来存偏移地址

#17
爱以走远2007-05-10 15:08
以下是引用chaogang在2007-5-10 0:12:11的发言:

好象问题的本质是 ax不能直接拿来存偏移地址

不错哈 呵呵 做偏移地址的只有bx sp si di bp ip

1