. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  [idata]不给出段地址的时候不是默认为段地址是ds吗?  [待解决] 回复[ 2次 ]   点击[ 398次 ]  
release_lag
[帖 主]   [ 发表时间:2009-12-10 15:30 ]   [引用]   [回复]   [ top ] 
荣誉值:3
信誉值:0
注册日期:2009-10-27 16:12
实验九中,我用到[idata] 没有指定段地址,结果出错
assume cs:code
data segment
    db 'welcome to masm!'
    db 02h,24h,71h
data ends

code segment
start: mov ax,data
       mov ds,ax
       mov ax,0b878h
       mov es,ax
       mov bx,0
       mov si,0
       mov cx,16

     s:mov al,[bx]
       mov ah,[16]           ;改为ds:[16]才能显示正确
       mov es:[si],ax
       
    
       mov ah,[17]           ;改为ds:[17]才能显示正确
       mov es:[si+00a0h],ax
       
     
       mov ah,[18]           ;改为ds:[18]才能显示正确
       mov es:[si+0140h],ax
       inc bx
       add si,2
       loop s

       mov ax,4c00h
       int 21h

code ends
end start

+++++++++++
[idata]不给出段地址的时候不是默认为段地址是ds吗?
那结果为什么出错
yezuopou
[第1楼]   [ 回复时间:2009-12-11 19:41 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-12-06 23:23
同问!!
我的在debug中调试也有这个问题,它会将mov ah,[16]这样的汇编成mov ah,10,也就是直接给ah赋值16了。好似跟机器还有系统有关。
我用了一个emu8086模拟软件,当不指定ds,直接给出[idata]时是可以的。
release_lag
[第2楼]   [ 回复时间:2009-12-12 13:45 ]   [引用]   [回复]   [ top ] 
荣誉值:3
信誉值:0
注册日期:2009-10-27 16:12
听楼上这么一说,我还明白了,第二版P110 5.4 节中讲了debug 和汇编编译器masm对指令的不同处理
在汇编源程序中mov ax,[0] 意思是把ds:[0]处的数据送入ax
但汇编编译器却把mov ax,[0]当成指令mov ax,0来处理
再次看了这段,就明白了,为什么我那样写会出错了
嘿嘿,解决了!!
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved