Killer哥 Killer哥
。。。。。。。。
关注数: 13 粉丝数: 36 发帖数: 963 关注贴吧数: 21
调试弹出这个,大湿们知道啥回事吗? 刚学的汇编,写了个简单程序,调试到这一步会弹这个,代码应该也没错,按close或ignore调试都会结束,求大湿指点下!!! 贴上源码。。 assume cs:code stack segment dw 8 dup(0) stack ends data segment dw 8 dup(0) data ends code segment start: mov ax,68h mov dx,0 mov bx,data mov ds,bx mov si,0 mov bx,stack mov ss,bx mov sp,16 call dtoc mov ax,4c00h int 21h ;子程序描述 ;功能:将dword型数据转变为表示十六进制数的字符串,字符串以0为结尾符。 ;参数:(ax)=dword型数据的低16位 ; (dx)=dword型数据的高16位 ;ds:si指向字符串的首地址 ;返回:无 ;通过循环用10除dword型数据,记下每次的余数,得到每位的值,用每位的值+30h则得到表示dword数据的ASCLL码串。 dtoc: push si push ax push bx push dx ;用dword进行除法计算防止溢出 push cx ;先将数据入栈,然后再输出到数据段,使数据倒过来存放,先使0入栈,标记结束 sub bx,bx push bx translate: mov cx,10 ;用cx存储10 call divdw ;调用divdw函数可解决dword型数据除法溢出问题 ;mov cx,dx ;将(dx)赋给cx用来判断是否全部转换完 jcxz OutData ;word数据转换完毕后则以倒序输出到数据段中 add cx,30h ;余数+30h push cx jmp translate OutData: pop cx ;以倒序取出已转换成字符的word数据,若不是结束标记0,则输出到数据段中 jcxz ok1 mov [si],cx ;将转换好的数据存入数据段 inc si ;指向数据段中的下一位 jmp OutData ok1: pop cx pop dx pop di pop bx pop si ret ;子程序描述 ;进行不会产生溢出的除法去处,被除数为dword型,除数为word型,结果为dword型。 ;公式:X/N=int(H/N)*65536+(rem(H/N)*65536+L)/N ;(ax)=dword型数据的低16位 ;(dx)=dword型数据的高16位 ;(cx)=除数 divdw: push si ;保存高位dx*65536/cx的商 push di ;保存高位dx*65536/cx的余数 ;int(H/N) push ax mov ax,dx ;用ax暂存dx,dx/cx = ax/cx*65536为的值 mov dx,0 ;置高位为0 div cx mov si,ax ;保存商 mov di,dx ;保存余数 ;(rem(H/N)*65536+L)/N mov dx,di pop ax div cx mov cx,dx ;用cx返回余数 mov dx,si ;设置返回(dx)为结果的高位 pop di pop si ret code ends end start
1 下一页