| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 658 人关注过本帖
标题:汇编问题
只看楼主 加入收藏
powlin1991
Rank: 2
等 级:论坛游民
帖 子:51
专家分:22
注 册:2012-2-22
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:9 
汇编问题
请问下,汇编里面的代码是不能这样写的么:
mov es:[15 - bx],dl(上面都已经定义了,就这里是报错的)
如果能这样写,那正确的格式是什么?
如果不能这样写,那么如何逆序的拷贝一个内存到另一个内存的?
谢谢了。
搜索更多相关主题的帖子: 内存 如何 
2012-03-14 15:27
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:1 
如果不能这样写,那么如何逆序的拷贝一个内存到另一个内存的?

看movs系列指令 跟方向位有关

mov es:[15 - bx],dl

貌似不能这样写

建议认真看书学习一下。。。
2012-03-14 21:10
zaixuexi
Rank: 12Rank: 12Rank: 12
来 自:上海
等 级:火箭侠
威 望:8
帖 子:858
专家分:3233
注 册:2010-12-1
收藏
得分:1 
我算是看出来了,委屈楼主来学习汇编了

技术问题,请不要以短消息方式提问
2012-03-15 23:30
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:1 
以下是引用zaixuexi在2012-3-15 23:30:38的发言:

我算是看出来了,委屈楼主来学习汇编了
   
2012-03-16 14:25
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
.

梅尚程荀
马谭杨奚







                                                       
2012-03-16 21:36
powlin1991
Rank: 2
等 级:论坛游民
帖 子:51
专家分:22
注 册:2012-2-22
收藏
得分:0 
回复 3楼 zaixuexi
呵呵,已经想出来了。因为刚开始学习汇编,然后高级语言中数组都是这么写的,所以试了一下这个,结果不行。
2012-03-18 19:30
zaixuexi
Rank: 12Rank: 12Rank: 12
来 自:上海
等 级:火箭侠
威 望:8
帖 子:858
专家分:3233
注 册:2010-12-1
收藏
得分:2 
想出来了,是不是这样的?
mov ax, data
mov ds, ax
mov es, ax
mov si, offset src+len
mov di, offset dst
std
mov cx, 0ah
rep movsb

技术问题,请不要以短消息方式提问
2012-03-18 20:00
powlin1991
Rank: 2
等 级:论坛游民
帖 子:51
专家分:22
注 册:2012-2-22
收藏
得分:0 
回复 6楼 powlin1991
呵呵,我还真是个初学的,很多关键字没看到,只能写出这么个玩意。
题目是将ffff:0 - ffff:f单元中的8个字拷贝到0:200 - 0:20f单元中,我的代码如下:
assume cs:code
code segment
    mov ax,0ffffh
    mov ds,ax

    mov ax,0020h
    mov es,ax

    mov bx,0
    mov bp,14

    mov cx,8
s1:
    mov al,[bx]
    mov es:[bp],al
    add bx,2
    sub bp,2
    loop s1

    mov bx,1
    mov bp,15

    mov cx,8
s2:
    mov al,[bx]
    mov es:[bp],al
    add bx,2
    sub bp,2
    loop s2

    mov ax,4c00h
    int 21h
code ends
end

呵呵,见笑了。
2012-03-18 20:06
zaixuexi
Rank: 12Rank: 12Rank: 12
来 自:上海
等 级:火箭侠
威 望:8
帖 子:858
专家分:3233
注 册:2010-12-1
收藏
得分:5 
这是你原来的代码
程序代码:
assume cs:code
code segment
    mov ax,0ffffh
    mov ds,ax        ;uint8_t *ds_seg = (uint8_t *)-1;
    mov ax,0020h
    mov es,ax        ;uint8_t *es_seg = (uint8_t *)0x0020;
    mov bx,0         ;uint16_t i = 0;
    mov bp,14        ;uint16_t j = 14;
    mov cx,8         ;uint16_t count = 8;
s1:
    mov al,[bx]
    mov es:[bp],al   ;es_seg[j] = ds_seg[i];
    add bx,2         ;i += sizeof(uint16_t);
    sub bp,2         ;j -= sizeof(uint16_t);
    loop s1          ;while (count > 0);
    mov bx,1         ;i = (uint16_t)1;
    mov bp,15        ;j = (uint16_t)15;
    mov cx,8         ;count = 8;
s2:
    mov al,[bx]
    mov es:[bp],al   ;es_seg[j] = ds_seg[i];
    add bx,2         ;i += sizeof(uint16_t);
    sub bp,2         ;j -= sizeof(uint16_t);
    loop s2          ;while (count > 0);
    mov ax,4c00h
    int 21h          ;exit(0);
code ends
end
改后的代码
程序代码:
assume cs:code
code segment
    mov ax,0ffffh
    mov ds,ax        ;uint16_t *ds_seg = (uint16_t *)-1;
    mov ax,0020h
    mov es,ax        ;uint16_t *es_seg = (uint16_t *)0x0020;

    mov bx,0         ;uint16_t i = 0;
    mov bp,0eh       ;uint16_t j = 14;
    mov cx,8         ;uint16_t count = 8;
s1:
    mov ax,[bx]
    mov es:[bp],ax   ;es_seg[j] = ds_seg[i];
    add bx,2         ;i += sizeof(uint16_t);
    sub bp,2         ;j -= sizeof(uint16_t);
    loop s1          ;while (count > 0);

    mov ax,4c00h
    int 21h          ;exit(0);
code ends
end

技术问题,请不要以短消息方式提问
2012-03-18 20:56
powlin1991
Rank: 2
等 级:论坛游民
帖 子:51
专家分:22
注 册:2012-2-22
收藏
得分:0 
回复 9楼 zaixuexi
懂了!!!额,太笨了太笨了,呵呵,多谢版主哈。
2012-03-18 21:54
快速回复:汇编问题
数据加载中...
 
   



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

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