转换数字成字符串输出提示溢出,求解
时间:2011-11-15
来源:互联网
Assembly code
代码就是上面的,是书里的内容,一运行就提示溢出,但是我一步一步跟的时候没有提示。
对了,那个show_str是验证过的,之前写的可以得到正确结果。
ds:0也可以看到转换位置后的字符串12666.
assume cs:code data segment db 16 dup(0) data ends stack segment db 32 dup(0) stack ends code segment start: mov ax,data mov ds,ax mov ax,stack mov ss,ax mov ax,12666 mov sp,20H call dtoc mov dh,8 mov dl,3 mov cl,2 mov si,0 call show_str mov ax,0a00H int 21H mov ax,4c00H int 21H dtoc: push ax push bx push dx push ds mov si,0 mov bx,10 OK2: div bx add dx,30H mov ds:[si],dx ;保存余数 mov dx,0 inc si mov cx,ax jcxz dtoc2 ;如果cx为零,跳转 jmp OK2 dtoc2: mov ds:[si],0 mov di,0 dec si mov ax,si mov bl,2 div bl mov cl,al mov ch,0 change: mov al,ds:[di] mov ah,ds:[si] mov ds:[di],ah mov ds:[si],al inc di dec si loop change pop ds pop dx pop bx pop ax ret show_str:push bx push ax push dx push ds push es push si push cx mov ax,0b800H mov es,ax mov al,0a0H mul dh mov bx,ax mov al,dl mov ah,2 mul ah add bx,ax call s pop cx pop si pop es pop ds pop dx pop ax pop bx ret;这里不返回将会出错,用于返回调用show_str的地方 s: push cx mov cl,ds:[si] mov ch,0 jcxz OK pop cx mov al,ds:[si] mov es:[bx],al mov es:[bx+1],cl add bx,2 inc si jmp short s OK: pop cx ret ;返回调用s的地方去 code ends end start
代码就是上面的,是书里的内容,一运行就提示溢出,但是我一步一步跟的时候没有提示。
对了,那个show_str是验证过的,之前写的可以得到正确结果。
ds:0也可以看到转换位置后的字符串12666.

作者: yuanxiaobo007 发布时间: 2011-11-15
直接运行出错,调试时可以,一般是有寄存器没有被正确初始化。你这程序里就是在 dtoc 中 dx 没有被置 0 。因为 div bx 是 DX:AX 除以 BX 的,AX 中是待显示的值,所以 DX 应该置 0 。
作者: zara 发布时间: 2011-11-16
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28