|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 復襍 于 2016-10-18 13:08 编辑
.- ;把数值显示在屏幕上
- assume cs:code,ds:data
- data segment
- db 10 dup (0)
- data ends
- info segment
- ;每个21个数据
- ;年份 84字节
- db '1975','1976','1977','1978','1979','1980','1981','1982'
- db '1983','1984','1985','1986','1987','1988','1989','1990'
- db '1991','1992','1993','1994','1995'
- ;收入 84字节
- dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
- dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
- ;雇员人数 42字节
- dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
- dw 11452,14430,15257,17800
- info ends
- table segment
- db 21 dup('year summ ne ?? ')
- db 'year summ ne ?? '
- table ends
- code segment
- start:
- ;把数据存入表格
- mov ax,info
- mov ds,ax ;设置ds段 指向info
- mov ax,table
- mov es,ax ;设置es段 指向table
- mov bx,0 ;bx代表行
- mov si,0 ;si代表 年份 收入
- mov di,0 ;di代表 雇员 人均收入
- mov cx,21 ;初始化
- s:
- ;年份处理
- mov ax,[si] ;把data的年份放到ax中
- mov es:[bx],ax ;把ax中的年份放到内存
- mov ax,[si+2] ;把data的年份放到ax中
- mov es:[bx+2],ax ;把ax中的年份放到内存
- ;收入处理
- mov ax,[si+84] ;把收入保存在ax
- mov es:[bx+5],ax
- mov dx,[si+84+2] ;把收入保存在dx
- mov es:[bx+7],dx
- ;处理人均收入
- div word ptr [di+168] ;dx*10000H+ax/雇员数 商ax 余数dx
- mov es:[bx+13],ax
- ;雇员处理
- mov ax,[di+168] ;把雇员保存在ax
- mov es:[bx+10],ax
- ;置0
- mov byte ptr es:[bx+4],0
- mov byte ptr es:[bx+9],0
- mov byte ptr es:[bx+15],0
- add si,4
- add di,2
- add bx,16
- loop s
- ;------------------------------
- ;把数据显示出来
- mov ax,table
- mov ds,ax
- mov si,0 ;ds:si指向table首地址
- ;显示年份
- mov cx,21
- mov bl,1 ;列
- show:
- push cx
- mov dh,bl ;行号
- mov dl,30 ;列号
- mov ch,0
- mov cl,2 ;颜色
- call show_str
- ;显示收入
- add si,5
- mov ax,[si] ;收入高16位
- add si,2 ;收入低16位
- mov dx,[si]
- push si ;si入栈
- mov si,336
- call dtoc ;将word型数据转变为表示十进制的字符串,字符串以0为结尾符。
- mov dh,bl ;行号
- mov dl,35 ;列号
- mov ch,0
- mov cl,2 ;颜色
- call show_str
- pop si ;si在出栈
- ;显示雇员
- add si,3 ;雇员数
- mov ax,[si]
- mov dx,0
- push si ;si入栈
- mov si,336
- call dtoc ;将word型数据转变为表示十进制的字符串,字符串以0为结尾符。
- mov dh,bl ;行号
- mov dl,43 ;列号
- mov ch,0
- mov cl,2 ;颜色
- call show_str
- pop si ;si在出栈
- ;显示人均收入
- add si,3 ;人均收入
- mov ax,[si]
- mov dx,0
- push si ;si入栈
- mov si,336
- call dtoc ;将word型数据转变为表示十进制的字符串,字符串以0为结尾符。
- mov dh,bl ;行号
- mov dl,49 ;列号
- mov ch,0
- mov cl,2 ;颜色
- call show_str
- pop si ;si在出栈
- pop cx
- inc bl
- add si,3
- loop show
- mov ax,4c00h
- int 21h
- ;名称:dtoc
- ;功能:将word型数据转变为表示十进制的字符串,字符串以0为结尾符。
- ;参数: (ax)=数据低16位;
- ; (dx)=数据高16位;
- ;ds:si指向字符串首地址。
- ;返回:无。
- dtoc:
- push ax
- push bx
- push cx
- push dx
- mov bx,0
- continue1:
- mov cx,10 ;设置除数
- call divdw
- add cl,30h ;变为ascii码
- mov ch,0 ;把高8为置为0,以便存入栈中和循环
- push cx ;保存
- inc bx ;增加字符数
- mov cx,ax
- inc cx ;如果商为0 加一以便退出
- loop continue1
- ;写入内存
- mov cx,bx ;把字符数保存到cx以便循环使用
- mov bx,0 ;把bx置为0 以便定位字符
- continue2:
- pop ax
- mov [si+bx],al
- inc bx
- loop continue2
- mov al,0
- mov [si+bx],al ;把最后一个字符置0
- pop dx
- pop cx
- pop bx
- pop ax
- ret
- ;名称:divdw
- ;功能:除法不会溢出
- ;参数:
- ; ax 被除数16位
- ; dx 被除数16位
- ; cx 除数
- ;返回: 结果
- ; ax商低16位
- ; dx商高16位
- ; cx余数16位
- divdw:
- push si
- push di
- mov di,ax ;di暂时存放ax
- mov ax,dx
- mov dx,0
- div cx
- mov si,ax ;si存放商
- mov ax,di ;di的值给回ax
- div cx
- mov cx,dx
- mov dx,si
- pop di
- pop si
- ret
- ;名称:show_str
- ;功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串。
- ;参数:(dh)=行号(取值范围0~24);
- ; (dl)=列号(取值范围0~79);
- ; (cl)=颜色;
- ; ds:si指向字符串的首地址。
- ;返回:无。
- show_str:
- push ax
- push cx
- push dx
- push si
- push di
- push es
- mov ax,0b800h
- mov es,ax
- dec dh
- mov al,0A0h
- mul dh ;al*dh显存的行号
- mov di,ax
- mov al,2
- mul dl
- sub ax,2
- add di,ax ;di显存的行号+行号
- mov ah,cl
- write:
- mov cl,[si]
- jcxz ok
- mov es:[di],cl ;字符
- mov es:[di+1],ah ;颜色
- add di,2
- add si,1
- jmp write
- ok:
- pop es
- pop di
- pop si
- pop dx
- pop cx
- pop ax
- ret
- code ends
- end start
复制代码
代码:
class1.zip
(2.01 KB, 下载次数: 8)
有什么不对请指教. |
评分
-
查看全部评分
|