. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->汇编语言学习交流区
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  请教assume的作用。  [已解决] 回复[ 5次 ]   点击[ 605次 ]  
wang_ss
[帖 主]   [ 发表时间:2011-09-23 14:06 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2010-12-13 12:23
assume   最典型的用法:是指明变量与段寄存器的联系,比如   assume     ds:data,它是告诉编译器以后所有在data段中定义的变量寻址时,使用ds作为段地址,但是它不对程序作任何事,比如你必须自己对ds赋值。

现在有如下程序
assume ds:data1

data1 segment
  mov ax,[bx]
data1 ends

data2 segment
  mov ax,[bx]
data2 ends

根据最上面那段话是否可以这样理解:
data1中mov ax,[bx]等于mov ax,ds:[bx]
而data2中的mov ax,[bx]是不一定等于mov ax,ds:[bx].
sunm
[第1楼]   [ 回复时间:2011-09-23 14:16 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-09-19 08:05
首先 你的mov ax,【bx】 全部会翻译成机器码,当成数据来处理,因为程序执行的指令永远根据CS iP指向的内容来执行的,你那个语句如果想执行,就要将cs的值等于ds了!不然计算机知识把它当成值!我也刚学汇编几天,不是很了解!但你所表达的意思肯定和计算机不一样!
wang_ss
[第2楼]   [ 回复时间:2011-09-23 15:25 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2010-12-13 12:23
首先 你的mov ax,【bx】 全部会翻译成机器码,当成数据来处理,因为程序执行的指令永远根据CS iP指向的内容来执行的,你那个语句如果想执行,就要将cs的值等于ds了!不然计算机知识把它当成值!我也刚学汇编几天,不是很了解!但你所表达的意思肯定和计算机不一样!
------------------
回复:这里跟CS没有关系,

重点: assume     ds:data,它是告诉编译器以后所有在data段中定义的变量寻址时,使用ds作为段地址,
chinatree
[第3楼]   [ 回复时间:2011-09-24 01:44 ]   [引用]   [回复]   [ top ] 
荣誉值:118
信誉值:0
注册日期:2011-07-07 22:59
data1中mov ax,[bx]等于mov ax,ds:[bx]
而data2中的mov ax,[bx]是不一定等于mov ax,ds:[bx].
不是的,首先,你如果想让cpu把data1中的内容当成指令,就要使cs=ds,不然段1中的只有数据,不是指令,就不存在寻址了。虽然指令也是数据,但是当cs:ip指向它时才算指令。如果cs=data1那第一个就是ds:[bx],如果cs=data2那第二个也是ds:[bx]
这是因为Bx默认的段寄存器是ds,而是指令还是数据是Cs:ip说了算。
书上说在内存中指令与数据是怎么存储的这句话还没有理解透。
wang_ss
[第4楼]   [ 回复时间:2011-09-25 11:09 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2010-12-13 12:23
根据实际实验来看,assume好像没什么作用,其后内容去掉了用r查看ds等也没有变化
wang_ss
[第5楼]   [ 回复时间:2011-09-27 16:07 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2010-12-13 12:23
此贴由 贴主 于 [ 2011-09-27 16:07 ] 结贴。 结贴原因:问题已解决
得分情况:
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved