一个关于mov 和push pop的各方面的疑惑
本帖最后由 单纯的+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
pop
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:
mov es:, dl
inc bx
loop s
mov ax,4C00H
int 21H
codesg ends
end start
以上两个是关于把某段内存的数据copy到另一段内存的代码
在代码的循环那里,数据中转用栈的效率比较高
还是用一个寄存器的效率比较高?
这两者如果遇到大数据的话
谁会比较优势? @小甲鱼 当然是用寄存器效率高,程序慢体现在CPU对内存的读写。
在一次循环中:
如果用寄存器涉及2次内存读写,第一次是将内存的数据读入寄存器,第二次将寄存器的内容写入内存
如果用栈涉及4次内存读写,栈也是在内存中的一段空间,第一次是将内存的数据读入指令存储器,第二次将数据从指令存储器的内容写入栈;第三次将栈内容出栈到指令存储器,第四次将数据写入目标内存
还有你第一段程序有一堆问题
1、pop 没有标明es段地址
以下问题虽然对本程序结果没有影响,但是编程习惯还是要注意以下的
2、没有定义栈段
3、栈每次操作2个字节数据,所以 inc bx要改成 add bx, 2
4、mov cx, 12 这个赋值要紧贴着循环 yongtaige 发表于 2017-4-18 14:03
当然是用寄存器效率高,程序慢体现在CPU对内存的读写。
在一次循环中:
如果用寄存器涉及2次内存读写,第 ...
明白了,谢谢大神解答,以后会注意的,谢谢
页:
[1]