ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

汇编第三版 王爽 课程设计1

2022-04-01 22:01:14  阅读:222  来源: 互联网

标签:课程设计 第三版 mov cx es ax bx ds 王爽



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,345980,590827
    dd 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 21 dup('year summ ne ?? ')
table ends

show segment
	db 20 dup(0)
show ends

code segment

start: 
	;初始化数据
	call copy

	;思路:一行可以显示80个字符 每列中间空10个字符 每列使用10个字符,靠左	左边空10个字符

	mov ax,table
	mov ds,ax

	mov ax,show
	mov es,ax
	
	mov bx,0
	mov dh,3	;打印行
	mov cx,21

	start_s:
		push cx

		;显示年份
		mov cx,2
		start_s1:
			mov ax,ds:[bx]
			mov es:[0],ax
			mov ax,ds:[bx+2]
			mov es:[2],ax
			loop start_s1
		mov es:[4],0
		
		mov dl,10	;列数
		mov cl,2	;字符属性
		call show_str

		;公司总收入
		push dx
		mov ax,ds:[bx+5]
		mov dx,ds:[bx+7]
		call dtoc
		pop dx
	
		mov dl,30	;列数
		mov cl,2	;字符属性
		call show_str

		;员工人数
		push dx
		mov ax,ds:[bx+10]
		mov dx,0
		call dtoc
		pop dx
	
		mov dl,50	;列数
		mov cl,2	;字符属性
		call show_str

		;人均收入
		push dx
		mov ax,ds:[bx+13]
		mov dx,0
		call dtoc
		pop dx
	
		mov dl,70	;列数
		mov cl,2	;字符属性
		call show_str

		inc dh
		add bx,16
		pop cx
		loop start_s
	

    ; mov ax,12345	;数据低位
	; mov dx,1		;数据高位
    ; call dtoc

    ; mov dh,8	;行数
	; mov dl,1	;列数
	; mov cl,2	;字符属性
	; call show_str
    
	mov ax,4c00h
	int 21h

;数字转字符
dtoc:

	push cx
	push si

	mov si,0
    s1:
		mov cx,10      ;除数

		;返回值:dx 结果高16位 
		;		ax 结果低16位 
		;		cx 余数
		call divdw	

		add cx,30H
		push cx		;暂存余数
		inc si

		;判断结果是否为 0
		
        mov cx,dx   ;商为0停止
		jcxz ok1
		jmp short s1
	ok1:mov cx,ax
		jcxz ok2
        jmp short s1

        ok2:
			mov cx,si	;有多少个元素
			mov si,0
		s2:	pop ax
			mov es:[si],ax
			add si,1
			loop s2
			mov es:[si],0

			pop si
			pop cx

            ret
;屏幕打印
show_str:
		push ds
		push es
		push ax
		push bx
		push cx
		push si
		push di

	mov ax,show ;字符打印地址
	mov ds,ax
	mov si,0

	mov ax,0b800h
	mov es,ax
	;找到行位置
	mov al,160
	mov ah,dh
	mul ah
	mov bx,ax

	mov al,2
	mov ah,dl
	mul ah
	mov di,ax
	sub di,2

	mov al,cl
	s:	
		mov cl,ds:[si]
		mov ch,0
		jcxz ok
		mov ah,ds:[si]
		mov es:[bx+di],ah
		mov es:[bx+di+1],al
		add di,2
		inc si
		jmp short s
	ok:	
		pop di
		pop si
		pop cx
		pop bx
		pop ax
		pop es
		pop ds
		
		ret

;通用除法
divdw:
	push bx

    push ax
    mov ax,dx
    mov dx,0
    div cx
    mov bx,ax   ;保存 int(H/N) 被除数高16位 / 除数

    pop ax
    div cx
    mov cx,dx
    mov dx,bx   ;结果高位

	pop bx

    ret

;数据初始化
copy:
	;ds指向数据段
	mov ax,data
	mov ds,ax
	;es指向table段
	mov ax,table
	mov es,ax

	mov cx,21
	mov di,0
	mov si,0
	mov bx,0
	copy_s:	;年份1
		mov ax,ds:[di]
		mov es:[bx],ax
		;收入1
		mov ax,ds:[di+84]
		mov es:[bx+5],ax
		;雇员数
		mov ax,ds:[si+168]
		mov es:[bx+10],ax

		add si,2
		add di,2
		;年份2
		mov ax,ds:[di]
		mov es:[bx+2],ax	
		;收入2
		mov ax,ds:[di+84]
		mov es:[bx+7],ax
		;计算人均收入
		mov ax,es:[bx+5]
		mov dx,es:[bx+7]
		mov bp,es:[bx+10]
		div bp
		mov es:[bx+13],ax

		add di,2
		add bx,16
		loop copy_s
	ret

code ends
end start

标签:课程设计,第三版,mov,cx,es,ax,bx,ds,王爽
来源: https://www.cnblogs.com/wujie-code/p/16089290.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有