Создание простого сложения, но ошибка при компиляции [Assembly Code] - PullRequest
0 голосов
/ 10 июля 2020

Я сейчас изучаю язык ассемблера. Это непросто, и я все еще учусь, но я хотел создать простой дополнительный расчет, получая значение от пользователя, но я даже не мог заставить компилятор запускать мой код, он продолжает говорить 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

Я не могу понять проблему. Я что-то упустил в коде или забыл добавить что-то важное? Кто-нибудь может сказать мне, что я сделал не так?

1 Ответ

1 голос
/ 21 августа 2020

Это потому, что регистр dl - это байт , но ваша переменная result определяется как слово dw, поэтому ассемблер говорит operand is not same

просто используйте оператор ptr, чтобы изменить тип result на байт , как это

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

вывод кода

...