赞
踩
assume cs:codesg stacksg segment dw 16 dup(0) stacksg ends datasg segment db 10 dup (0) datasg ends codesg segment start: mov ax,stacksg mov ss,ax mov sp,32 mov ax,datasg mov ds,ax mov si,0 mov ax,12666 mov dx,0 call dtoc mov dh,8 mov dl,3 mov cl,2 call show_str mov ax,4c00h int 21h ;名称:dtoc ;功能:将word型数据转变为表示十进制的字符串,字符串以0结尾符 ;参数:(ax)=dword型数据的低16位,(dx)=dword型数据的高16位 ; ds:si指向字符串的首地址 ;返回:无 dtoc: push ax push bx push cx push dx push si mov bx,0 ;用计数 dtoc_s: mov cx,10 call divdw ;返回:(dx)=结果的高16位,(ax)=结果的低16位 ;(cx)=余数 add cx,30h ;转换为对于的ascii码 push cx ;余数入栈 inc bx mov cx,dx ;判断结果的高16位是否为0 jcxz dtoc_s0 jmp short dtoc_s ;不为零继续进行除法运算 dtoc_s0:mov cx,ax ;判断结果的低16位是否为0 jcxz dtoc_s1 jmp short dtoc_s ;不为零继续进行除法运算 dtoc_s1: mov cx,bx dtoc_s2: pop ax mov [si],al inc si loop dtoc_s2 pop si pop dx pop cx pop bx pop ax ret ;名称:show_str ;功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串 ;参数:(dh)=行号(取值范围1~25),(dl)=列号(取值范围1-80), ; (cl)=颜色,ds:si指向字符串的首地址 ;返回:无 show_str: push ax push bx push cx push dx push es push di mov ax,0b800h mov es,ax sub dh,1 mov al,dh mov ah,160 mul ah mov bx,ax ;bx=((dh)-1)*160 sub dl,1 mov al,dl mov ah,2 mul ah add bx,ax ;bx=((dh)-1)*160+((dl)-1)*2 mov di,bx ;计算出的显示的位置 mov al,cl ;al=cl 要设置显示的颜色 show_str_s: mov cl,[si] mov ch,0 jcxz show_str_ok ;判断读取的字符是否为0,等于0结束,不等于0显示当前字符 mov ah,[si] mov es:[bx],ah ;设置显示的字符 mov es:[bx+1],al ;设置显示的颜色 inc si ;读取下一个字符 add bx,2 ;指向下一个字符显示的位置 jmp short show_str_s show_str_ok: pop di pop es pop dx pop cx pop bx pop ax ret ;名称:divdw ;功能:进行不会产生溢出的出发运算,被除数为dword型,除数为word型,结果为dword ;参数:(ax)=dword型数据的低16位 ; (dx)=dword型数据的高16位 ; (cx)=除数 ;返回:(dx)=结果的高16位,(ax)=结果的低16位 ; (cx)=余数 divdw: push bx mov bx,ax ;bx=L mov ax,dx ;ax=H mov dx,0 ;dx=0作为高16位 div cx push ax ;int(H/N)*65536入栈 mov ax,bx ;ax=L ;dx 余数作为高16位 div cx mov cx,dx ;余数 pop dx ;结果的高16位 pop bx ret codesg ends end start
assume cs:codesg stacksg segment dw 16 dup(0) stacksg ends datasg segment db 10 dup (0) datasg ends datasg2 segment dw 123,12666,1,8,3,38 datasg2 ends codesg segment start: mov ax,stacksg mov ss,ax mov sp,32 mov ax,datasg mov ds,ax mov si,0 mov ax,datasg2 mov es,ax mov di,0 mov bl,2 mov cx,6 start_s:push cx mov ax,es:[di] mov dx,0 call dtoc mov dh,bl mov dl,3 mov cl,2 call show_str inc bl add di,2 pop cx loop start_s mov ax,4c00h int 21h ;名称:dtoc ;功能:将word型数据转变为表示十进制的字符串,字符串以0结尾符 ;参数:(ax)=dword型数据的低16位,(dx)=dword型数据的高16位 ; ds:si指向字符串的首地址 ;返回:无 dtoc: push ax push bx push cx push dx push si mov bx,0 ;用计数 dtoc_s: mov cx,10 call divdw ;返回:(dx)=结果的高16位,(ax)=结果的低16位 ;(cx)=余数 add cx,30h ;转换为对于的ascii码 push cx ;余数入栈 inc bx mov cx,dx ;判断结果的高16位是否为0 jcxz dtoc_s0 jmp short dtoc_s ;不为零继续进行除法运算 dtoc_s0:mov cx,ax ;判断结果的低16位是否为0 jcxz dtoc_s1 jmp short dtoc_s ;不为零继续进行除法运算 dtoc_s1: mov cx,bx dtoc_s2: pop ax mov [si],al inc si loop dtoc_s2 inc si mov al,0 mov [si],al ;最后加个0作为结尾 pop si pop dx pop cx pop bx pop ax ret ;名称:show_str ;功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串 ;参数:(dh)=行号(取值范围1~25),(dl)=列号(取值范围1-80), ; (cl)=颜色,ds:si指向字符串的首地址 ;返回:无 show_str: push ax push bx push cx push dx push es push di mov ax,0b800h mov es,ax sub dh,1 mov al,dh mov ah,160 mul ah mov bx,ax ;bx=((dh)-1)*160 sub dl,1 mov al,dl mov ah,2 mul ah add bx,ax ;bx=((dh)-1)*160+((dl)-1)*2 mov di,bx ;计算出的显示的位置 mov al,cl ;al=cl 要设置显示的颜色 show_str_s: mov cl,[si] mov ch,0 jcxz show_str_ok ;判断读取的字符是否为0,等于0结束,不等于0显示当前字符 mov ah,[si] mov es:[bx],ah ;设置显示的字符 mov es:[bx+1],al ;设置显示的颜色 inc si ;读取下一个字符 add bx,2 ;指向下一个字符显示的位置 jmp short show_str_s show_str_ok: pop di pop es pop dx pop cx pop bx pop ax ret ;名称:divdw ;功能:进行不会产生溢出的出发运算,被除数为dword型,除数为word型,结果为dword ;参数:(ax)=dword型数据的低16位 ; (dx)=dword型数据的高16位 ; (cx)=除数 ;返回:(dx)=结果的高16位,(ax)=结果的低16位 ; (cx)=余数 divdw: push bx mov bx,ax ;bx=L mov ax,dx ;ax=H mov dx,0 ;dx=0作为高16位 div cx push ax ;int(H/N)*65536入栈 mov ax,bx ;ax=L ;dx 余数作为高16位 div cx mov cx,dx ;余数 pop dx ;结果的高16位 pop bx ret codesg ends end start
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。