鱼C论坛

 找回密码
 立即注册
查看: 2076|回复: 3

42课实验求解

[复制链接]
发表于 2013-8-11 13:08:44 | 显示全部楼层 |阅读模式
10鱼币
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个字符串  0-83
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型数据  84-138
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11542,144430,15257,17800
;以上表示21年公司雇员人数的21个word型数据 139-180
data ends
;======================================================================================================================
table segment
db 21 dup('xiaoqinhai123456')
table ends
;==============================================代码段=====================================================================
code segment
start:                 
mov ax,data
mov ds,ax
mov ax,table
mov es,ax
mov cx,21
mov bp,0
mov bx,0
mov si,84
mov di,139
xh1:
mov dword ptr es:[bp],[bx]
mov byte ptr es:[bp].4,"*"
mov dword ptr es:[bp].5,[si]
mov byte ptr es:[bp].9,"*"
mov word ptr es:[bp].10,[di]
mov byte ptr es:[bp].12,"####"
add bp,16
add bx,4
add si,4
add di,2
loop xh1
mov ax,4c00H
int 21H
code ends
end start



编译错误,求解

最佳答案

查看完整内容

楼主,你好,请看看下面代码,看看你的错误在哪? table复制21行“year sumn ne ??”然后用date段中的年份 收入雇员覆盖 比如第一行覆盖的格式是1975 (16 00 00 00) (03 00) 平均收入 (= =括号中的00是字节和table中的对应) codesg segment start: mov ax, data 注释利用AX间接给ds赋值 mov ds, ax =同上 mov ax, table =同上 mov es, ax =同上 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-11 13:08:45 | 显示全部楼层
楼主,你好,请看看下面代码,看看你的错误在哪?

table复制21行“year sumn ne ??”然后用date段中的年份 收入雇员覆盖
比如第一行覆盖的格式是1975   (16 00 00 00) (03 00) 平均收入
(= =括号中的00是字节和table中的对应)
codesg segment
start:
    mov ax, data         注释利用AX间接给ds赋值
    mov ds, ax         =同上
    mov ax, table         =同上
    mov es, ax         =同上
                =这四条找复制段的地址
     
    mov cx, 21         =循环21次打印21行year sumn ne ?? 格式的行
    mov bx, 0       ; 年份的首地址         =date段年份偏移地址
    mov si, 54H     ; 收入的首地址         =收入的偏移地址 单引号定义的字符串每个字符占一个字节,所以21*4=84=54H
                                =因为从0开始计数,所以54H是年分段的地址,(段:段偏移)可以找到相应数据
    mov di, 0a8H    ; 雇员数的首地址         =date段的雇员数偏移地址,和上面算法一样
    mov bp, 0       ; table的基址
s:
    mov ax, [bx]        =获取ds:[0]的值放到ES:[BP]中
    mov es:[bp], ax         =同上 ax两字节        每个年份但上面定义的是4字节
    mov ax, 2[bx]         =在吧年份的另外两字节放进去
    mov es:2[bp], ax   =同上
    ; 年份
     
    mov ax, [si]         =又上可知si放的是收入地址
    mov es:5[bp], ax         =同样把收入覆盖,es5[bp]=es:[bp+5]
    mov ax, 2[si]         =
    mov es:7[bp], ax   =收入双字覆盖两次
    ; 收入
     
    mov ax, [di]         =同上,获取雇员数偏移,然后覆盖数据
    mov es:0aH[bp], ax         
    ; 雇员
     
    mov ax, [si]         =下面是除法了,不用解释了吧
    mov dx, 2[si]
    div word ptr [di]
    mov es:0dH[bp], ax
    ; 人均收入
     
    add bx, 4         =bx年份四字节
    add si, 4         =si收入四字节(双字)
    add di, 2         =di收入一字
    add bp, 10H         =“year summ ne ?? ”十六字节10H   下一行偏移,开始打印     
    loop s
    mov ax, 4c00H
    int 21H
codesg ends


end start

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

使用道具 举报

发表于 2013-8-11 15:37:39 | 显示全部楼层
单引号,不是双引号
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-12 09:53:34 | 显示全部楼层
0~83
84~167
另外,代码太短了,建议参考答案后重新写过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 04:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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