. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->CALL和RET指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  第十章实验3 数值显示  [待解决] 回复[ 1次 ]   点击[ 295次 ]  
dela2000
[帖 主]   [ 发表时间:2012-12-05 23:56 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-06-19 00:22
dtoc子程序
应用举例:12666转变为以十进制数的字符串,字符串以0为结尾符
遇到的困难点:转化后为66621的字符串了,我想用压栈的方式将其逆序,程序如下,当还是为66621,请大家帮忙看下什么问题。

ssume cs:code


data segment

 db 10 dup(0)

data ends


code segment

 start:mov ax,12666
       mov bx,data
       mov ds,bx
       mov si,0
       call dtoc

       mov dh,8
       mov dl,3
       mov cl,2
       call show_str

       mov ax,4c00h
       int 21h

dtoc:  push bx
       push dx
       push cx
       push ax
       push si
       push di
       

   s1: mov bx,10
       mov dx,0

       div bx
       mov cx,ax
       add dl,30h
       mov [si],dl
       inc si
       jcxz ok1

       jmp short s1


       ok1: mov cx,si
            mov bx,cx
       ok3: mov si,0
            push [si]
            add si,2
            loop ok3

            mov cx,bx
       ok4: mov si,0
            pop [si]
            add si,2
            loop ok4

            pop di
            pop si
            pop ax
            pop cx
            pop dx
            pop bx
            ret
sbjcm33
[第1楼]   [ 回复时间:2012-12-06 23:58 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-11-13 22:06
两个错误:1.ok3和ok4两处循环不应该把mov si,0也包括在循环里。
          2.        add dl,30h 
                     mov [si],dl 这里复制到数据段中是以字节为单位复制的,而后面出栈和进栈却是以字为单位。这样肯定达不到你要的效果。
最后说一点,你没有定义栈段。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved