鱼C论坛

 找回密码
 立即注册
查看: 5560|回复: 12

[汇编作业] 第八章实验7

[复制链接]
发表于 2013-8-7 00:35:16 | 显示全部楼层 |阅读模式

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

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

x
第八章实验7我自己想代码的时候想了有点久,最终差不多用了1个多小时才把这些代码写完
用了1个多小时才写完这一点点代码没办法人比较笨,大家一起努力学习共同进步
首先我觉得这道实验题想让我们滚顾的知识点在于
伪指令dd,db,dw分别是占用了多少个字节
div除法指令的使用
还有就是多种寻址的方法


我的思路基本上是先计算年份-收入-人员的偏移地址是多少到多少(0-53h),(54h-a7h),(a8h-d1h)
然后再计算table段里面需要填入的具体地址,随后考虑data段分别占用的字节

然后再进行写代码,我写的时候还出了1-2次错误,第一次少定义了一个偏移导致只能寻址雇员数的时候第一次存入3,第二次存入变成9了,为什么我会做错是因为我一开始认为dw也是4字节了

我的代码如下:里面都有注释,看不清楚的可以自己把代码复制到Notepad++或者MASMPlus中看一下
assume cs:codesg,ds:data,es:table
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';0-53h
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000;54h-a7h
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11542,14430,15257,17800;a8h-d1h
data ends

table segment
db 21 dup ('year summ ne ?? ');0-3年份,4空格,5-8收入,9空格,10-11雇员,12空格,13-14人均收入,15空格
table ends

codesg segment
start:
mov ax,data
mov ds,ax;设定data段地址
mov ax,table
mov es,ax;设定table段地址
mov cx,21;定义循环次数
mov bx,0;bx用来存放data段的偏移地址
mov bp,0;bp用来存放table的行偏移
mov di,0;di用来存放雇员数与人均收入的偏移
mov si,2;因为ax是字形数据,而我们定义的年份与收入都是2个字的
s:mov ax,[bx];取年份的数据前2个字节(因为年份占用了4个字节)
mov es:[bp],ax;存入年份数据前2个字节
mov ax,[bx+si];取年份数据后2个字节
mov es:[bp+si],ax;存入年份数据后2个字节
mov ax,[bx+54h];取收入前2个字节
mov es:[bp+5],ax;存入收入前2个字节
mov ax,[bx+si+54h];取收入后2个字节
mov es:[bp+si+5],ax;存入收入后2个字节
mov ax,ds:[di+0a8h];取雇员数
mov es:[bp+10],ax;存入雇员数
mov ax,[bx+54h];设置被除数
mov dx,[bx+54h+si];设置被除数
div WORD ptr ds:[di+0a8h];取字形数据的除数
mov es:[bp+13],ax;把商数的结果放入
add di,2
add bx,4
add bp,16
loop s
codesg ends
end start



评分

参与人数 2荣誉 +5 鱼币 +8 贡献 +5 收起 理由
Ъγ:_小ツ雨oο + 2 + 3 + 2 楼主代码有错误
Crazy迷恋. + 3 + 5 + 3 热爱鱼C^_^

查看全部评分

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

使用道具 举报

发表于 2013-8-7 08:26:30 | 显示全部楼层
谢谢楼主分享!
实现方法应该不止一种
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-14 09:03:37 | 显示全部楼层
感谢楼主,很好很实用{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-14 10:21:30 | 显示全部楼层
O(∩_∩)O谢谢楼主分享啊(*^__^*) 嘻嘻……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-14 13:26:58 | 显示全部楼层
楼主 代码真心好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-2 21:25:04 | 显示全部楼层
本帖最后由 LinuxDeepin 于 2013-9-2 21:34 编辑

一个小时写完,你厉害,不过你忘了

mov ax,4c00H
int 21H

程序不打算退出了?~~(^-^)~~


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

使用道具 举报

 楼主| 发表于 2013-9-3 02:52:45 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-3 11:59:01 | 显示全部楼层
assume ds:dataseg, cs:codeseg

dataseg 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,486,778,1001,1442,2258,2793,4038,5636,8228
        dw 11542,14430,15258,17800
dataseg ends

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

codeseg segment

        start:
                mov ax, dataseg
                mov ds, ax
                mov si, 0
               
                mov ax, table
                mov es, ax
                mov di, 0
                mov bx, 0
               
                mov cx, 21
        s:       
               
           mov  dx, ds:[si]
                mov  es:[di], dx
                mov  dx, ds:[si+2]
                mov  es:[di+2], dx
               
                mov ax, 84[si]
                mov es:[di+5], ax
                mov ax, 84[si+2]
                mov es:[di+7], ax
               
                add si, 4
               
                mov ax, 168[bx]
                mov es:[di+10], ax
                add bx, 2
                add di, 10H
                loop s
               
                mov ax, 4c00h
                int 21h
codeseg ends

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

使用道具 举报

发表于 2013-11-4 15:23:39 | 显示全部楼层
占用了多少个字节
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-8-24 13:37:21 | 显示全部楼层
没错误,我看错了。:dizzy:,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-8-24 21:32:44 | 显示全部楼层
楼主比我快啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-5-19 13:07:58 | 显示全部楼层
没写全    最后除法没写   。。
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 '1994','1995'
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827,803530,1183000,2759000,3753000,4649000,5937000
dw 3,7,9,13,28,38,130,220,476,778,1001,2258,2793,4037,5635,8226
dw 11542,14430,15257,17800
data ends

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

codesg segment
       
start:        mov ax,table
        mov es,ax
        mov ax,data
        mov bx,0
        mov ds,ax

        mov cx,21

s:        push cx
        mov cx,2

s0:        mov ax,[si]
        mov es:[bx],ax
        add bx,2
        add si,2
        loop s0
        inc bx
        mov cx,2

s2:        mov ax,[si+50H]
        mov es:[bx],ax
        add si,2
        add bx,2
        loop s2
        inc bx
        mov ax,[si+0A0H]
        mov es:[bx],ax
        mov dx
        sub si,4
        add bx,6
        pop cx
        loop s
        mov ax,4c00h
        int 21h
codesg ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-8 13:01:11 | 显示全部楼层
单步调试到 cx=6时,做除法时会提示除法溢出?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-19 12:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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