鱼C论坛

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

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

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

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

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

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

  2. codesg segment

  3. start:        mov bx, 0
  4.                                 mov cx, 12
  5.                                 mov ax, 0ffffH
  6.                                 mov ds, ax
  7.                                 mov ax, 0020H
  8.                                 mov es, ax
  9.                                
  10. s:                        push [bx]
  11.                                 pop [bx]
  12.                                 inc bx
  13.                                 loop s
  14.                                
  15.                                 mov ax,4C00H
  16.                                 int 21H
  17.                                
  18. codesg ends

  19. end start
复制代码

  1. assume cs:codesg

  2. codesg segment

  3. start:        mov bx, 0
  4.                                 mov cx, 12
  5.                                 mov ax, 0ffffH
  6.                                 mov ds, ax
  7.                                 mov ax, 0020H
  8.                                 mov es, ax
  9.                                
  10. s:                        mov dl, ds:[bx]
  11.                                 mov es:[bx], dl
  12.                                 inc bx
  13.                                 loop s
  14.                                
  15.                                 mov ax,4C00H
  16.                                 int 21H
  17.                                
  18. codesg ends

  19. end start
复制代码

以上两个是关于把某段内存的数据copy到另一段内存的代码
在代码的循环那里,数据中转用栈的效率比较高
还是用一个寄存器的效率比较高?
这两者如果遇到大数据的话
谁会比较优势?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-4-17 21:29:30 | 显示全部楼层
@小甲鱼
小甲鱼最新课程 -> https://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 这个赋值要紧贴着循环
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

明白了,谢谢大神解答,以后会注意的,谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-3 12:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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