需要用汇编语言编写的代码来求解方程式
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
答案 0 :(得分:0)
这正确吗?
否,因为问题指出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 。
您可以使用0到16的 x 运行上面的示例。结果将在1.5到9.5之间变化。