鱼C论坛

 找回密码
 立即注册
查看: 2872|回复: 7

[争议讨论] 零基础学汇编 第八章 实验7 (作业)求优化方案

[复制链接]
发表于 2013-6-10 21:34:29 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 ┈━═☆佳佑 于 2013-6-10 21:38 编辑

这道作业题花了 两天时间做完  绞尽脑汁 都还没想到优化方案  希望高手给出优化意见
assume cs:codesg
data segment
     db '1975','1976','1977','1978','1979','1980','1981','1982','1983'  ;'4',0-35     
     db '1984','1985','1986','1987','1988','1989','1990','1991','1992'  ;36-71
     db '1993','1994','1995'                                                                   ;72-83
     ;以上表示21年的21个字byte型字符串
  
  dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514                   ;'4'84-131
  dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000   ;132-167
  ;以上表示21年公司的总收入的21个dword型数据
  
  dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226  ;'2'168-209
  dw 11542,14430,15257,17800
  ;以上表示21年公司雇员人数的21个word型数据
data ends
table segment
      db 21 dup('year summ ne ?? ')
table ends
codesg segment
  start:mov ax,data
        mov ds,ax
        mov ax,table
        mov es,ax
        mov si,0
        mov di,0
        mov bp,0
        mov cx,21
      s:mov bx,0
        mov ax,0
        mov al,[bx+si]    ;年份
        mov es:[bp+0],al
        inc si
        mov al,[bx+si]    ;年份
        mov es:[bp+1],al
        inc si      
        mov al,[bx+si]    ;年份
        mov es:[bp+2],al
        inc si
        mov al,[bx+si]    ;年份
        mov es:[bp+3],al
        inc si
  
        mov bx,80            ;年收入    si=4
        mov ax,[bx+si]
        mov dx,[bx+si+2]
        mov es:[bp+5],ax
        mov es:[bp+7],dx
  
        mov bx,168         ;雇员
        mov bx,[bx+di]
        mov es:[bp+10],bx
        inc di
        inc di
  
       div bx            ;平均人收入
       mov es:[bp+13],ax
  
       add bp,16
       loop s
  
        mov ax,4c00h
        int 21h
codesg ends
end start

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-6-10 21:44:47 | 显示全部楼层
抢个沙发  等待 高手  跟进 中......
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-10 21:52:05 | 显示全部楼层
这道题本来就有些问题  误导了我 胡乱想了一天多是时间  
总收入  
公司雇员人数
平均人收入
这三项本来 定义的都是 十进制  放入寄存器后 就都是 十六进制了  再放入表格 也还是十六进制 怎么可能跟以下格式一样 都显示的是 十进制数
2222222222.jpg
1111111111.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-10 23:35:45 | 显示全部楼层
无回帖,不论坛,这才是人道。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-11 08:16:11 | 显示全部楼层
好,{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-12 04:05:28 | 显示全部楼层
本帖最后由 金色暢想犬舍 于 2013-6-12 04:09 编辑

我写的,很烂,凑合看看吧 ,顺便说一下,有没有学到第八章了的?共同交流下? QQ81881894{:1_1:}
assume CS:code,DS:data,SS:stack

data SEGMENT
        db '1975','1976','1977','1978','1979','1980','1981','1982','1983' ;字节类型
        db '1984','1985','1986','1987','1988','1989','1990','1991','1992' ;字节类型
        db '1993','1994','1995' ;以上是表示21年的21个字符串 ;字节类型 BX+0~83(0~53H)
        ;这一组数据用SI表示,这组偏移过后,SI指向下一组数据时,SI归零,重来 CX=15H

        dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514 ;双字类型
        dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000 ;双字类型
        ;以上是表示21年公司总收入的21个dword型数据 BX+84~168(就是54H~0A8),这一组21个数据,用SI表示
        ;CX=15H

        dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226 ;字类型
        dw 11542,14430,15257,17800 ;以上是表示21年公司雇员人数的21个WORD型数据 ;字类型
        ;这一组21个数据,也用SI表示; CX=15H
        dw 0,0
data ends

table SEGMENT
        db 21 DUP ('year summ ne ?? ')
table ends

STACK segment
        db 7 DUP ('year summ ne ?? ')
STACK ends

;编程,将data段中的数据按图上格式写入到table段中,并计算21年终的人均收入(取整),结果也按照图上的
;格式保存在table段中;
code SEGMENT
start:                MOV AX,DATA
                MOV DS,AX
                MOV AX,TABLE
                MOV ES,AX
                MOV AX,STACK
                MOV SS,AX
                MOV SP,112

;>>>>>>>>>>>>>>>>>>>>>>>>>>>年份&总收入收入开始>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                MOV CX,15H
YEARMONEY:        MOV DS:[210],CX
                MOV CX,2
YEARMONEY1:        MOV AX,[BX].0[SI]        ;将年份读入一个字
                MOV ES:[BP].0[DI],AX        ;将一个字的年份写入
                MOV AX,[BX].54H[SI]        ;将总收入读入一个字
                MOV ES:[BP].5[DI],AX        ;将总收入写入一个字
                PUSH AX                        ;将总收入,入栈;
                ADD SI,2
                ADD DI,2
                LOOP YEARMONEY1
                MOV BYTE PTR ES:[BP+4],' '
                MOV BYTE PTR ES:[BP+9],' '
                ADD BP,10H
                MOV DI,BX
                MOV CX,DS:[210]
                LOOP YEARMONEY
;>>>>>>>>>>>>>>>>>>>>>>>>>>>年份&总收入结束>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

;>>>>>>>>>>>>>>>>>>>>>>>>>>>雇员人数&人均收入结束>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                MOV SI,2AH                ;退着走
                MOV BP,140H                ;BP也退着走,
                MOV DI,BX                ;DI清零
                MOV BX,0A6H                ;BX偏移了,就用不到IDATA了.
                MOV CX,15H                ;循环次数依然是21次
S:                MOV AX,[BX+SI]                ;定位到最后一个雇员人数读入
                MOV ES:[BP+0AH],AX        ;将雇员人数写入对应字单元中;
                POP DX
                POP AX
                DIV WORD PTR ES:[BP+0AH]        ;除雇员人数-----
                MOV ES:[BP+0DH],AX        ;将人均收入写入指定字单元
                MOV BYTE PTR ES:[BP+0CH],' '        ;在写完雇员人数后写入一个空格
                MOV BYTE PTR ES:[BP+0FH],' '        ;在最后面写入一个空格
                SUB SI,2
                SUB BP,10H                ;BP每次-10,就是退一行
                LOOP S


        MOV        AX,4c00h
        INT        21h        
code ENDS
END start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-12 04:10:37 | 显示全部楼层

显示十六进制就足够了,谁跟你说要显示10进制的,  十六进制的10H和十进制的16,其实表示出来不都是一个数?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-24 20:31:54 | 显示全部楼层
持楼主ing……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 02:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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