大家好,我试图知道如果给我的测试代码是正确的,或者如果我没有正确下载我的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
字符串
我试过配置东西,但因为这是我第一次使用汇编,我还不知道从哪里开始。
1条答案
按热度按时间j2qf4p5b1#
您的“操作数类型不匹配”错误是一个汇编时错误。
在
mov dl, result
指令中,目标操作数(DL)的大小为8位,与源操作数(result)的大小(16位)不匹配。TASM将检测到这一点,您无法运行程序。应用更正后,运行程序将显示运行时错误。
mov ah, 09h
来打印消息 msg2 和 msg3mov ah, 01h
中的DOS函数编号)如果您确实想要一个个位数的结果,请确保只输入您知道会导致个位数结果的数字。
对于一般情况(包括例如9 * 9 = 81),读作Displaying numbers with DOS。