王爽 汇编语言 实验十 课程设计1
2010-12-28 21:11
706 查看
assume cs:code code segment 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' ;以上是表示21年的字符串 4 * 21 = 84 dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514 dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000 ;以上是表示21年公司总收入的dword型数据 4 * 21 = 84 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型数据 2 * 21 = 42 data ends datads segment db 100 dup(0) datads ends start: mov bx , data mov es , bx mov bx , datads mov ds , bx mov cx , 21 mov dh , 2 mov si , 0 mov bx , 0 ;year mov di , 0;income mov bp , 0;num s: ;-----------years---------------------- mov dl , 3 mov word ptr ds:[0] , 0;ds:si段使用过的要清零 mov word ptr ds:[2] , 0 mov word ptr ds:[4] , 0 mov ax , es:[bx] mov ds:[0] , ax mov ax , es:[bx+2] mov ds:[2] , ax push cx mov cx , 4 call show_str pop cx ;-----------income--------------------- add dl , 10 push dx;dtocex时要使用dx做高位,保护 mov word ptr ds:[0] , 0 mov word ptr ds:[2] , 0 mov word ptr ds:[4] , 0 mov ax , es:[84+di] mov dx , es:[86+di] call dtocex pop dx push cx mov cx , 4 call show_str pop cx ;-----------num------------------------- add dl , 10 push dx mov word ptr ds:[0] , 0 mov word ptr ds:[2] , 0 mov word ptr ds:[4] , 0 mov ax , es:[168+bp] call dtoc pop dx push cx mov cx , 4 call show_str pop cx ;----------------aver--------------------- add dl , 10 push dx mov word ptr ds:[0] , 0 mov word ptr ds:[2] , 0 mov word ptr ds:[4] , 0 mov ax , es:[di+84] mov dx , es:[di+86] div word ptr es:[bp+168] call dtoc pop dx push cx mov cx , 4 call show_str pop cx ;-------------------------------------- add bx , 4 add di , 4 add bp , 2 inc dh dec cx cmp cx , 0 jne s_help mov ax , 4c00h int 21h s_help: jmp far ptr s ;名称:dtocex ;功能:将dword型数据转变为表示十进制的字符串,字符串以0为结尾符。 ;参数:(ax)=dword型数据的低16位,(dx)=dword型数据的高16位,ds:si指向字符串的首地址 ;返回:无 dtocex: dataseg_dtocex segment db 100 dup(0) ;存放参数和寄存器值 db 100 dup(0) ;存放结果和中间变量 dataseg_dtocex ends push bx push es push di push cx mov bx , dataseg_dtocex mov es , bx mov es:[0] , ax mov es:[2] , ds mov es:[4] , si mov es:[6] , dx mov di , 0 mov ax , es:[0] dtocex_s: mov cx , 10 call divdw;dx:ax / cx = dx:ax~cx add cl , 30h mov byte ptr es:[100+di] ,cl inc di cmp dx , 0 je dxisz jmp dtocex_s dxisz: cmp ax , 0 jne dtocex_s mov cx , di mov ds , es:[2] mov si , es:[4] dtocex_reverse: mov bl , es:[99+di] mov ds:[si] , bl inc si dec di loop dtocex_reverse mov byte ptr ds:[si] , 0 mov ds , es:[2] mov si , es:[4] pop cx pop di pop es pop bx ret ;名称:divdw ;功能:进行不会溢出的除法运算,被除数为dword型,除数为word型,结果为dword型 ;参数:(ax)=dword型数据的低16位,(dx)=dword型数据的高16位,(cx)=除数 ;返回:(dx)=结果的高16位,(ax)=结果的低16位,(cx)=余数 divdw: dataseg_divdw segment db 100 dup(0) ;存放参数 db 100 dup(0) ;存放结果和中间变量 dataseg_divdw ends push bx push es mov bx , dataseg_divdw mov es , bx mov es:[0] , ax ;L mov es:[2] , dx ;H mov es:[4] , cx ;N mov dx , 0 mov ax , es:[2] div word ptr es:[4] mov es:[100] , ax ;结果dx mov ax , es:[0] div word ptr es:[4] mov es:[102] , ax ;结果ax mov es:[104] , dx ;结果cx mov dx , es:[100] mov cx , es:[104] pop bx pop es ret ;名称:show_str ;功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串 ;参数:(dh)=行号(取值范围0~24),(dl)=列号(取值范围0~79),(cl)=颜色,ds:si指向字符串的首地址 ;返回:无 show_str: push ax push bx push cx push dx push si push bp push di push es mov al , dh;行号 add al , 1 mov bl , 0a0h mul bl mov dh , 0 sub dx , 1; add dx , dx;因为一个字符占两个字节 add ax , dx;把dl中的列号加在ax中 mov di , ax;di放屏幕显示的初始位置 mov ah , cl;ax 要显示的字符和颜色 mov ch , 0;cx 确定循环的条件 mov bx , 0b800h mov es , bx;es显示的地址 mov bp , 0;显示地址的游标 s_showstr: mov cl , ds:[si] mov al , ds:[si] jcxz retseg mov es:[di+bp] , ax inc si add bp , 2 loop s_showstr retseg: pop es pop di pop bp pop si pop dx pop cx pop bx pop ax ret ;名称:dtoc ;功能:将word型数据转变为表示十进制的字符串,字符串以0为结尾符。 ;参数:(ax)=word型数据,ds:si指向字符串的首地址 ;返回:无 dtoc: dataseg_dtoc segment db 100 dup(0) ;存放参数和寄存器值 db 100 dup(0) ;存放结果和中间变量 dataseg_dtoc ends push bx push es push dx push cx push di mov bx , dataseg_dtoc mov es , bx mov es:[0] , ax mov es:[2] , ds mov es:[4] , si mov bx , 10 mov di , 0 mov ax , es:[0] dtocs: mov dx , 0 div bx mov cx , ax add dl , 30h mov byte ptr es:[100+di] ,dl inc di jcxz getCount mov cx , 2 ; 当商为1的时候cx-- , 就为1了,就会跳出循环 loop dtocs getCount: mov cx , di mov ds , es:[2] mov si , es:[4] dtocreverse: mov bl , es:[99+di] mov ds:[si] , bl inc si dec di loop dtocreverse mov byte ptr ds:[si] , 0 mov ds , es:[2] mov si , es:[4] pop di pop cx pop dx pop es pop bx ret code ends end start
相关文章推荐
- 8086汇编学习小记-王爽汇编语言课程实验15及课程设计2的DOS环境
- 王爽汇编语言课程设计一
- 王爽汇编语言课程设计2
- 王爽汇编语言课程设计1
- 王爽汇编语言课程设计2
- 汇编语言王爽课程设计二
- 王爽汇编语言课程设计2
- 汇编语言(王爽)--课程设计一
- 王爽汇编语言课程设计1
- 王爽汇编语言课程设计1
- 王爽汇编语言课程设计1
- 王爽-汇编语言 课程设计1 汇编源代码
- 王爽--------汇编语言 课程设计2
- 汇编语言(王爽) 课程设计1
- 汇编语言 王爽(第三版)课程设计一
- 王爽 汇编语言 实验十 汇编子程序设计
- 王爽汇编语言课程设计1
- 王爽 汇编语言 课程设计1
- 王爽 -- 汇编语言课程设计2一些问题记录
- 王爽 汇编语言 课程设计1 独立完成