鱼C论坛

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

[汇编作业] 课程设计1写得有点抓狂

[复制链接]
发表于 2019-7-3 20:39:46 | 显示全部楼层 |阅读模式

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

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

x
assume cs:code,ds:data,ss:stack
stack segment
        dw 8 dup (0)
        stack ends
data segment
        db '1975','1976','1977','1978','1979','1980','1981'  ;年份起始地址0
        db '1982','1983','1984','1985','1986','1987','1988'
        db '1989','1990','1991','1992','1993','1994','1995'
               
        dd 16,22,382,1356,2390,8000,16000,24486,50065,97479  ;收入起始地址84
        dd 140417,197514,345980,590827,803530,1183000
        dd 1843000,2759000,3753000,4649000,5937000
         
        dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258      ;人数起始地址168
        dw 2793,4037,5635,8226,11542,14430,15257,17800
       
        dw 21 dup (0)   ;人均收入起始地址210
       
        db 8 dup (0)    ;空储存段起始地址252
        data ends
code segment
start:      mov ax,data        ;将DS指向DATA段
            mov ds,ax
            mov bx,84          ;BX指向收入起始地址
            mov si,168          ;SI指向人数起始地址
            mov di,210          ;DI指向人均收入起始地址
            
            mov ax,stack        ;将SS指向STACK段
            mov ss,ax           
            mov sp,16           ;将SS段设为空栈
            
            mov cx,21           ;求21年的人均收入循环

             s:   push cx            
            mov ax,[bx]
            mov dx,[bx+2]
            mov cx,[si]
            div cx
            mov [di],ax
            add bx,4
            add si,2
            add di,2
            pop cx
            loop s
            
            
            mov bp,640           ;将ES指向显存区,BP起始为640
            mov ax,0b800h
            mov es,ax
            mov cx,21          ;21次循环将21年的的数据放入显存区
            mov bx,0           ;BX指向年份起始
            mov di,168         ;DI指向人数起始
            mov si,0           ;SI设为偏移量
            
    s2:     call show          ;进入SHOW函数
            
            mov ax,4c00h
            int 21h
            
   show:    push cx            ;将循环次数入栈
            push bp            ;将BP入栈
            
                 mov cx,4               
        s0: mov al,[bx+si]        ; 四次循环把年份放入显存区
            mov es:[bp],al
            inc si
            add bp,2
            loop s0
            
            mov ax,[bx+84]        ;把收入高16位低16位分别放入AX,DX中
            mov dx,[bx+86]
            mov si,0              ;SI置0
            call divdw            ;进入DIVDW求收入的每一位的ASCII码
            
            mov ax,[di]           ;人数放入AX
            mov dx,0               ;DX置0
            mov si,0            
            call divdw            ;求人数的每一位的ASCII码
            
            mov ax,[di+42]        ;人均收入放入AX
            mov dx,0              ;DX置0
            mov si,0
            call divdw            ;求人数的每一位的ASCII码
            pop bp                ;BP指向下一行
            add bp,160            
            add bx,4              ;BX指向下一年
            add di,2              ;DI指向下一人数
            pop cx                ;取出循环次数判断
            loop s2               

            divdw:  mov cx,10000     
            div cx            ;求出商为万位数后的数值,余数为千百十个位数
            push ax           ;将万位数后的数入栈
            mov ax,dx        ;千百十个位数放入AX
            mov dx,0         ;DX置0
            mov cx,4         ;CX为循环次数
            call div1        
            
            pop ax           ;取出万位后的数
            mov dx,0         ;DX置0
            mov cx,4         ;循环次数
            call div1
      
       s3:  dec si          ;SI指向最后的ASCII码
            add bp,10       ;BP指向下一存放区
            jmp short show1
            
    div1:   push cx        ;循环次数入栈
            mov cx,10      ;除数10
            div cx         ;求出商和余数
            mov [si+252],dl ;把余数放入空数据段
            inc si         ;SI+252指向下一空数据
            mov dx,0       ;DX置0
            pop cx         ;取循环次数进行判断
            loop div1
            
            ret            
            
             show1:   mov al,[si+252]  ;把每一位数的ASCII码值放入显存区
            add al,30h
            mov es:[bp],al
            mov cx,si         ;判断SI是否为零
            jcxz ok
            dec si            ;SI+252指向上一数据
            add bp,2          ;显存区单元加2
            jmp short show1
            
        ok: ret
           
            
            code ends
            end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-7-5 03:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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