鱼C论坛

 找回密码
 立即注册
查看: 2477|回复: 2

[汇编作业] 自己写的实验7

[复制链接]
发表于 2014-2-16 13:45:32 | 显示全部楼层 |阅读模式

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

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

x
assume cs:code, ds:data, es:table

data segment
        db '1975','1976','1977','1978','1979','1980','1981','1982','1983','1984','1985','1986','1987','1988','1989','1990','1991','1992','1993','1994','1995'       
        ;以上表示21年的21个byte型字符串
        dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514,345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000       
        ;以上是21年公司的总收入21个dword型数据
        dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226,11542,14430,15257,17800       
        ;以上是21年公司雇员人数的21个word型数据
data ends

table segment
        db 21 dup ('year revn em av ')
table ends

code segment
start:
        mov ax,data
        mov ds,ax                ;将数据源指向DS
        mov ax,table
        mov es,ax                ;将目标数据指向ES
       
        mov si,0
        mov di,0
        mov cx,21
       
year:
        mov ax,ds:[si]
        mov es:[di],ax
        mov ax,ds:[si+2]
        mov es:[di+2],ax
        add si,4
        add di,16
        loop year                ;导入年份
       
        mov cx,21
        mov si,54h
        mov di,0
       
revenue:
        mov ax,ds:[si]
        mov dx,ds:[si+2]
        mov es:[di+5],ax
        mov es:[di+7],dx
        add si,4
        add di,16
        loop revenue        ;导入总收入
       
        mov cx,21
        mov si,0a8h
        mov di,0

employee:
        mov ax,ds:[si]
        mov es:[di+0ah],ax
        add si,2
        add di,16
        loop employee        ;导入员工数
       
        mov cx,21
        mov bx,0
               
avginc:
        mov ax,es:[bx+5]
        mov dx,es:[bx+7]
        div word ptr es:[bx+0ah]
        mov es:[bx+0dh],ax
        add bx,16
        loop avginc
       
        mov ax,4c00h
        int 21h
               
code ends
end start

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

使用道具 举报

 楼主| 发表于 2014-2-16 13:50:10 | 显示全部楼层
好像没有用到栈,设置了4次CX循环不知道能否合并,另外做除法的时候发现DS的寻址好困难,转而用TABLE里已经搬运过来的数据,效果还可以。汇编还蛮有意思的。。
现在看视频学习一下小甲鱼的解题方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-16 14:58:35 | 显示全部楼层
看了视频后,修改如下:利用数据类型BX+4,SI+2,优化成一个循环:

assume cs:code, ds:data, es:table

data segment
        db '1975','1976','1977','1978','1979','1980','1981','1982','1983','1984','1985','1986','1987','1988','1989','1990','1991','1992','1993','1994','1995'       
        ;以上表示21年的21个byte型字符串
        dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514,345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000       
        ;以上是21年公司的总收入21个dword型数据
        dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226,11542,14430,15257,17800       
        ;以上是21年公司雇员人数的21个word型数据
data ends

table segment
        db 21 dup ('year revn em av ')
table ends

code segment
start:
        mov ax,data
        mov ds,ax                ;将数据源指向DS
        mov ax,table
        mov es,ax                ;将目标数据指向ES
       
        mov bx,0
        mov si,0
        mov di,0
        mov cx,21
       
copy:
        mov ax,ds:[bx]
        mov es:[di],ax
        mov ax,ds:[bx+2]
        mov es:[di+2],ax        ;复制年份
       
        mov ax,ds:[bx+54h]
        mov es:[di+5],ax
        mov ax,ds:[bx+56h]
        mov es:[di+7],ax        ;复制收入
       
        mov ax,ds:[si+0a8h]
        mov es:[di+0ah],ax        ;复制人数
       
        mov ax,ds:[bx+54h]
        mov dx,ds:[bx+56h]
        div word ptr ds:[si+0a8h]
        mov es:[di+0dh],ax        ;计算平均工资
       
        add bx,4
        add si,2
        add di,16
       
        loop copy
       
        mov ax,4c00h
        int 21h
               
code ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-29 23:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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