显示 c = |a - b |在有限的操作下使用 assamly
Showing that c = |a - b | using assambly with limited operations
我需要编写 returns c = |a - b | 的汇编代码。我唯一可以使用的命令是:
INC
- 增加存储在一个寄存器中的值。
DIC
- 减少存储在一个寄存器中的值。
JNZ
- 跳转到代码中的某个点 (LABEL)。只要在代码行附近完成最后的操作就不等于零。
HALT
- 停止代码。
你想用多少寄存器就用多少(越少越好),所有寄存器的值都初始化为0。
我正在尝试这样做,但不幸的是我每次都卡住了。
这就是我目前拥有的:
Label 3
Dec a
Jnz label 1
Label 2
Inc c
Dec b
Jnz label 2
Dec c
Halt
Label 1
Dec b
Jnz label3
Label4
Inc c
Dec a
jnz label4
Halt
这只适用于正数,我现在知道我应该为负数做些什么了。
你调试过负值吗?在我看来,对于某些组合,它实际上可以通过正确地扭曲来工作。然后对于其他一些则不会,例如 |5-0|。
我假设您正在谈论类似真实的二进制 CPU 架构,其中数字只有固定数量的位,负值被编码为二进制补码,因此 "warping" around 有效。
所以...我认为你可以这样做:
do { dec a, dec b } while jnz
; that will achieve: a = a-b, b = 0
; set b = a, d = -a
set_b_and_d_from_a:
inc b
dec d
dec a
jnz set_b_and_d_from_a
find_positive_value:
inc c
dec b
jnz find_positive_value_try_d_too
halt ; c = |a-b| for (a-b) >= 0
find_positive_value_try_d_too:
dec d
jnz find_positive_value
halt ; c = |a-b| for (a-b) < 0
; the positive value will take fewer "dec" to reach
; so one of the halt is reached sooner
; with "c" set to the number of "dec" used
不要做“label1
”到“label4
”,给他们一些意义,他们在做什么。
我需要编写 returns c = |a - b | 的汇编代码。我唯一可以使用的命令是:
INC
- 增加存储在一个寄存器中的值。
DIC
- 减少存储在一个寄存器中的值。
JNZ
- 跳转到代码中的某个点 (LABEL)。只要在代码行附近完成最后的操作就不等于零。
HALT
- 停止代码。
你想用多少寄存器就用多少(越少越好),所有寄存器的值都初始化为0。
我正在尝试这样做,但不幸的是我每次都卡住了。 这就是我目前拥有的:
Label 3
Dec a
Jnz label 1
Label 2
Inc c
Dec b
Jnz label 2
Dec c
Halt
Label 1
Dec b
Jnz label3
Label4
Inc c
Dec a
jnz label4
Halt
这只适用于正数,我现在知道我应该为负数做些什么了。
你调试过负值吗?在我看来,对于某些组合,它实际上可以通过正确地扭曲来工作。然后对于其他一些则不会,例如 |5-0|。
我假设您正在谈论类似真实的二进制 CPU 架构,其中数字只有固定数量的位,负值被编码为二进制补码,因此 "warping" around 有效。
所以...我认为你可以这样做:
do { dec a, dec b } while jnz
; that will achieve: a = a-b, b = 0
; set b = a, d = -a
set_b_and_d_from_a:
inc b
dec d
dec a
jnz set_b_and_d_from_a
find_positive_value:
inc c
dec b
jnz find_positive_value_try_d_too
halt ; c = |a-b| for (a-b) >= 0
find_positive_value_try_d_too:
dec d
jnz find_positive_value
halt ; c = |a-b| for (a-b) < 0
; the positive value will take fewer "dec" to reach
; so one of the halt is reached sooner
; with "c" set to the number of "dec" used
不要做“label1
”到“label4
”,给他们一些意义,他们在做什么。