mov cl,00000111b call show_str
pop cx ;这两段输出平均收入
add si,4 add bx,2 inc dh inc ax
loop so ;循环21次,增加参数
mov ax,4c00h int 21h ;名称:ice
;功能:在ds:si开始,以“数据”“0”的格式用新数据替换旧数据(即年份字符串) ;参数:(ax)=word型的数据,es:si指向字符串的首地址 ;返回:无
;说明:把字符串的年份转化为word型数据,并以0结尾,方便dtoc1函数的调用 ice:push bx mov ds:[si],ax mov bx,0 mov ds:[si+2],bx pop bx ret ;名称:dtoc1
;功能:将一个word型数转化为字符串,数应不大于65535 ;参数:(ax)=word型的数据,es:si指向字符串的首地址 ;返回:es:[si]放此字符串,以0结尾
;说明:因为ds放了数据段,为免混淆,把字符串放在es里,下面的函数也相同 dtoc1:push cx push bx push dx mov dx,0 push di push si mov di,0 cir1:mov cx,10 div cx add dx,30h mov bx,dx push bx inc di mov dx,0 mov cx,ax jcxz ow jmp short cir1 ow:mov cx,di s:pop bx mov es:[si],bx
inc si loop s pop si pop di pop dx pop bx pop cx ret ;名称:dtoc2
;功能:将一个dword型数转化为字符串,数不应大于FFFFFFFFFFFFFFFF ;参数:(ax)=dword型的数据的低16位,(dx)=dword型的数据的高16位,es:si指向字符串的首地址
;返回:es:[si]放此字符串,以0结尾 dtoc2:push cx push bx push si push di mov di,0 cir2:mov cx,10 call divdw add cx,30h mov bx,cx push bx inc di
mov bx,dx add bx,ax mov cx,bx jcxz ox jmp short cir2 ox:mov cx,di s8:pop bx mov es:[si],bx inc si loop s8 pop di pop si pop bx pop cx ret ;名称:divdw
;功能:除法,被除数32位,除数16位,商32位,余数16位,不会溢出 ;参数:(dx)=被除数高16位,(ax)=被除数低16位,(cx)=除数 ;返回:(dx)=商高16位,(ax)=商低16位,(cx)=余数 divdw: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 ret ;名称:show_str
;功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串
;参数:(dh)=行号(1~25),(dl)=列号(1~80),(cl)=颜色,es:si指向字符串的首地址 ;返回:无 show_str:push di push si mov di,0 push ax push dx dec dh
dec dl ;这里采用习惯上的叫法,放在显示缓冲区最开头就是1行1列
mov al,160 ;1行80个字符,一个字符2个字节 mul dh
add dl,dl ;一个字符2个字节 mov dh,0