鱼C论坛

 找回密码
 立即注册
查看: 2445|回复: 7

Divide overflow

[复制链接]
发表于 2012-11-11 00:27:17 | 显示全部楼层 |阅读模式
1鱼币
实验七,算是写出来了吧,但是有溢出,请指教!还是欠缺程序编译的经验,都说写程序前要先设计流程的,真不知道是咋整滴。那本书有讲这个的,鱼老师教我。谢谢!
  1. assume cs:codesg

  2. data segment
  3.         db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
  4.         db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
  5.         db '1993','1994','1995'
  6.        
  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.        
  12.         dw 3,7,9,13,28,130,220,476,778,1001,1442,2258,2739,4037,5635,8226
  13.         dw 11542,14430,15257,17800
  14.         ;以上为总人员数列表
  15. data ends

  16. table segment
  17.         db 21 dup ('year summ ne ??')
  18. table ends

  19. codesg segment

  20. start:               
  21.                 mov ax,data
  22.                 mov ds,ax
  23.                 mov ax,table
  24.                 mov es,ax
  25.                 mov bx,0
  26.                 mov si,0
  27.                 mov di,0
  28.                
  29.                 s: ;将年份送入table
  30.                 mov al,[bx]
  31.                 mov es:[di],al
  32.                 mov al,[bx+1]
  33.                 mov es:[di+1],al
  34.                 mov al,[bx+2]
  35.                 mov es:[di+2],al
  36.                 mov al,[bx+3]
  37.                 mov es:[di+3],al
  38.                
  39.                 ;加入一个空格
  40.                 mov byte ptr es:[di+4],20h
  41.                
  42.                 ;将公司总收入分别入AX,DX
  43.                 mov ax,54h[bx]
  44.                 mov dx,56h[bx]
  45.                 mov es:6h[di],ax
  46.                 mov es:8h[di],dx
  47.                
  48.                 ;加入一个空格进去
  49.                 mov byte ptr es:9h[di],20h
  50.                
  51.                 ;将雇员人数送入到table表中
  52.                 mov ax,0a8h[si]
  53.                 mov es:0ah[di],ax
  54.                
  55.                 ;再加入一个空格
  56.                 mov byte ptr es:0ch[di],20h
  57.                
  58.                 ;将年均收入写入table
  59.                 mov ax,54h[di]
  60.                 div word ptr 0a8h[si]
  61.                 mov es:0dh[di],ax
  62.                
  63.                 ;修改变量bx,si,di
  64.                 add bx,4
  65.                 add si,2
  66.                 add di,16
  67.                
  68.                 loop s
  69.                
  70.                 mov ax,4c00h
  71.                 int 21h
  72.                 codesg ends
  73.         end start
  74.                
复制代码


小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-11-11 00:27:18 | 显示全部楼层
  1. DATAS  SEGMENT
  2.         DB      '1975', '1976', '1977', '1978', '1979', '1980', '1981', '1982'
  3.         DB      '1983', '1984', '1985', '1986', '1987', '1988', '1989', '1990'
  4.         DB      '1991', '1992', '1993', '1994', '1995'
  5.         ;以上是表示21年的21个字符串
  6.         ;偏移地址是0-53h 十进制是84-1

  7.         DD      16, 22, 382, 1356, 2390, 8000, 16000, 24486, 50065, 97479, 140417, 197514
  8.         DD      345980, 590827, 803530, 118300, 184300, 2759000, 3753000, 4649000, 5937000
  9.         ;以上是表示21年公司总收入的21个dword型数据
  10.         ;偏移地址从54h-a7h 十进制是84*2=168-1
  11.         DW      3, 7, 9, 13, 28, 38, 130, 220, 476, 778, 1001, 1442, 2258, 2793, 4037, 5635, 8226
  12.         DW      11542, 14430, 15257, 17800
  13.         ;以上是表示21年公司雇员人数的21个word型数据
  14.         ;偏移地址从a8h-d1h 十进制是168+42=210-1
  15. DATAS  ENDS

  16. TABLE  SEGMENT
  17.          DB     21 DUP ('year summ ne ?? ')
  18.         ;偏移地址从E0-220 十进制是21*16=336d=150h-10h+e0h=220h
  19.         ;可以将地址给ES 用-D ES来查看
  20.         ;0B4F:0000  79 65 61 72 20 73 75 6D-6D 20 6E 65 20 3F 3F 20   year summ ne ??
  21.         ;根据上面的定位
  22. TABLE  ENDS

  23. STACKS  SEGMENT
  24.         DB 16 DUP (0)
  25. STACKS  ENDS

  26. ASSUME  CS:CODES,DS:DATAS,SS:STACKS

  27. CODES   SEGMENT

  28. START:
  29.         ;相关寄存器初始化
  30.         MOV     AX,DATAS
  31.         MOV     DS,AX
  32.         MOV     AX,TABLE
  33.         MOV     ES,AX
  34.         MOV     AX,STACKS
  35.         MOV     SS,AX
  36.         MOV     SP,16
  37.         
  38.         MOV     BX,0
  39.         MOV     BP,0
  40.         MOV     DI,0
  41.         MOV     SI,0

  42.         MOV     CX,21

  43. cycle:  ;使用栈复制年份
  44.         PUSH    0[DI]
  45.         PUSH    [DI].2
  46.         POP     ES:[BP].2
  47.         POP     ES:[BP].0
  48.          
  49.         ;使用栈复制收入
  50.         PUSH    54H.[DI].0
  51.         PUSH    54H.[DI].2
  52.         POP     ES:[BP].7
  53.         POP     ES:[BP].5

  54.         ;使用栈复制雇员数
  55.         PUSH    0A8H.[SI]
  56.         POP     ES:[BP].0AH

  57.         ;计算人均收入
  58.         MOV     AX,ES:[BP].5
  59.         MOV     DX,ES:[BP].7
  60.         DIV     WORD PTR ES:[BP].0AH
  61.         MOV     ES:[BP].0DH,AX

  62.         ADD     SI,2H
  63.         ADD     DI,4H
  64.         ADD     BP,10H

  65.         LOOP    cycle
  66.               

  67.         MOV     AH,4CH
  68.         INT     21H
  69. CODES   ENDS
  70. END     START
  71. ; 栈的使用、结构化程序设计的思想...
  72. ; 话就不多说了,自己体会吧
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-11-11 08:31:35 | 显示全部楼层
俺也遇到过,DIV(word)过后,ax=结果 dx 余数。。。每次用后,我都会把DX清空。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-11-11 08:32:40 | 显示全部楼层
没有仔细研究,SI  &  DI  寻址没问题吧?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-11-11 14:58:19 | 显示全部楼层
看懂了,只是没有帮忙解释一下为啥会出现溢出呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-11-11 16:08:40 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-11-11 16:22:08 | 显示全部楼层

郁闷,丢脸丢大发了:$
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-11-11 16:36:59 | 显示全部楼层
  呵  呵 :lol
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-4 09:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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