需要用汇编语言编写代码是正确的吗

时间:2020-07-10 15:32:23

标签: assembly x86-16 equation subtraction divide

需要用汇编语言编写的代码来求解方程式 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

1 个答案:

答案 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之间变化。