鱼C论坛

 找回密码
 立即注册
查看: 2987|回复: 5

实验七,求指点,求交流,求优化大师!!!

[复制链接]
发表于 2012-3-4 20:08:43 | 显示全部楼层 |阅读模式
10鱼币
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',12 dup(0)                                              ;12 dup(0)是为了整理内存数据

        DD 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
        DD 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000,0,0,0  ;同上
        DW 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226,11542,14430,15257,17800
DATA ENDS

STACK SEGMENT
        DW 8 DUP(0)
STACK ENDS

TABLE SEGMENT
        DB 21 DUP('YEAR SUMM NE ?? ')
TABLE ENDS

CODE SEGMENT
START:
                MOV AX,DATA
                MOV DS,AX
                MOV AX,STACK     
                MOV SS,AX
                MOV SP,16
                MOV AX,TABLE
                MOV ES,AX     
               
                MOV BX,0
                MOV CX,21
                MOV DI,0   
                MOV BP,0   
        S:        
                PUSH CX
                MOV SI,0
                MOV CX,2
                B:
                        MOV AX,[DI]   
                        MOV ES:[BP+SI],AX
                        MOV AX,[DI+96]
                        MOV ES:[BP+5+SI],AX
                        ADD SI,2
                        ADD DI,2
                        LOOP B
                        
                MOV AX,[BX+192]      
                MOV ES:[BP+10],AX                 
                MOV AX,ES:[BP+5]
                MOV DX,ES:[BP+7]
                DIV WORD PTR ES:[BP+10]
                MOV ES:[BP+13],AX
                ADD BX,2
               
                POP CX
                ADD BP,16
                LOOP S               
               
                MOV AX,4C00H
                INT 21H
               
CODE ENDS

END START

截图和代码.zip

21.75 KB, 下载次数: 7

源代码和截图

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-3-5 14:13:22 | 显示全部楼层
我贴贴我的代码,大家互相学习吧:
assume cs:code,ds:data,ss:table

data segment
db '1975','1976','1977','1978','1979','1980','1981','1982'
db '1983','1984','1985','1986','1987','1988','1989','1990'
db '1991','1992','1993','1994','1995'
dd 16,22,382,1235,2390,8000,16000,24486,50065,97479
dd 140417,197514,345980,590827,803530,1183000,1843000
dd 2759000,3753000,4649000,5937000
dw 3,7,9,13,28,38,130,220,475,778,1001,1442,2258,2793
dw 4037,5635,8226,11542,11430,15257,17800
data ends

table segment
db 22 dup('year summ ne ?? ')
table ends

code segment
start: mov ax,data
         mov ds,ax
         mov ax,table
         mov ss,ax
         mov sp,160H
       
         mov bp,0
         mov bx,0
         mov di,0
         mov cx,21;外循环对应行,即不同年份的数据
         
s:        push cx
        mov cx,4;内循环处理复制年份
        mov si,0
       
s0:         mov  al, [bx+si];年份
         mov [bp+si],al
         inc si
         loop s0
         pop cx
         mov  ax,84[bx];总收入
         mov  [bp+5],ax
         mov  dx,86[bx]
         mov  [bp+7],dx
       
         mov ax, 168[di];人数
         mov [bp+10], ax
       
         mov ax,[bp+5];人均
         div word ptr [bp+10]
         mov [bp+13],ax
         add bp,16
         add bx,4
         add di,2
         loop s
         mov ax,4c00H
         int 21H
code ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-5 14:46:16 | 显示全部楼层
我觉得有点疑惑  有关于这个DIV
这里被除数是32位的, 为什么没有把高16位放进DX,因为你后面把ax的当做商来处理,说明这里被除数是32位的

引用楼上的“
mov ax,[bp+5];人均
         div word ptr [bp+10]
         mov [bp+13],ax


我刚看了视频里面也没这个,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-5 14:58:46 | 显示全部楼层
因为在放总收入时已经把高位数据放到DX中了:       mov  ax,84[bx];总收入
         mov  [bp+5],ax
         mov  dx,86[bx]
         mov  [bp+7],dx
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-9 13:07:09 | 显示全部楼层
我也贴一下,哈哈
assume cs:codesg
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'

        dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
        dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
       
        dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
        dw 11542,14430,15257,17800
data ends

stack segment
        db 16 dup (0)
stack ends

table segment
        db 21 dup ('year summ ne ?? ')
table ends

codesg segment
start:
        mov ax,codesg
        sub ax,24h
        mov ds,ax
        mov es,ax
        mov bx,0
        mov ss,ax
        mov sp,00f0h
        mov cx,21
        mov di,0
        MOV SI,0
s:        push cx

        mov cx,2
        s1:
                mov dx,[bx]            ;前面两个4字节
                mov es:[SI+0f0h],dx
                mov dx,ds:[bx+54h]
                mov es:[SI+0f5h],dx
                add bx,2
                ADD SI,2
        loop s1

        mov dx,ds:[di+0a8h]      ;雇员人数
        mov es:[0fah],dx
        add di,2
       
        MOV DX,ES:[0F7H] ;除法运算
        MOV AX,ES:[0F5H]
        MOV cx,ES:[0FAH]
        DIV cx
        MOV ES:[0FDH],AX
       
        MOV AX,ES  ;使段地址+1
        INC AX
        MOV ES,AX
        MOV SI,0   ;使目的地址复位
       
               
        pop cx
loop s

mov ax,4c00h
int 21h

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

使用道具 举报

发表于 2016-11-13 08:36:52 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-25 22:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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