assembly - 两个输入并将它们相乘。如何做到这一点?
问题描述
我想取两个输入并将它们相乘并在emu8086中打印结果。但问题是只有将 AL 或 AX 作为一个固定操作数才能进行乘法运算。假设我不能将 BX 和 DX 相乘。那么现在我如何输入 AL 和 BL 并将它们相乘。
我的代码:
mov ah,1
int 21h
mov bl,al
int 21h
mul bl
mov ah,2
mov dl,al
int 21h
解决方案
使用 DOS 函数 01h 得到的输入是一个字符。您需要将其转换为它所代表的数字。例如“2”被转换为值 2。我们只需减去 48即可。
乘法mul bl
是正确的(AL
* BL
)。产品将在,AX
但两个输入都限制为 9,因此产品永远不会大于 81。
在打印之前,您需要通过添加 48将产品的值转换回字符。这只有在产品不超过 9 时才有效,因为否则它需要超过 1 个字符。
mov ah,1
int 21h
SUB AL, 48
mov bl,al
MOV AH, 01h
int 21h
SUB AL, 48
mul bl
mov ah,2
mov dl,al
ADD DL,48
int 21h
如果您输入“2”和“3”,您将得到“6”的输出。
推荐阅读
- firebase - 如何使非图像文件的“getDownloadURL”方法的 url 可见(不可下载)?
- flutter - Flutter应用栏布局:与标签栏在同一行中的操作按钮?
- python - 如何从字典列表中提取特定值?
- node.js - 有什么方法可以在nodejs中获取用户请求的内部IP地址
- azure - 通过 Azure Devops 部署 Azure CustomConnector
- flutter - Flutter Bloc Widget 测试如何在 bloc 模式中的 If 语句下查找.text
- javascript - Vuejs - 实现上一个/下一个按钮来显示调查问题
- react-native - 如何将表单数据保存到 AsyncStorage,然后在连接互联网时自动将该数据发送到 mongodb
- java - 自动调整 LinearLayout 并完全克隆 LinearLayout
- android - 无法在 Chrome 操作系统上安装 Android Studio:安装包时出错:包架构 (amd64) 与系统 (arm64) 不匹配