汇编网首页登录博客注册
mengxinjinglong的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
最新留言
好友圈
友情链接

[2009-03-24 19:48] 课程设计 1

图片载入中
偷偷懒,又回来交作业啦,虽然是学了后面,但是觉得还是不应该将后面的内容用的太多,现在交个小小的上来,请大家帮忙查看查看,有不足之处希望大家指点指点啊!!!程序如下:
assume cs:code
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' 

    dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514 
    dd 345980,590872,803530,1183000,1843000,2759000,3753000,4649000,5937000 

    dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226 
    dw 11542,14430,15257,17800 
data ends 

table segment 
    db 22 dup ('year summ ne ?? ') ;最后一行用来保存数据的字符形式以实现中间转换
table ends 

        

code segment
start:mov ax,data
      mov ds,ax
      mov si,0      ;ds指向数据开头
      
      mov ax,table
      mov es,ax
      mov di,0      ;es指向存储位置
      
      mov cx,21
      
    s:push cx
      mov ax,ds:[bp]
      mov es:[di],ax
      mov ax,ds:[bp+2]
      mov es:[di+2],ax  ;存入年份
      
      mov ax,ds:[bp+21*4]
      mov es:[di+5],ax
      mov dx,ds:[bp+21*4+2]
      mov es:[di+7],dx    ;存入收入
      mov cx,ds:[si+21*8]
      mov es:[di+10],cx     ;存入雇员人数
      call divdw
      pop cx
      add si,2
      add di,10h
      add bp,4
      loop s
      ;以下为显示部分
      mov ax,0b800h
      mov ds,ax 
      mov si,0;ds:si指向显存
      mov ax,table
      mov es,ax
      mov di,0;es:di指向数据存储处
      mov cx,21
      
   sa:mov ax,es:[di]
      mov dx,es:[di+2]
      mov ds:[si],al
      mov ds:[si+2],ah
      mov ds:[si+4],dl
      mov ds:[si+6],dh  ;这一部分是将年份写入显存中
      
      mov ax,es:[di+5]
      mov dx,es:[di+7]
      add si,40           ;将'收入'存入da,ax,并调用dtoc将数据以十进制的形式写入显存
      call dtoc
      
      mov ax,es:[di+10]
      mov dx,0
      add si,40
      call dtoc  ;将'雇员数'存入da,ax,并调用dtoc将数据以十进制的形式写入显存
      
      mov ax,es:[di+12]
      mov dx,es:[di+14]
      add si,40
      call dtoc  ;将'人均收入'存入da,ax,并调用dtoc将数据以十进制的形式写入显存
      
      add si,40    
      add di,16   ;改变si和di使得下一年的情况写入下一行的显存中
      loop sa
  
          ;以上为显示部分
          mov ax,4c00h
          int 21h
        
      
divdw:push ax  ;用于计算人均收入并存入相应位置
    mov ax,dx
    sub dx,dx
    div cx
    mov bx,ax
    pop ax
    div cx
    mov cx,dx
    mov dx,bx
    mov es:[di+12],ax
    mov es:[di+14],dx
    ret
    
        
 
        
dtoc:push cx   ;以下为数据以字符形式写到显存中去
    push di
    push si    ;保护数据不被修改
    mov bp,0
    mov di,0
        s1:mov cx,10
        push ax
    mov ax,dx
    sub dx,dx
    div cx
    mov bx,ax
    pop ax
    div cx
    mov cx,dx
    mov dx,bx
    add cx,30h
    mov ch,113
    mov es:[di+21*16],cx   ;将除以10的余数以字符形式依次存入table的最后16个存储空间
                           ;再在下面以倒序的形式读出(入栈出栈的形式)
    inc bp  ;用于记录数据的长度
    add di,2
    cmp dx,0
    jne s1
    cmp ax,0
    jne s1
    
      
 s2:mov di,bp
    add di,di
    sub di,2  
  p:mov ax,es:[di+21*16]  ;使di指向数据字符的存储位置,并倒序的写入显存使得变成正确的十进制
    mov ds:[si],ax
    add si,2
        sub di,2
        sub bp,1
        cmp bp,0   ;检查bp是否为零,则退出
        jne p
        pop si
        pop di
    pop cx ;还原数据
   
    ret
code ends 
end start






还有不知道怎么回事,就是用masm for windows集成实验环境共享版和用网站提供的masm,link来编译的时候出现的结果不一样,不知道为什么,见附图!!
评论次数(1)  |  浏览次数(804)  |  类型(汇编作业) |  收藏此文  | 

[  crazyman   发表于  2009-03-25 11:18  ]

没什么好说的。

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码