首页 > 代码库 > 汇编课程设计
汇编课程设计
assume cs:codesg,ss:stackdata 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个字符串 dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514 dd 245980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000 ;以上是表示21年公司总收入的21个dword型数据 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型数据data endstable segment db 21 dup (‘year summ ne ?? ‘)table endsstack segment dw 32 dup (0)stack endsbuffer segment db 32 dup (0)buffer endscodesg segmentstart: mov ax,data mov ds,ax mov di,0 mov si,4*21+4*21 ;指向员工 mov ax,table mov es,ax ;es存表 mov bx,0 call finishing ;将data段格式化到es段了 mov ax,stack mov ss,ax mov sp,64 mov ax,buffer ;数据缓冲区,接受转换后的每一个字符 mov ds,ax mov si,0 ;ds:si指向缓冲区 mov ax,table mov es,ax mov bx,0 ;ex:bx指向table mov dh,5 ;第一行 mov cx,21 s: push cx mov ax,es:[bx] mov ds:[si],ax mov ax,es:[bx+2] mov ds:[si+2],ax ;向缓冲区中写入一条年信息 mov byte ptr ds:[si+4],0 mov dl,20 ;显示年份 mov cl,2 call show_str push dx mov ax,es:[bx+5] ;读取一条总收入信息 mov dx,es:[bx+7] call dtoc ;调用dtoc将数值转换成字符串到缓冲区中 pop dx mov dl,30 ;显示员工 call show_str push dx mov ax,es:[bx+0ah] ;读取一条总人数信息 mov dx,0 call dtoc ;调用dtoc将数值转换成字符串到buffer中 pop dx mov dl,40 ;显示字符串 call show_str push dx mov ax,es:[bx+0dh] ;读取一条人均收入信息 mov dx,0 call dtoc ;调用dtoc将数值转换成字符串到buffer中 pop dx mov dl,50 ;显示字符串 call show_str add dh,2 ;每隔一行打印一条数据 add bx,10h ;让es:bx指向table的下一行数据 pop cx loop s mov ax,4c00h int 21hdtoc: push ax push bx push cx push dx push bp push si mov bp,0 dtoc_s0: mov cx,10d call divdw push cx inc bp mov cx,ax ;除到商为0为止 inc cx loop dtoc_s0 mov cx,bp dtoc_s: pop bx add bl,30h mov ds:[si],bl inc si loop dtoc_s mov byte ptr ds:[si],0 pop si pop bp pop dx pop cx pop bx pop ax retdivdw: ;子程序定义开始 push bx push ax mov ax,dx mov dx,0 div cx mov bx,ax pop ax div cx mov cx,dx mov dx,bx pop bx retshow_str: push ax push bx push cx push dx push es push bp push si mov ax,0b800H mov es,ax mov al,80*2 ;一行160个字节 mul dh ;刚开始是第五行;高位是行,低位是列 mov dh,0 add ax,dx ;列数*2 add ax,dx mov bp,ax mov al,cl ;颜色 mov cx,0 mov cl,ds:[si] ;ds:[si]为缓冲区指针 inc si show_str_s: mov es:[bp],cl ;低位ascii inc bp mov es:[bp],al ;高位属性 inc bp mov cl,ds:[si] ;如果这个字节是0,退出循环 inc si inc cx loop show_str_s pop si pop bp pop es pop dx pop cx pop bx pop ax retfinishing: push ax push bx push cx push di push si push bp mov cx,21 finishing_s: ;填充时间 mov ax,ds:[di] mov es:[bx],ax mov ax,ds:[di+2] mov es:[bx+2],ax ;填充收入,收入是双字节的 mov ax,ds:[di+4*21] mov dx,ds:[di+4*21+2] ;高位 mov es:[bx+5],ax mov es:[bx+5+2],dx ;填充人数 mov bp,ds:[si] mov es:[bx+0aH],bp ;填充人均收入 div bp mov es:[bx+0dH],ax add bx,16 ;table换一行 add di,4 ;年份换一个 add si,2 ;员工修改两个字节 loop finishing_s pop bp pop si pop di pop cx pop bx pop ax retcodesg endsend start
汇编课程设计
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。