. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  一段程序,关于EQU和$和assume  [待解决] 回复[ 2次 ]   点击[ 349次 ]  
xlmcktj
[帖 主]   [ 发表时间:2008-10-08 14:04 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-09-29 08:35
data segment
     d1 db 0
     da1 dw 12h,23h
     da2 db 11h,21h
     da3 equ 1234h
     da4 equ $-da2
     da5 db 31h,32h
data ends
code segment
assume cs:code,ds:data
     
     begin: mov ax,da4
     
     var dw 4321H
     mov ax,4c00h
     int 21
code ends
end begin
程序如上da3定义为1234,da4根据定义为2,可是在程序里(用debug调试)没有看到1234和2的数据在哪里
哪么这两个变存贮在哪里,为什么在内存中看不到。此其一
二、assume cs:code,ds:data
我在程序里不用此句用,mov ax,data
mov ds,ax
mov ax,code
mov cs,ax
调试程序也在数据段里存取数据,并没有找不到数据,按书上讲ASSUME是设定段寄存器和段的关系。也就是说用ASSUME设定完后,CPU就自动对应了CS:code,ds:data,而不用MOV传送地址,可是现在我们每段程序都得用MOV传送,哪么ASSUME又有什么用,不用它也可以。
mess
[第1楼]   [ 回复时间:2008-10-15 17:38 ]   [引用]   [回复]   [ top ] 
荣誉值:337
信誉值:0
注册日期:2008-01-01 17:48
楼主分析的不错,从实际结果来分析这个伪指令。直到退出assume没有,那去掉行不行?

肯定是不行,会报错,那就查查他的用法吧。

论坛中有ASSUME讨论的帖子,可以用论坛的搜索功能看看。
younggay
[第2楼]   [ 回复时间:2008-11-06 15:54 ]   [引用]   [回复]   [ top ] 
荣誉值:273
信誉值:0
注册日期:2008-01-23 20:23
assume伪指令的是将一个标号所在的段和一个寄存器联系起来,当用这个数据标号访问数据的时候,会直接关联到那个段寄存器,但是,寄存器的值还是要进行显示赋值的。这个在16章的“直接定制表”的第2节有详细说明。
举个例子吧:我们将碗和饭相关联,碗就是段寄存器,饭就是数据,我们饿了就去碗里取饭,这个规则有了,但是,碗里的饭是怎么来的呢?这就需要先往碗里放饭,这样我们取饭的时候才能取到。
所以说,关联确定的了一个默认的联系,而为了达到正确的结果,我们还得给联系的一放正确的资源才可以。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved