. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->CALL和RET指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  求解答啊求解答!!!编译连接都通过了,没有任何问题,但是运行的时候会出现这种提示。。。程序代码如下  [待解决] 回复[ 0次 ]   点击[ 260次 ]  
assemblyeaten
[帖 主]   [ 发表时间:2013-05-31 16:20 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2013-05-11 10:43
assume cs:code
data segment
db 10 dup (0)
data ends

stack segment
dw 320 dup (0)
stack ends

code segment
main:mov ax,stack
         mov ss,ax
         mov sp,640
         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 si
        push dx
        push cx
        push bx
        push ax

        mov bx,10
   s0:mov dx,0
        div bx
        add dl,30
        mov ds:[si],dl  ;该指令和上一条指令其实可以删掉的,因为我这段设计的目的是计算出AX寄存器                            中十进制数的位数,记录在SI中。因为现在执行的结果是data:00:36 36 36                        32 31,如果输出在屏幕上字符串会是“66621”。
        mov cx,ax
        jcxz ok0
        inc si
        jmp short s0
 ok0:inc si             ;执行后获得ax数值十进制的位数,目的是作为循环次数使用。
      mov byte ptr [si],0
      mov cx,si
      mov bx,10
      pop ax
      push ax
s1: dec si
      mov dx,0
      div bx
      add dx,30
      mov ds:[si],dl
      loop s1         ;该循环体的作用是调整DATA:0000处的字符串ASCII码顺序为"12666”。

      pop ax
      pop bx
      pop cx
      pop dx
      pop si
      ret

show_str:push ax
         push es
         mov ah,0
         mov al,160
         mul dh
         add dl,dl
         sub dl,2
         mov dh,0
         add ax,dx
         mov di,ax
         mov ax,0B800H
         mov es,ax
    s2:mov al,ds:[si]
         push cx
         mov ch,0
         mov cl,al
         jcxz ok1
         mov es:[di],al
         inc di
         pop cx
         mov es:[di],cl
         inc di
         inc si
         jmp near ptr s2
  ok1:pop es
         pop ax
         ret
code ends
end main
说明:show_str子程序已经在实验10(2)中具体应用过,而且程序正常运行,没用问题。

程序编译和连接都没有任何问题,但是运行程序的时候会提示“ntvdm cpu 遇到无效的指令 CS:...,IP:... OP.....”以前也遇到过这种问题,在网上查了,说是栈空间不够,所以我就修改了栈段的定义,问题解决了,但是这一次却不行,求大神能帮忙解答一下!!!这是什么问题造成的,应该如何解决?
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved