鱼C论坛

 找回密码
 立即注册
查看: 3431|回复: 0

[汇编作业] 课程设计1

[复制链接]
发表于 2020-3-2 23:10:06 | 显示全部楼层 |阅读模式

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

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

x
  1. assume cs:codesg,ss:stack,ds:data

  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.         dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
  8.         dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
  9.        
  10.         dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,5635,8226
  11.         dw 11542,14430,15257,17800
  12. data ends

  13. stack segment
  14.         dd 16 dup(0)                ;40h 空间
  15. stack ends

  16. codesg segment
  17.         start:        mov ah,9
  18.                         int 10h
  19.                         mov ax,data
  20.                         mov ds,ax
  21.                         mov ax,stack
  22.                         mov ss,ax
  23.                         mov sp,40h
  24.                         mov si,0                                ;数据段的偏移地址
  25.                
  26.                         mov ax,0b828h                        ;显存的段地址
  27.                         mov es,ax
  28.                
  29.                        
  30.                         call yaer                                ;先取出年份,一共20个年份
  31.                        
  32.                         mov cx,21
  33.                         add si,54H
  34.                         mov bp,54H
  35.                        
  36.                         mov di,ax
  37.                 s1:        push cx
  38.                        
  39.                         mov ax,ds:[bp]                ;总工资
  40.                         mov dx,ds:[bp+2]
  41.                         mov bx,28h                               
  42.                         call dtoc
  43.                        
  44.                         mov cx,ds:[si]                ;公司人数
  45.                         push ax
  46.                         push dx
  47.                         push cx
  48.                         mov ax,cx
  49.                         mov dx,0
  50.                         mov bx,50h
  51.                         call dtoc
  52.                         pop cx
  53.                         pop dx
  54.                         pop ax
  55.                        
  56.                         div cx                                        ;得到最后的人均值 ax
  57.                         mov dx,0
  58.                         mov bx,78h
  59.                         call dtoc
  60.                        
  61.                         add bp,4
  62.                         add si,2
  63.                         add di,0ah
  64.                         mov es,di
  65.                         pop cx
  66.                         loop s1
  67.                
  68.                         mov ax,4c00h
  69.                         int 21h
  70.                        
  71.                        
  72.                        
  73.                
  74.         ;保存年       
  75.         yaer:       
  76.                         mov cx,21
  77.                        
  78.                         mov bx,0
  79.                         push ax
  80.                         y:       
  81.                                 mov dx,ds:[si]
  82.                                 mov es:[0],dl
  83.                                 mov byte ptr es:[1],07h
  84.                                 mov es:[2],dh
  85.                                 mov byte ptr es:[3],07h
  86.                                 mov dx,ds:[si+2]
  87.                                 mov es:[4],dl
  88.                                 mov byte ptr es:[5],07h
  89.                                 mov es:[6],dh
  90.                                 mov byte ptr es:[7],07h
  91.                                 add si,4
  92.                                
  93.                                 add ax,0ah                        ;跳转到下一行
  94.                                 mov es,ax
  95.                                 loop y
  96.                         pop ax
  97.                         mov es,ax
  98.                         ret
  99.                        
  100.         dtoc:        push ax
  101.                         push dx
  102.                         push si
  103.                                                        
  104.                         mov si,0
  105.                         mov cx,10
  106.                 s2:                                        ;取余
  107.                         call divdw                                ; dx高位  ax 低位  cx余数
  108.                         push cx
  109.                         mov cx,ax
  110.                         inc si
  111.                         jcxz ok_dtoc1                        ;完成取余工作inc si
  112.                         mov cx,0bH
  113.                         loop s2

  114.                         ok_dtoc1:       
  115.                                         mov cx,si                                        ;开始颠倒刚开始取余的值
  116.                                         mov si,0
  117.                                        
  118.                                 ss1:        pop ax
  119.                                         add ax,30h
  120.                                         mov ah,07h
  121.                                         mov es:[bx+si],ax
  122.                                         add si,2
  123.                                         loop ss1
  124.                                         mov word ptr es:[bx+si],0h        ;表示已经结束
  125.                                         pop si
  126.                                         pop dx
  127.                                         pop ax
  128.                                         ret                                                ;已经完成对字量常数的转变
  129.                        
  130.                        
  131.         ;16位不溢出除法               
  132.         divdw:        push bx
  133.                         push ax                                        ;底地址入栈s
  134.                         mov ax,dx
  135.                         mov dx,0
  136.                         div cx                                        ;除以高地址
  137.                         mov bx,ax                                ;将结果保存
  138.                         pop ax                                        ;取出低地址进行剩下的16位计算
  139.                         div cx
  140.                         mov cx,dx                                ;保存余数
  141.                         mov dx,bx                                ;保存高位
  142.                         pop bx
  143.                         ret
  144. codesg ends
  145. end start
复制代码


野路子,除了溢出除法不是自己写的其他的都是自己独立完成(除法那个实在是思考不出来,或则说 路 走错了)
如果不加前面的mov ah,9  int 10h 中断,那就无法显示(或者说显示了,但是太快了)
其他的都还好,一步一步debug还是能发现自己构思的过程中的一些不严谨的地方.然后加以改成,
        好的程序是改出来的,
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-9 16:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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