faly 发表于 2013-6-3 01:18:21

汇编优化? 死循环不死机?

第一个问题:
我想出的答案和书上答案不要样,(答案如下),我想知道谁写的好?怎么比较?看优化吗?
看编译的exe文件的大小?还是有软件去比较?

第二个问题:
关键课外的,有c语言编写一个死循环,点击编译,链接后的exe文件,看cpu使用率为100%
我复制10个刚才编写的exe文件,我报这必死的心态:L同时都运行,怎么不死机呢?为什么呢?
有人告诉我,程序把内存沾满后,就占虚拟内存,之后就死机了,不对吗?

题目如下:将字符串‘welcome to masm!’复制到它后面的数据区中
assume cs:code, ds:data

data segment
        db 'welcome to masm!'
        db '................'
data ends


我用的方法如下:                                       
start:        mov ax,data
                mov ds,ax
                mov bx,0
                       
                mov cx,16
        s:        mov al,bx
                mov ,al
                inc bx
                loop s
答案如下:
start:        mov ax,data
                        mov ds,ax
                        mov si,0
                        mov di,16
                       
                        mov cx,8
                s:        mov ax,
                        mov ,ax
                        add si,2
                        add si,2
                        loop s

福禄娃娃 发表于 2013-6-3 01:18:22

答案仅循环了8次,而你的答案循环了16,肯定答案效率高些。
你的答案只是换了一种寄存器寻址方式。
不能光看文件的大小,如果文件加壳压缩后,体积肯定小了。
得看CPU执行的次数。
C语言写的死循环程序,反复申请内存,对于32位以上的应用程序而言,无论怎样使用malloc与new,几乎不可能导致“内存耗尽”,只是操作系统速度变的缓慢了,因为32位操作系统支持“虚拟内存”,物理内存用完了,自动用硬盘空间顶替。

有只小稚飞不起 发表于 2013-6-3 09:15:24

????   cx为什吗=8???

有只小稚飞不起 发表于 2013-6-3 09:28:17

start:      mov ax,data
                mov ds,ax
                mov bx,0
                        
                mov cx,16
      s:      mov al,bx                   ?????BX没有初值
                mov ,al            ?????BX为啥要加16
                inc bx                            ?????为啥把BX加1,应该加2
                loop s


:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@

你是新手吧???????
加Q回复我1255243021

zxctystal 发表于 2013-7-27 19:08:32

有只小稚飞不起 发表于 2013-6-3 09:15 static/image/common/back.gif
????   cx为什吗=8???

后面那个程序中cx=8,是对字的操作,循环8次就是每次写入2个字节(字)
页: [1]
查看完整版本: 汇编优化? 死循环不死机?