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