assembly 装配档案盒计算器“操作数类型不匹配错误”

kxe2p93d  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(129)

大家好,我试图知道如果给我的测试代码是正确的,或者如果我没有正确下载我的dosbox. The error says“Operand types do not match”这个代码是由我们的在线类instructor给我们测试,如果我们正确下载dosbox.他一直说,他给的代码没有什么问题,请帮助我. Here's the code.

.model small
.stack 100h

.data
    num1 dw ?
    num2 dw ?
    result dw ?
    operator db ?
    msg db 0Dh, 0Ah, "Input your first number: $"
    msg2 db 0Dh, 0Ah, "Input your second number: $"
    msg3 db 0Dh, 0Ah, "Input the operator (+, -, *, /): $"
    msg4 db 0Dh, 0Ah, "Result: $"

.code
    mov ax, @data
    mov ds, ax

    ; Input your first number
    mov ah, 09h
    lea dx, msg
    int 21h

    mov ah, 01h
    int 21h
    sub al, '0'
    mov num1, ax

    ; Input your second number
    lea dx, msg2
    int 21h

    mov ah, 01h
    int 21h
    sub al, '0'
    mov num2, ax

    ; Input your operator
    lea dx, msg3
    int 21h

    mov ah, 01h
    int 21h
    mov operator, al

    ; Perform arithmetic operation
    cmp operator, '+'
    je addition
    cmp operator, '-'
    je subtraction
    cmp operator, '*'
    je multiplication
    cmp operator, '/'
    je division

    ; Display error message for invalid operator
    mov ah, 09h
    lea dx, msg4
    int 21h

    mov ax, 4C00h
    int 21h

addition:
    mov ax, num1
    add ax, num2
    mov result, ax
    jmp display_result

subtraction:
    mov ax, num1
    sub ax, num2
    mov result, ax
    jmp display_result

multiplication:
    mov ax, num1
    mul num2
    mov result, ax
    jmp display_result

division:
    mov ax, num1
    mov bx, num2
    xor dx, dx
    div bx
    mov result, ax
    jmp display_result

display_result:
    mov ah, 02h
    mov dl, result
    add dl, '0'
    int 21h

    mov ax, 4C00h
    int 21h
    
end

字符串
我试过配置东西,但因为这是我第一次使用汇编,我还不知道从哪里开始。

j2qf4p5b

j2qf4p5b1#

您的“操作数类型不匹配”错误是一个汇编时错误。
mov dl, result指令中,目标操作数(DL)的大小为8位,与源操作数(result)的大小(16位)不匹配。TASM将检测到这一点,您无法运行程序。
应用更正后,运行程序将显示运行时错误。

  • 你忘记指定mov ah, 09h来打印消息 msg2msg3
  • 如果用户确实提供了有效的运算符,则不会打印消息 msg4(仅当用户键入无效字符时才会显示“Result:”)
  • 您的计算结果将关闭,因为 num1num2 上的高位字节将不是0而是1(来自mov ah, 01h中的DOS函数编号)

如果您确实想要一个个位数的结果,请确保只输入您知道会导致个位数结果的数字。
对于一般情况(包括例如9 * 9 = 81),读作Displaying numbers with DOS

相关问题