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

我的博客

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

[2011-10-24 20:51] 实验七的其中一种笨解法,应该没问题,附图

图片载入中
assume cs:code,ds:data1,ds:data2,ds:data3

data1 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个字符串
data1 ends

data2 segment 
     dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
     dd 345980,590827,853530,1183000,1843000,2759000,3753000,4649000,5937000
         ;以上是表示21年公司总收入的21个dword型数据
data2 ends

data3 segment
     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型数据
data3 ends

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

start: mov ax,table
        mov es,ax        ;table段地址送es
        mov bx,0
        mov si,0
        mov dx,0         ;寄存器清零
        mov cx,21        ;设置循环数
       
        mov ax,data3
        mov ds,ax        ;把data3送ds

   s1: mov ax,ds:[si]
        mov es:[bx].0ah,ax
        add bx,10h
        add si,2h
        loop s1      ;把雇员数送table中

        mov bx,0    
        mov si,0         ;寄存器清零
        mov cx,21        ;设置循环数

        mov ax,data1
        mov ds,ax        ;把data1送ds

   s2: mov ax,ds:[0]       
        mov es:[bx],ax    ;把19送table
       
        mov dx,[si].2h
        mov es:[bx].2h,dx ;把年份后两个ascii码送table

        add bx,10h
        add si,4h 
        loop s2           ;把所有年份送table

        mov bx,0    
        mov si,0         ;寄存器清零
        mov cx,21        ;设置循环数

        mov ax,data2
        mov ds,ax        ;把data2送ds

   s3: mov ax,ds:[si]
        mov dx,ds:[si].2h  ;把总收入的低字节放ax,高字节放dx
        mov word ptr es:[bx].5h,ax
        mov word ptr es:[bx].7h,dx      ;把收入送入table

        div word ptr es:[bx].0ah
        mov es:[bx].0dh,ax         ;作除法后把结果送table

        add bx,10h 
        add si,4h
        loop s3
        
        mov ax,4c00h
        int 21h
        
code ends

end start
                   
等有时间弄个好一点的。我用几个方法做了很多次了,当时觉得都做错了(在debug里看的结果不是我想要的,后来想明白了,右边显示的是ascii码,但是实际上只有年份是显示出来的,其他的都是点,很明显做对了得到的结果应该就是这样的,不知道其他朋友有没有犯这个意识上得错误,但是我就犯浑,搞了几个小时,-_-|||),后来就求安稳,写了这一段,效率有点低。我也是初学,就知道一点vb,也不敢肯定代码有没有错,请各位朋友指正了。
评论次数(0)  |  浏览次数(330)  |  类型(汇编作业) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码