鱼C论坛

 找回密码
 立即注册
查看: 2781|回复: 3

一个关于mov 和push pop的各方面的疑惑

[复制链接]
发表于 2017-4-17 21:27:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 单纯的+c 于 2017-4-19 08:35 编辑
assume cs:codesg

codesg segment

start:        mov bx, 0
                                mov cx, 12
                                mov ax, 0ffffH
                                mov ds, ax
                                mov ax, 0020H
                                mov es, ax
                                
s:                        push [bx]
                                pop [bx]
                                inc bx
                                loop s
                                
                                mov ax,4C00H
                                int 21H
                                
codesg ends

end start
assume cs:codesg

codesg segment

start:        mov bx, 0
                                mov cx, 12
                                mov ax, 0ffffH
                                mov ds, ax
                                mov ax, 0020H
                                mov es, ax
                                
s:                        mov dl, ds:[bx]
                                mov es:[bx], dl
                                inc bx
                                loop s
                                
                                mov ax,4C00H
                                int 21H
                                
codesg ends

end start
以上两个是关于把某段内存的数据copy到另一段内存的代码
在代码的循环那里,数据中转用栈的效率比较高
还是用一个寄存器的效率比较高?
这两者如果遇到大数据的话
谁会比较优势?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-4-17 21:29:30 | 显示全部楼层
@小甲鱼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-18 14:03:51 | 显示全部楼层
当然是用寄存器效率高,程序慢体现在CPU对内存的读写。
在一次循环中:
如果用寄存器涉及2次内存读写,第一次是将内存的数据读入寄存器,第二次将寄存器的内容写入内存
如果用栈涉及4次内存读写,栈也是在内存中的一段空间,第一次是将内存的数据读入指令存储器,第二次将数据从指令存储器的内容写入栈;第三次将栈内容出栈到指令存储器,第四次将数据写入目标内存
还有你第一段程序有一堆问题
     1、pop [bx] 没有标明es段地址
以下问题虽然对本程序结果没有影响,但是编程习惯还是要注意以下的
     2、没有定义栈段
     3、栈每次操作2个字节数据,所以 inc bx  要改成 add bx, 2
     4、mov cx, 12 这个赋值要紧贴着循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-19 08:35:01 From FishC Mobile | 显示全部楼层
yongtaige 发表于 2017-4-18 14:03
当然是用寄存器效率高,程序慢体现在CPU对内存的读写。
在一次循环中:
如果用寄存器涉及2次内存读写,第 ...

明白了,谢谢大神解答,以后会注意的,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-6 12:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表