创建一个简单的加法计算但编译时出错[Assembly Code]

Creating a simple addition calculation but error when compiling [Assembly Code]

我目前正在学习汇编语言。这并不容易,我仍在学习,但我想通过从用户那里获取值来创建一个简单的加法计算,但我什至无法让编译器 运行 我的代码一直在说 illegal command:

文件名为 USERSUM.ASM

我正在使用 DOSbox 使用 TASM 文件

编写我的汇编代码
title Calculate 2 Sum
; This program is to calculate the sum input from the user

.model small
.stack 100h

.data
input1 db 0ah, odh, "Input 1st Number: ", "$"
input2 db 0ah, odh, "Input 2nd Number: ", "$"
output db 0ah, odh, "The sum is: ", "$"

number 1 dw ?
number 2 dw ?
result dw ?

.code
main  proc

      MOV ax, @data
      MOV ds,ax

;Print 1st Message Input
      MOV ah, 9
      MOV dx,offset input1
      int 21h

      MOV ah, 1
      int 21h
      MOV bl, al

;Print 2nd Message Input
      MOV ah, 9
      MOV dx,offset input2
      int 21h

      MOV ah, 1
      int 21h
      MOV bh, al

;addition
      SUB number1,'0'
      SUB number2,'0'

      MOV ax, number1
      add ax, number2

      MOV result, ax
      add result,'0'

;Print Output 
      MOV ah, 9
      MOV dx,offset output
      int 21h

      MOV ah, 2
      MOV dl, bh
      int 21h

      MOV ax, 4C00h
      int 21h

main  endp
end   main

我希望我的输出是这样的:-

Input 1st Number: 2
Input 2nd Number: 4
The sum is: 6

我想不通这个问题。我是否遗漏了代码中的某些内容,或者我是否忘记添加了一些重要的内容?谁能告诉我我做错了什么?

这是因为寄存器dl是一个byte但是你的变量result被定义为一个word 通过 dw ,所以汇编程序说 operand is not same

只需使用 ptr 运算符将 result 的类型更改为 byte 就像这样

MOV dl, byte ptr result

或者只使用 dx

mov dx,result

这是我的代码根据你的答案修改而来,注意是0dh而不是odh

.model small
.stack 100h
    
.data
input1 db 0ah, 0dh, "Input 1st Number: ", "$";NOTE here and the next 2 lines is 0dh instead of odh
input2 db 0ah, 0dh, "Input 2nd Number: ", "$"
output db 0ah, 0dh, "The sum is: ", "$"

number1 dw ?
number2 dw ?
result dw ?

.code
main  proc

      MOV ax, @data
      MOV ds,ax

;Print 1st Message Input
      MOV ah, 9
      MOV dx,offset input1
      int 21h

      MOV ah, 1
      int 21h
      MOV number1, ax

;Print 2nd Message Input
      MOV ah, 9
      MOV dx,offset input2
      int 21h

      MOV ah, 1
      int 21h
      MOV number2, ax

;addition
      SUB number1,'0'
      SUB number2,'0'

      MOV ax, number1
      add ax, number2

      MOV result, ax
      add result,'0'

;Print Output
      MOV ah, 9
      MOV dx,offset output
      int 21h

      MOV ah, 2
      MOV dx,  result;or use mov dl,byte ptr result
      int 21h

      MOV ax, 4C00h
      int 21h

main  endp
end   main

output of the code