首页 > 解决方案 > 需要用汇编语言编写代码是否正确

问题描述

需要汇编语言代码来求解 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

标签: assemblyx86-16equationsubtractiondivide

解决方案


这个对吗?

不,因为问题指出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 之间变化。


推荐阅读