2014-06-30 43 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容器中找到。 –