王爽《汇编语言》课程设计一

assume cs:code,ds:data

buf	segment
	db 0a0H dup (' '),0
buf ends

data	segment
	db '1975','1976','1977','1978','1979','1980','1981','1982','1983','1984'
	db '1985','1986','1987','1988','1989','1990','1991','1992','1993','1994'
	db '1995'
	;以上表示21年的21个字符串
	dd 16,22,382,1356,2390,8000,16000,24486,50065,97479
	dd 140417,197514,345980,590827,803530,1183000,1843000,2759000,3753000,4649000
	dd 5937000
	;以上表示21年公司总收入的21个dword型数据
	dw 3,7,9,13,28,38,130,220,476,778
	dw 1001,1442,2258,2793,4037,5635,8226,11542,14430,15257
	dw 17800
	;以上是表示21年公司雇员人数的21个word型数据
data	ends

table	segment
	db 21 dup ('year summ ne ?? '),0
table	ends

code	segment 
main:

	mov ax,table
	mov ds,ax
	mov ax,data
	mov es,ax
	mov si,0
	mov di,0
	call copy

	mov ax,buf
	mov ds,ax
	mov ax,table
	mov es,ax
	
	mov bl,2
	mov cx,21
s2:
	mov ax,es:[di]
	mov [si],ax
	mov ax,es:[di+2]
	mov [si+2],ax
	mov al,es:[di+4]
	mov [si+4],al
	
	mov ax,es:[di+5]
	mov dx,es:[di+7]
	add si,5
	call dtoc
		
	mov ax,es:[di+10]
	xor dx,dx
	add si,11
	call dtoc		
	
	mov ax,es:[di+13]
	xor dx,dx
	add si,6
	call dtoc
		
	xor si,si
	mov dh,bl
	mov dl,2
	push cx
	mov cl,2
	add di,10H
	call show_str
	pop cx
	inc bl
	loop s2
		
	mov ax,4c00H
	int 21H

copy:
	push ax
	push bx
	push cx
	push dx
	push si
	push di
	
	xor bx,bx
	mov cx,21
s1:
	;年份
	mov ax,es:[bx+di]
	mov [si],ax
	mov ax,es:[bx+di].2
	mov [si].2,ax
	
	;总收入
	mov ax,es:84[bx+di]
	mov [si].5,ax
	mov dx,es:84[bx+di].2
	mov [si].7,dx
	
	;平均收入
	div word ptr es:168[di]
	mov [si].13,ax
	
	;人数
	mov ax,es:168[di]
	mov [si].10,ax
	
	xor al,al
	;mov [si+0fH],al
	add bx,2
	add di,2
	add si,10H
	loop s1
	
	pop di
	pop si
	pop dx
	pop cx
	pop bx
	pop ax	
ret

;名称:  show_str
;功能:  在指定的位置,用指定的颜色,显示一个用0结尾的字符串
;参数:  (dh)=行号(取值范围0-24),(dl)=列号(取值范围0-79),(cl)=颜色
;  ds:si指向字符串的首地址
;返回:  无
show_str:
	push ax 
	push bx 
	push cx 
	push dx
	push es 
	push si 
	push di 
	mov ax,0b800H 
	mov es,ax 
	mov al,0a0H        ;行长度 
	mul dh
	mov bx,ax        ;行地址
	xor dh,dh 
	mov di,dx 
	add di,dx        ;列地址 
	mov al,cl        ;属性 
do:
	mov cl,[si] 
	mov ch,0
	jcxz enddo
	mov ch,al;属性 
	mov es:[bx][di],cx
	inc si
	add di,2
	jmp short do
enddo:
	pop di
	pop si
	pop es
	pop dx
	pop cx
	pop bx
	pop ax
	ret

;名称:	dtoc
;功能:	将word型数据转变为表示十进制数的字符串,字符串以0为结尾符
;参数:	(ax)=结果的低16位,(dx)=结果的高16位,ds:si指向字符串的首地址
;返回:	无
dtoc:
	push ax
	push cx
	push dx
	push si 
	push di
do1:
	mov cx,10
	call divdw
	;(ax)=结果的低16位,(dx)=结果的高16位,(cx)=余数
	add cx,30H
	mov [si],cl
	inc si
	mov cx,ax
	or cx,dx
	jcxz enddo1
	jmp short do1
enddo1:
	;mov byte ptr [si],0

	mov bp,sp
	mov di,[bp+2]
	mov cx,si
	sub cx,di
	shr cx,1
	jcxz s3
	dec si
s:
	xchg dl,[si]
	xchg dl,[di]
	xchg dl,[si]
	dec si
	inc di
	loop s

s3:
	pop di
	pop si
	pop dx
	pop cx
	pop ax
	ret

;名称:	divdw
;参数:	(ax)=dword型数据的低16位,(dx)=dword型数据的高16位
;	(cx)=除数
;返回:	(ax)=结果的低16位,(dx)=结果的高16位
;	(cx)=余数
divdw:
	push bp
	mov bp,sp
	sub bp,6
	mov [bp],ax
	mov [bp+2],dx
	mov ax,[bp+2]
	xor dx,dx
	div cx
	mov [bp+4],ax
	mov ax,[bp]
	div cx
	mov cx,dx
	mov dx,[bp+4]
	pop bp
	ret
	
code	ends
	end main

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值