assembly - 创建简单的加法计算但编译时出错 [汇编代码]
问题描述
我目前正在学习汇编语言。这并不容易,我还在学习,但我想通过从用户那里获取值来创建一个简单的加法计算,但我什至无法让编译器运行我一直说的代码
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
是一个字节,但你的变量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
推荐阅读
- android - Trip Duration Summary 作为在 Android 中的 Heremaps SDK 上启动 Route 之前的提示消息
- graph - 所有路径之间权重最低的最重边
- laravel - 使用 composer create-project 创建新的 Laravel 项目失败
- adsense - 如何让 AdSense 自动广告与 Gatsby 配合使用
- lua - NodeMCU mqtt led 亮度控制
- excel - Excel 中的 PowerPoint 幻灯片
- c++ - 使用补丁的 C++ 单一运行时条件
- android - androidx迁移后react-native应用程序上的SwipeRefreshLayout错误
- authentication - 如何以编程方式将用户添加到 wso2 密钥管理器?
- java - DateFormat.parse(String) 究竟如何处理非日期尾随文本?