【汇编】两个有符号十进制数相乘:从键盘输入两个有符号十进制数相乘,显示结果。

本文介绍了一个简单的程序,用于实现两个有符号十进制数的乘法运算,并展示了如何使用寄存器进行数值操作和结果展示。

两个有符号十进制数相乘:从键盘输入两个有符号十进制数相乘,显示结果。
include io32.inc
.data
.code
start: call readsid ;读取的整数存放在寄存器eax
mov ebx,eax ; 把上一个读取的整数放到寄存器ebx
call readsid ;再次读取一个整数
xor edx,edx ;将edx置0,以便检查是否乘法结果的高位是否存到edx中
imul eax,ebx ;做整数乘法 结果存放在eax
call dispsid
exit 0
end start
用cmd或vc运行都行,先用build32 文件名(不要后缀),生成了.exe文件后直接运行该文件。也可以直接运行文件名(不要后缀)
运行结果在这里插入图片描述

### 实现8086汇编语言程序以完成从键盘输入两位十进制数相乘显示结果 在8086汇编编程环境中,为了实现从键盘接收两个单个十进制数字、执行其间的乘法操作并将最终的结果展示给用户的功能,可以采用如下所示的方式构建代码逻辑: ```assembly data_segment segment msg db 'Enter first digit: $' msg2 db 10, 13, 'Enter second digit: $' ; 使用回车符和换行符使提示更清晰 res_msg db 10, 13, 'Result = $' num1 db ? num2 db ? result dw ? ; 结果可能超过一字节大小 data_segment ends code_segment segment assume cs:code_segment, ds:data_segment start: mov ax, data_segment ; 初始化数据段寄存器 mov ds, ax lea dx, msg ; 加载第一个消息地址到DX用于打印 mov ah, 9 ; DOS功能调用号设置为字符串输出 int 21h ; 调用DOS中断服务 call read_digit ; 获取第一个字符并转换成数值存储于num1中 mov num1, al ; lea dx, msg2 ; 准备读取第二个数字前先给出提示信息 mov ah, 9 int 21h call read_digit ; 同样方法获取第二位数字保存至num2里 mov num2, al mul num2 ; AL * NUM2 -> AX (低字节AH 高字节AL) ; 此处假设两数均为小于等于9的一位正整数, ; 故不会溢出AX寄存器 mov bx, offset result ; 将乘积放入变量result内以便后续处理 stosw ; 存储双字节形式的结果 lea dx, res_msg ; 显示计算后的结果之前先告知用户即将看到什么 mov ah, 9 int 21h mov ax, word ptr [bx-2] ; 取得先前储存好的结果重新加载入ax准备转ASCII码输出 add ax, '0'*10 ; 这一步是为了把二进制值转化为对应的ASCII编码表示 aaa ; ASCII调整指令确保正确格式化多于一位的数字 xchg al, ah add ax, '0'+('0'*256) ; 对高位也做同样处理得到完整的ASCII串 push ax ; 暂存整个结果 pop dx ; 把低位放dx准备先打出它 mov ah, 2 int 21h pop dx ; 接着弹出高位继续打印出来形成完整答案 mov ah, 2 int 21h exit_program: mov ah, 4Ch ; 返回操作系统 int 21h read_digit proc near ; 定义子过程用来简化重复性的按键读取工作 mov ah, 1 ; 设置函数编号等待键入单个字符 int 21h ; 执行INT 21H获得按下的那个字母放在al里面 sub al, '0' ; 字符减去‘0’变成实际代表的那个阿拉伯数字 ret read_digit endp code_segment ends end start ``` 此段程序首先定义了一个简单的数据区`data_segment`来存放必要的常量以及临时变量。接着,在代码区内通过一系列的操作实现了预期目标——即接受两次来自用户的单独按键输入(限定为有效的0~9之间的任意一个),随后利用MUL指令完成了这两个数之间无符号整型乘法运算,并妥善地将所得产物呈现给了屏幕上的观察者。 值得注意的是,由于这里只考虑了一位数的情况,因此不需要担心任何潜在的数据越界风险;而且考虑到8086架构下默认是以BCD方式解释某些特定类型的算术表达式的可能性,所以特别加入了AAA这样的辅助性命令来保证即使当结果跨越了多个位置时也能被适当地解析为人类可识别的形式[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值