2014-06-30 42 views
-1

任何人都可以帮我解决这个问题吗?运行时错误汇编中的非法指令

我需要创建一个asm程序,它将接受用户确定的名称,并询问用户他是否确定他输入的名称,然后用户将选择y/n。如果用户输入y,则程序将打印该消息,然后您可能是chris +用户姓氏,如果他输入n,程序将跳回并再次询问姓氏。如果他输入的不是yn,程序会跳回来询问“你确定吗?”

当我运行该程序时,我遇到了一个错误。这里是我的代码:

.model small 
.stack 64h 
.data 
    msg01 db 13, 10, "What is your surename?: ", "$" 
    msg02 db 13, 10, "Are you sure? y/n", "$" 
    msg03 db 13, 10, "Then you must be chris ", "$" 

    nameinput label byte 
    maxnamelen db 20 
    curnamelen db ? 
    namefield db 20 dup(?) 

.code 
    start: 
      mov ax, @data 
      mov ds, ax 

    inputsurename: 
      mov ax, 09h 
      mov dx, offset msg01 
      int 21h 

      mov ah, 0ah 
      mov dx, offset nameinput 
      int 21h 

      mov bx, 0 
      mov bl, curnamelen 
      mov namefield [bx], "$" 


    inputchoice: 

      mov ax, 09h 
      mov dx, offset msg02 
      int 21h 

      mov ah, 1 
      int 21h 

      cmp al, 'n' 
      je inputsurename 

      cmp al, 'y' 
      jne inputchoice 

    printname: 
      mov ah, 09h 
      mov dx, offset msg03 
      int 21h 

      mov ah, 09h 
      mov dx, offset namefield 
      int 21h 

      mov ah, 4ch 
      int 21h 

    end start 
+0

您的问题缺少一些重要信息。例如,你在运行这个程序是什么? DOSBox中?一台有DOS的旧电脑..?当你遇到错误时,你提供了什么样的输入,如果有的话? – Michael

回答

0

这两个mov ax, 09h是错的。该指令使AL为09h,AH为00h。但对于int 21h/09h您需要AH = 09h。所以将其更改为mov ah, 09h

+0

嗨,非常感谢你。我只是不知道这两者之间有什么区别,因为我认为它们是同一个累加器。他们教我们如何使用asm进行编程,但是我对机器有一点了解......不知何故,我知道这些方法,但我不知道这些问题。 – user3790756

+0

有关许多特定函数调用的简短描述可以在Ralf Browns x86/MSDOS中断列表(RBIL)的一些zip容器中找到。 –