鱼C论坛

 找回密码
 立即注册
查看: 2892|回复: 8

实验7的代码

[复制链接]
发表于 2012-1-2 01:09:13 | 显示全部楼层 |阅读模式

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

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

x
在测试点找不到实验7的代码,视频中的也只能看到部分代码.求完整代码,谢谢!
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'
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,19514,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,
5636,8226,11542,14430,15257,17800
data ends
table segment
db 21 dup('year summ ne ?? ')
table ends

code segment

start:
..........................................................



mov ax,4c00h
int 21h
code ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-1-2 01:48:51 | 显示全部楼层
小甲鱼不是有课件和源代码可以下载嘛~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-1-2 03:14:17 | 显示全部楼层
我的代码  比较长:(
assume  cs:dm,ds:sj,ss:dz
sj  segment
    db  '1975','1976','1977','1978'
    db  '1979','1980','1981','1982'
    db  '1983','1984','1985','1986'
    db  '1987','1988','1989','1990'
    db  '1991','1992','1993','1994'
    db  '1995'
    dd  16,22,382,1356,2390,8000,18000,24486,50065,97479,140417,197514
    dd  345980,890827,803530,1183000,1743000,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
    sj  ends

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

dz  segment
    db 0,0,0
dz  ends
dm  segment
ks: mov ax,sj
    mov ds,ax
    mov ax,dz
    mov ss,ax
    mov sp,16
    mov ax,sjb
    mov es,ax               
   
    mov bx,0                ;初始化行数变量
    mov bp,84               ;summ起始地址
    mov cx,21               ;初始化S计数器
    mov si,0                ;初始化源数据偏移
s:  push cx                 ;S计数器保护
    mov cx,2                ;初始化S1计数器
    mov di,0                ;初始化目的数据偏移
s1: mov ax,[si]             ;读入数据year
    mov es:[bx+di],ax       ;写入数据year
    mov ax,ds:[bp+si]       ;读入数据summ
    mov es:[bx+5+di],ax     ;写入数据summ
    add si,2                ;源数据高位字节偏移
    add di,2                ;目的数据高位字节偏移
    loop s1
    add bx,16               ;换行
    pop cx                  ;s计数器还原
    loop s
   
    add bp,84               ;人数起始地址
    mov bx,0                ;初始化行数变量
    mov si,0                ;初始化源数据偏移
    mov cx,21               ;初始化S2计数器
s2: mov ax,ds:[bp+si]       ;读入人数数据
    mov es:[bx+10],ax       ;写入人数数据
    add si,2                ;下一个源数据偏移
    add bx,16               ;换行
    loop s2

    mov bx,0            ;初始化行数变量
    mov cx,21           ;初始化S3计数器
s3: mov dx,es:[bx+7]    ;高位被除数
    mov ax,es:[bx+5]    ;低位被除数
    mov si,es:[bx+10]   ;除数
    div si
    mov es:[bx+13],ax   ;写入商
    add bx,16           ;换行
    loop s3
   
    mov ax,4c00h
    int 21h
dm  ends
end ks
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-1-3 01:51:15 | 显示全部楼层
之前的是只看书的代码
视频看到一半 改进的代码  只用到一个循环
assume  cs:dm,ds:sj
sj  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,1356,2390,8000,18000,24486,50065,97479,140417,197514
    dd  345980,890827,803530,1183000,1743000,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
sj  ends

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

dm  segment
ks: mov ax,sj
    mov ds,ax               ;定义数据段
    mov ax,sjb
    mov es,ax               ;定义数据表段
    
    mov bx,0
    mov si,0
    mov bp,84
    mov di,0
    mov cx,21
s:  mov ax,ds:[si]          ;读入年份低位地址
    mov es:[bx],ax          ;写入年份低位地址
    mov ax,ds:[bp+si]       ;读入收入低位地址
    mov es:[bx+5],ax        ;写入收入低位地址
    add si,2
    mov ax,ds:[si]          ;读入年份高位地址
    mov es:[bx+2],ax        ;写入年份高位地址
    mov ax,ds:[bp+si]       ;读入收入高位地址
    mov es:[bx+7],ax        ;写入收入高位地址
    add si,2

    mov ax,ds:[bp+84+di]    ;读入人数地址
    mov es:[bx+10],ax       ;写入人数地址
    add di,2                

    mov ax,es:[bx+5]        ;读入被除数低位
    mov dx,es:[bx+7]        ;读入被除数高位
    div word ptr es:[bx+10] ;除法运算 除数为人数
    mov es:[bx+13],ax

    add bx,16               ;换行
    loop s
    
    mov ax,4c00h            
    int 21h                 ;中断返回
dm  ends
end ks 
不知道看完视频后 能不能再精简
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-1-3 02:28:49 | 显示全部楼层
代码跟视频中的怎么完全不一样了,84是怎么来的不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-1-3 22:58:20 | 显示全部楼层
84=54H(我没用十六进制的)
视频的代码是比较详细的
和我第一个差不多吧
因为每个年份('1987')是4个字节 有21个年份 总共84个字节 所以年份总共占了84(54H)个字节 在内存单元的DS:0~~DS:53H(83)处共84个内存单元  从54H(84)开始就是收入的数据
DD定义的是双字型数据(4个字节) 也是有21个收入数据 就是84个字节 在内存单元的地址就是DS:54H~~A7H处(A7H=84+84-1  -1是因为0也占了一个内存单元)
DW定义的是字型数据(2个字节) 也就是21个人数数据 就是42个字节 在内存单元的DS:A8H~~E9H处
(E9=84+84+42-1 -1是因为0也占了一个内存单元)
所以  年份 收入 人数 在内存中的地址就是 DS:0-E9h
年份的起始偏移是0
收入的起始偏移是84(54h)
人数的起始偏移是168(A8h)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-1-3 23:32:35 | 显示全部楼层
谢谢指点,最后一个计算出来是不是DS:A8H~~0D1H,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-1-4 00:53:32 | 显示全部楼层
不是
DS是数据段(书上的标号是data 我的标号是sj(数据的缩写 嘿嘿))  就是已知的数据 年份 收入 人数
是不用我们修改的
要求我们要修改的内存是table段(我的标号是sjb(数据表)) 让我们把DS段的年份 收入 人数 分别写到table段中 这才是我们要改的数据段
还有一点 你好像没明白这个实验要我们做什么
其中 DS段的数据排列是21个年份加上21个收入再加上21个人数
我们要做的是把DS段的3个数据 按照表格的形式写入table中 再计算出人均收入
table的数据排列是 每行16个字节  前4个字节是年份 空格 4个字节是收入 空格 2个字节是人数 空格 2个字节是人均收入 空格 (每个空格是1个字节)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-1-5 17:01:52 | 显示全部楼层
想想容易做起来难{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-9-21 09:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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