【问题标题】:need to write a code in assembly language is this correct需要用汇编语言编写代码是否正确
【发布时间】:2020-07-10 15:32:23
【问题描述】:

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

【问题讨论】:

  • “知道 m=7” 我没有看到任何m 在任何地方使用。
  • 除以 2 的更好方法是 shr ax, 1。
  • 对不起,我是 x=7,但是 shr ax,1
  • 如果 x 为 7,只需将 5 移入 ax 寄存器并返回。 :)

标签: assembly x86-16 equation subtraction divide


【解决方案1】:

这对吗?

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

【讨论】:

    猜你喜欢
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    • 2015-04-26
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多