| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1461 人关注过本帖
标题:有关“mov ax,bx”的一些疑问!
只看楼主 加入收藏
sxzjw
Rank: 2
等 级:论坛游民
帖 子:32
专家分:21
注 册:2010-5-23
结帖率:57.14%
收藏
已结贴  问题点数:20 回复次数:9 
有关“mov ax,bx”的一些疑问!
在一次编程中,写了一条“mov ax,es”,masm不给通过。老师一看,说寄存器之间不能直接传值。
这个问题就让我很郁闷。

大家知道,cpu寄存器是内存中最快的了,可是显然如果寄存器之间不能传值,那么很多数据传递非要经过主存,速度不还是被降低了?

我的问题有两个:
1。不能出现“mov ax,es”,是masm5.0编译时候的一种不允许语句?还是对于cpu来说,就不存在直接传递两个寄存器值的硬件电路?

2。如果是cpu的问题,这样设计是问什么?
  如果是masm不允许,那这样又是为什么?

期待各位解答!
搜索更多相关主题的帖子: mov ax,bx 疑问 
2010-06-01 13:29
ONEPROBLEM
Rank: 6Rank: 6
来 自:广西 南宁
等 级:贵宾
威 望:21
帖 子:1569
专家分:349
注 册:2008-7-11
收藏
得分:0 
LZ,你的问题太深奥了
应该可以通过啊.
我用DEBUG验证了,可以吧.但也有特殊情况的.
2010-06-01 14:58
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
没有5.0 不知道~
2010-06-01 17:25
sxzjw
Rank: 2
等 级:论坛游民
帖 子:32
专家分:21
注 册:2010-5-23
收藏
得分:0 
回复 2楼 ONEPROBLEM
版主 是怎么通过的?
能给个版主 使用的原指令吗?我也验证下~
2010-06-01 23:51
sxzjw
Rank: 2
等 级:论坛游民
帖 子:32
专家分:21
注 册:2010-5-23
收藏
得分:0 
回复 3楼 zklhp
好像 不能出现mov ax,es;现在一直很郁闷?那版主用哪个版本能通过?
2010-06-01 23:53
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:5 
段寄存器好象是不能直接传递给数据寄存器的。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2010-06-02 07:30
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:5 
;#Mode=DOS
;MASMPlus 单文件代码模板 - 纯 DOS 程序
;--------------------------------------------------------------------
;单个文件需要指定编译模式,否则默认是EXE方式,在系统设置中可以设置默认是DOS还是Windows.
;编译模式自带了DOS/COM/CON/EXE/DLL/LIB这几种,如果有必要,可以更改ide.ini添加新的编译模式
;当然,更好的是创建为一个工程.更方便及易于管理,使用方法:按Ctrl多选->创建工程.必须有多个文件

.model small
.stack 200h
.data
    szMsg db 'Hello World!',13,10,'$'
   
.CODE
START:
    mov ax,@data
    mov ds,ax
    mov ax,es
    lea dx,szMsg
    mov ah,9
    int 21h
   
    ;暂停,任意键关闭
    mov ah,1
    int 21h
    mov ah,4ch     ;结束,可以修改al设置返回码
    int 21h
END START

ml.exe /Zm /c /nologo /Fo"es.obj" "E:\MASMPlus\Project\es.asm"
link5.exe /nologo "es.obj";

准备就绪:E:\MASMPlus\Project\es.exe
2010-06-02 09:02
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:5 
E:\MASMPlus\Bin>ml
Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997.  All rights reserved.

usage: ML [ options ] filelist [ /link linkoptions]
Run "ML /help" or "ML /?" for more info

E:\MASMPlus\Bin>
2010-06-02 09:04
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:5 
cs 不能赋值 其他的应该是可以的~
2010-06-02 09:04
sxzjw
Rank: 2
等 级:论坛游民
帖 子:32
专家分:21
注 册:2010-5-23
收藏
得分:0 
感谢各位的帮助~不过经过我认真的回想和分析,有些想法:
cpu个寄存器之间的值是可以传递的,用这个代码验证,masm是给通过的:
assume cs:code
code segment
 start: mov ax,100
    mov cx,200

    nop
    nop
   
    mov bx,ax
    mov dx,cx
    mov ds,ax
    mov es,cx
        mov bx,cs
        mov es,[bx]


    mov ax,4c00h
    int 21

code ends
end start


但是,不能出现这样的语句:mov es,b800h,也就是说不能直接给段寄存器附数值。这个肯定有错。
解决办法就是先吧值给了ax,再给了b800h。

但有人说  “从基本的cpu工作原理来看,cpu执行“MOV R1,R0”指令,cpu首先要完成的操作是(M->DR(M是主存储器))”。可是masm给通过寄存器之间的传值指令啊?

这是个什么问题?
2010-06-02 12:37
快速回复:有关“mov ax,bx”的一些疑问!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.035884 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved