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

offset + offset的问题

神vLinux飘飘 发布于 2006-04-05 22:49, 1375 次点击

data segment
d1 db 2d
d2 db 2d
data ends

code segment
assume cs:code,ds:data
_main:
mov ax,offset d2 + offset d2
mov ah,4ch
int 21h
code ends
end _main

想不明白,这样一个好好的程序怎么就通不过编译呢

6 回复
#2
johnsonyang2006-04-07 12:49
运算符问题
#3
lj_8606032006-04-17 19:05
两个地址相加后的值再赋给AX?这样好象不行的,这样相加后的地址的值应该是未定义的,另外,这段代码好象什么也没有干.(个人看法)
#4
p1s2006-04-17 19:09
mov ax,offset d2 + offset d2
该作mov ax,d1+d2是将两个的地址相加,然后到那个地址里面去找数据,放入ax
如果楼主想把(d1)+(d2)->ax,那么
mov ax,d1
add ax,d2
就可以了
#5
fengyqf2006-05-02 14:34
offset 相加?你的目的是什么呢,问一句,这样是什么意思?
#6
公子吕2006-05-06 18:02
你的程序有很明显的错误
ASSUME CS:CODE,DS:DATA ;这个后面要有红色的代码.
MOV AX,DATA ;DATA是数据段起始地址
MOV DS,AX ;数据段地址通过AX送到数据段寄存器DS中.

这个给段地址赋值的操作一定要有的.

有人问:
ASSUME CS:CODE,DS:DATA的作用不是把DATA的段地址赋给DS吗?
为什么这里还要再赋一次呢?

答案是这样的:

ASSUME只是告诉汇编程序建立段与段寄存器之间的联系,规定对某个段寻址时用哪个段寄存器提供段地址
但是并不设置段寄存器的初值. 假如你这样:
ASSUME DS:CODE,CS:DATA
那么程序访问DATA里的数据,它就会用CS寻址,而不是DS了.

而且我也觉得你的mov ax,offset d2 + offset d2 操作是无意义的.

#7
神vLinux飘飘2006-05-21 20:11
恩,我也认为是没有意义,就好像C语言的指针一样
1