鱼C论坛

 找回密码
 立即注册
查看: 2928|回复: 9

[技术交流] 【汇编语言】-第八章-实验七

[复制链接]
发表于 2015-11-10 02:53:59 | 显示全部楼层 |阅读模式

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

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

x
个人有点笨,花的时间长了点,万幸还是解决了
开始时因为对data段中定义的字符串数据在内存中的表现形式产生了误解,不明白为什么‘1975’在内存中是:31,39,37,35,   后来才明白这是ASCII 码      还有一个重要疑问就是不明白在data段中定义的数据 比如年份,收入,雇员各占多少字节   编写代码的时候该如何定位这些数据。  这个问题后来在我们亲爱的鱼C上看了很多鱼油以前的帖子在对着书本才一点点明白。  所以真的很感谢各位鱼油们  谢谢!  

下面是写好的图片以及代码↓   开始学不久,希望能和大家一起进步!
未命名.JPG

代码:

  1. assume cs:codesg,ds:data,es:table

  2. data segment
  3. ;年份(双字)
  4.     db '1975','1976','1977','1978','1979','1980','1981','1982','1983'

  5.     db '1984','1985','1986','1987','1988','1989','1990','1991','1992'

  6.     db '1993','1994','1995'
  7. ;收入(双字)
  8.     dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514

  9.     dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
  10. ;雇员(字)
  11.     dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226

  12.     dw 11452,14430,15257,17800

  13. data ends
  14. ;---------------------------------------写入
  15. table segment

  16.     db 21 dup ('year summ ne ?? ')

  17. table ends
  18. ;---------------------------------------写入

  19. ;-------------------↓代码↓--------------------
  20. codesg segment
  21. start:mov ax,data
  22.           mov ds,ax                ; ds = data
  23.           mov ax,table
  24.           mov es,ax                ; es = table
  25.           
  26.           mov bx,0                ; data偏移
  27.           mov si,2                ; 年份和收入的后2为偏移
  28.           mov bp,0                ; table行偏移
  29.           mov di,0                ; 雇员偏移
  30. ;年份写入          
  31.           mov cx,21                ; 循环21次
  32.         s:mov ax,[bx]        ;
  33.           mov es:[bp],ax; 年份前2位给table
  34.           mov ax,[bx+si];
  35.           mov es:[bp+si],ax; 年份后2位给table
  36. ;收入写入
  37.           mov ax,[54h+bx]
  38.           mov es:[bp+5h],ax; 收入前2位给table
  39.           mov ax,[54h+bx+si]
  40.           mov es:[bp+5h+si],ax; 收入后2位给table
  41. ;雇员写入
  42.           mov ax,[0A8h+di]
  43.           mov es:[bp+0Ah],ax; 雇员给table
  44. ;人均写入          
  45.           mov ax,es:[bp+5h]
  46.           mov dx,es:[bp+7h]        ; 被除数(直接取得table段的收入值)
  47.           div word ptr es:[bp+0Ah]
  48.           mov es:[bp+0Dh],ax        ; 商存入table
  49.           
  50.           add bx,4
  51.           add bp,10h
  52.           add di,2
  53.           loop s
  54.           
  55.           mov ax,4c00h
  56.           int 21h

  57. codesg ends
  58. end start

复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 贡献 +3 收起 理由
康小泡 + 3 + 3 + 3 热爱鱼C^_^

查看全部评分

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

使用道具 举报

 楼主| 发表于 2015-11-10 03:00:06 | 显示全部楼层
新手,忙了一晚上终于解决了  有点小激动。  全无睡意第一时间来鱼C和小伙伴们分享下。 代码写的不好大牛不要笑话  呵呵~     希望小伙伴们多多交流共同进步   各位鱼油   晚安....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-11-10 09:16:59 | 显示全部楼层
不错,给你设置了高亮。小伙伴继续加油哇
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-11-10 10:03:17 | 显示全部楼层
wa 好牛逼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-10 18:30:57 | 显示全部楼层
康小泡 发表于 2015-11-10 09:16
不错,给你设置了高亮。小伙伴继续加油哇

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

使用道具 举报

 楼主| 发表于 2015-11-10 18:31:28 | 显示全部楼层

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

使用道具 举报

 楼主| 发表于 2015-11-10 19:39:20 | 显示全部楼层
竟然有上首页啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-11-12 22:44:08 | 显示全部楼层
本帖最后由 zph888 于 2015-11-13 12:12 编辑

       在实验七这道”大作业“中,发现自己:1、偏移地址算错  2、指令DB  DD  DW不熟悉 , DIV除法指令更是不明白  3、DEBUG调试、内容查看没经过训练一知半解。
       因为王爽老师,在我们没有练习除法的基础上,搞突袭布置大作业来检测学员的掌握前期学习的水平,因此初学者本人在不参考,不看鱼C老师实验七视频的情况下,用了5个循环,做了2天仍然只做对75%的内容了(除法死活做不出来)。
       但通过封闭做题,确实收获不小,巩固了前8章,为后面9章扫清了障碍。
       下面是搬了学友的题,来说明: 偏移地址直接用十进制数,可以减少手工换算时间。以供学友参考。
assume cs:code,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'
        ;以上是表示21年的21个字符串
        dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
        dd 345980,590827,803530,11830000,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
        dw 11542,14430,15257,17800
        ;以上是表示21年公司雇员人数的21个word型数据
data ends

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

code  segment
start:  
        mov ax,data
        mov ds,ax
         
        mov ax,table
        mov es,ax
         
        mov bx,0                    ;控制table行数
        mov si,0
        mov di,0
        mov cx,21                   ;循环21次
         
s:      mov ax,ds:[di]
        mov es:[bx],ax
        mov ax,ds:[di+2]
        mov es:[bx+2],ax         ;传送年份,以字传送
         
        mov ax,ds:[84+di]      
        mov es:[bx+5],ax     
        mov ax,ds:[86+di]      
        mov es:[bx+7],dx          ;传送收入
        
        mov ax,ds:[168+si]
        mov es:[bx+10],ax        ;传送雇员数,以字传送  

        mov ax,ds:[84+di]      
        mov dx,ds:[86+di]      
        div word ptr es:[bx+10]    ;除法 32位÷16位,商保存在AX中
        mov es:[bx+13],ax             ;AX传送到table中的人均收入
         
        add si,2            ;控制雇员数递增,每循环一次,递加2
        add di,4           ;控制年份、收入递增,每循环一次,递加4
        add bx,16         ;每循环一次,移到下一行
        loop s
         
        mov ax,4c00h
        int 21h
code   ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2015-11-13 12:04:03 | 显示全部楼层
实验七中,红框中数据应该程序运行后的数据
DEBEG.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-11-29 12:35:20 | 显示全部楼层
过来看看  一起学习一起研究一下:smile:smile:smile:smile
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-12 10:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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