鱼C论坛

 找回密码
 立即注册
查看: 1940|回复: 4

关于实验7优化以及思路,请各位前辈各位同学指点

[复制链接]
发表于 2013-1-21 00:02:31 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 jeset 于 2013-1-21 00:06 编辑

这个是我写的实验7的实验程序,利用了小甲鱼老师的思路,没有看小甲鱼老师的代码,写出来的,后来对比了一下,貌似我这个比小甲鱼老师的代码要少一点,相当于优化吧,比如说复制年份的时候,小甲鱼老师是一个一个字符串去定位的,而我是用ax来定位四个年份字符串,我用控制列数的寄存器直接每复制一个就加32位,相当于4个字节。

这个贴出来主要是想让大家帮忙看一下是否思路错误和其他错误,麻烦大家指出,感谢!

assume cs:codesg ds:datasg es:table

datasg segment
;定义年份开始0
db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
db '1993','1994','1995'                                                
;定义年份结束53H

;定义收入开始54H
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
;定义收入结束0A7H

;定义人数开始0A8H
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11542,14430,15257,17800
;定义人数结束0D2H

datasg ends

table segment

    db 21 dup ('year summ ne ?? ')

table ends

codesg segment ;定义代码段

start:   

;定义年份开始,4个字节,用si控制列数,用bx控行数,ax操作16位寄存器,所以si一次性复制一个年
;份,所以si加4,每复制一个年份bx就16H来控制进入下一行操作
        mov ax,datasg
        mov ds,ax
        mov ax,table
        mov es,ax
        mov bx,0
        mov cx,21H
        mov si,0
    s1:    mov ax,[si]
        mov es:[bx],ax
        add si,32H
        add bx,16H
        
    loop s1
   
        mov ax,0
        mov bx,0
        mov si,0
        mov di,4
        mov cx,21H
    s2:    mov ax,54H[bx]
        mov dx,56H[bx]
        mov es:[si+05H],ax
        mov es:[si+07H],dx
        add bx,32H
        add si,16H
    loop s2
   
        mov ax,0
        mov bx,0
        mov si,0
        mov di,0AH
        mov cx,21H
    s3:    mov ax,0A8H[bx]
        mov es:[si+di],ax
        add bx,2H
        add si,16H
        
    loop s3  
   
        mov ax,0
        mov bx,0
        mov si,0
        mov di,0H
        mov cx,21H
    s4:    mov ax,54H[bx]
        mov dx,56H[bx]
        div dword ptr 0A8H[si]
        mov es:0DEH[di],ax
        add bx,32H
        add si,2H
        add di,16H
    loop s4
   
    mov ax,4c00h
    int 21h
   
codesg ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-1-21 10:07:20 | 显示全部楼层
甲鱼说了。只要答案是对的。代码越少越好。呵呵
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2013-1-21 10:58:57 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2015-1-2 13:55:35 | 显示全部楼层
循环次数错了,应该是十进制21次,不是21H
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-3 02:42:33 | 显示全部楼层
你这样复制的是一个字的单位吧? 你debug一下看下结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-28 08:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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