assembly - 需要用汇编语言编写代码是否正确
问题描述
需要汇编语言代码来求解
z=(x+3)/2
已知 x=7的方程
我尝试使用div
,但有人说它更好地使用sub
和循环,我需要显示小数部分
.model small
.stack 100h
.data
x db 6
z db ?
.code
main proc
mov ax,data
mov ds,ax
mov ah,0
mov bl,2
mov al,x
add al,3
div bl
mov z,al
add z,48
mov dl,z
mov ah,2h
int 21h
main endp
end main
解决方案
这个对吗?
不,因为问题指出x=7
并且您的程序定义了x db 6
.
...我需要显示小数部分
如果x=7
那么表达式(x+3)/2
将不会产生分数(结果是纯 5)。
但是,如果我们让这个练习更有趣一点,我们可以允许方程中x的输入范围。那么除以 2 所能得到的唯一分数就是.5。
x=7
并使用除以 2
.data
x db 7
z db ?
.code
main proc
mov ax, data
mov ds, ax
mov al, x
add al, 3
cbw
mov bl, 2
div bl ; -> AL == 5
mov z, al
add al, '0'
mov dl, al ; -> DL == "5"
mov ah, 02h ; DOS.PrintChar
int 21h
x=6
并用右移替换除以 2
.data
x db 6
.code
main proc
...
mov al, x
add al, 3
shr al, 1
mov dx, '00'
jnc Divisible
mov dh, '5'
Divisible:
add dl, al ; -> DL == "4"
mov ah, 02h ; DOS.PrintChar
int 21h
mov dl, '.' ; Decimal point
int 21h
mov dl, dh ; -> DL == "5"
int 21h
这里向右移动会产生进位,因为(x+3)
是奇数。因此结果将显示.5,否则将显示.0。
您可以在x范围为 0 到 16的情况下运行上述示例。结果将在 1.5 到 9.5 之间变化。
推荐阅读
- python-3.x - Jupyter 的选项卡自动完成功能不适用于 sklearn、numpy、seaborn、pandas 和 matplotlib 等多个库
- keras - 在 Keras 中,在我自己的模型上使用 include_top= False 会删除所有最后一个密集层,我可以定义模型的“顶部”吗?
- asp.net - 无法让 ASP.NET/IIS 使用自定义缓存控制设置来提供 .js 文件
- laravel - Laravel 网站域名将转到 public/publc url
- django - django 具有相同外键的多个模型
- python - 使用 psycopg2 在 PostgreSQL 中使用密码创建用户时出错
- sql - 日期过滤器返回无效字符错误
- javascript - 为什么在这个 POST 请求中,then() 处理函数的参数用大括号括起来?
- c# - XML反序列化不同对象C#
- c++ - std::accumulate 使用视图 std::ranges::views::values