运行时错误汇编中的非法指令

时间:2014-06-30 15:03:44

标签: assembly x86

任何人都可以帮我解决这个问题吗?

我需要创建一个接受用户确定名称的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

1 个答案:

答案 0 :(得分:0)

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