+ -
当前位置:首页 → 问答吧 → 初来乍到,关于二进制转换十进制屏幕输出

初来乍到,关于二进制转换十进制屏幕输出

时间:2010-12-06

来源:互联网

assume cs:code ds:data
  data segment
  dw 10 dup(?) ;10字缓冲区
  data ends
 code segment
 start:
  mov ax,data
  mov ds,ax
  mov si,0 ;SI指向缓冲区首地址
  mov ax,'$'
  push ax ;为以后输出字符串做准备
  mov cx,1 ;CX记录入栈次数
  mov ax,1000101011
  mov dx,0 ;ax,dx存放被除数
  mov di,10 ;除数
 S:div di
  add dx,30h
  push dx
  inc cx ;入栈次数+1
  mov dx,0  
  cmp ax,0
  jz over
  jnz s
over:pop [si]
  add si,2
  loop over
  
  mov ah,09h
  int 21h
  mov 4c00h
  int 21h
 code ends
 end start
请问哥哥大大这个程序可以实现么?

作者: z307450494   发布时间: 2010-12-06

理论上不行!

你想显示的是单个个字符(占字节),但 pop [si]出来的都是字,所以到
mov ah,09h
 int 21h
显示的字符串中间“夹”了些其他字符。

作者: shzhfu   发布时间: 2010-12-06

作者: masmaster   发布时间: 2010-12-06

引用 1 楼 shzhfu 的回复:
理论上不行!

你想显示的是单个个字符(占字节),但 pop [si]出来的都是字,所以到
mov ah,09h
int 21h
显示的字符串中间“夹”了些其他字符。

 大哥哥 我这个修改下能用么?

作者: z307450494   发布时间: 2010-12-06

引用 1 楼 shzhfu 的回复:
理论上不行!

你想显示的是单个个字符(占字节),但 pop [si]出来的都是字,所以到
mov ah,09h
int 21h
显示的字符串中间“夹”了些其他字符。

 我不想 把把十进制的数位分开输出 我想一起输出 555 该怎么做?

作者: z307450494   发布时间: 2010-12-06

mov 4c00h
  int 21h

-----------------------
楼主,这样的错误。。。。。
此程序写完之后不要检查N次不要编译排除错误码???

作者: masmaster   发布时间: 2010-12-06

哇哈哈

 瞎了

作者: znxllyuan   发布时间: 2010-12-06

引用 5 楼 masmaster 的回复:
mov 4c00h
int 21h

-----------------------
楼主,这样的错误。。。。。
此程序写完之后不要检查N次不要编译排除错误码???

 圣凡哥哥真是恨铁不成钢哇
 回复怎么那么犀利 那么痛心疾首~

作者: znxllyuan   发布时间: 2010-12-06

over:pop [si]
  add si,2
  loop over
改为
over:pop ax
  mov [si],al
  add si,1
  loop over

另 mov ax,'$' 最好也改为 mov al,'$' (尽管出入栈必须是字)

还有楼上指出的书写错误。

对了,最好自己定义个堆栈段,许多朋友都在此问过因栈太小(或使用默认栈)造成错误的问题。

作者: shzhfu   发布时间: 2010-12-06