注册 登录
编程论坛 汇编论坛

用汇编写了个小程序,结果却是ntvdm cpu 遇到无效的指令,怎么解决???急!!!!!

遗LOVE忘 发布于 2012-12-17 18:50, 828 次点击
code segment
main proc far
    assume cs:code
     call SKIPLINES
    main endp
   
SKIPLINES proc near
      mov ax,5
A:
      mov dl,0dh
      mov ah,2
      int 21h
      mov dl,0ah
      mov ah,2
      int 21h
      dec ax
      jnz A
      ret
     SKIPLINES endp
code ends
    end main
   
8 回复
#2
x64asm2012-12-17 19:32
你在保护模式下竟然尝试调用DOS中断,如何能够成功?
#3
遗LOVE忘2012-12-17 19:37
回复 2楼 x64asm
额,我只是个初学者,对你说的不是很懂,能说的详细点吗??或者说怎么改呢?
#4
x64asm2012-12-17 20:14
对不起,本坛禁止各种作业,请您GOOGLE搜索之。
#5
遗LOVE忘2012-12-17 20:47
回复 4楼 x64asm
......这不是作业,郁闷了!!!!
#6
wp2319572012-12-18 06:55
这个程序是典型的16位汇编代码

需要楼主在纯dos环境下、才有可能调试成功
#7
朱三哥2012-12-20 03:04
程序代码:
code segment
main proc far
    assume cs:code
     call SKIPLINES     
     -----------------------------------------------------  >这个地方请增加子程序返回 功能 ret 这个是错误一      再这里请同学再次的学习下子程序设计部分的知识点
                                                             你的代码段绑定在子程序里面   你没有程序入口 这个是第二个错误
                                                               main endp
   
SKIPLINES proc near
      mov ax,5
A:
      mov dl,0dh
      mov ah,2
      int 21h
      mov dl,0ah
      mov ah,2
      int 21h
      dec ax
      jnz A
      ret
     SKIPLINES endp
code ends
    end main   ----------------------》这个地方的 end main   这个地方的end 后面跟着的是个标号   代表程序的开始的地方 也就是相当于指定程序执行的入口作用
                                       而你这个地方却是个子程序的名字,这个是语法错误部分
   还请同学 从汇编语言编写框架开始 再次的学习下,模仿着写程序,您这个程序真心不知道您想干什么,糟糕透了,从这个程序来看,您连最基本的16位汇编门槛都没走进来


16位汇编的  掌握好程序的编写规范 是很重要的,程序的编写规范是由编译器来指定的,所有您只有适应编译器的份,捏出这么个 自己脑袋里想出来的规则,在这问我错在哪了,是来找打的,只能说明您的学习态度很成问题,您一点编程基础都木有  就开始学汇编,会出人命的
还请学习C语言后 在折返回来学习汇编  这样对您会造成更小的信心打击


以上言辞是根据您发出来的代码 折射出的问题 该有的批评




[ 本帖最后由 朱三哥 于 2012-12-20 03:09 编辑 ]
#8
x64asm2012-12-20 20:18
以下是引用遗LOVE忘在2012-12-17 20:47:43的发言:

......这不是作业,郁闷了!!!!


不到十行代码就跑到坛子兴师动众的问,即使学过一天汇编的人也不至于如此罢,分明是作业狂人耳。
#9
suijishu2012-12-20 21:44
以下是引用x64asm在2012-12-17 19:32:28的发言:

你在保护模式下竟然尝试调用DOS中断,如何能够成功?
你错了,他在控制台下虚拟的,没有问题
1