Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 8086组件-更好的数据存储/操作?_Loops_Assembly - Fatal编程技术网

Loops 8086组件-更好的数据存储/操作?

Loops 8086组件-更好的数据存储/操作?,loops,assembly,Loops,Assembly,我正在为班级做一个项目,它按照准则的要求工作,尽管我想知道是否有更好的方法来实现一些事情。在另一个项目中,我因为一个不必要的“mov”而被罚了几分。这是问题1 “如果还有(34分):编写一个程序,要求用户输入一个数字。如果该数字小于5,则表示“是”,然后向其添加5并将其存储在变量中;如果该数字大于5,则表示“是”,然后从中减去5并将其存储在变量中;如果该数字为5,则表示“是”,然后将其添加3并将其存储在变量中。” 那么,我的问题是,有没有更好的方法来解决这些问题?键盘输入存储在AL中,但每次我将

我正在为班级做一个项目,它按照准则的要求工作,尽管我想知道是否有更好的方法来实现一些事情。在另一个项目中,我因为一个不必要的“mov”而被罚了几分。这是问题1

“如果还有(34分):编写一个程序,要求用户输入一个数字。如果该数字小于5,则表示“是”,然后向其添加5并将其存储在变量中;如果该数字大于5,则表示“是”,然后从中减去5并将其存储在变量中;如果该数字为5,则表示“是”,然后将其添加3并将其存储在变量中。”

那么,我的问题是,有没有更好的方法来解决这些问题?键盘输入存储在AL中,但每次我将mov函数转换为AH时,寄存器值都会发生变化,无论是字符串打印还是字符打印。为了避免变量(因为它不是需求的一部分)或将其分配到内存(我们还没有了解到),我将数据移动到另一个寄存器。这对两个程序来说都是不必要的“mov”吗

编辑:我意识到AL=DL之后

mov ah, 06h
mov dl, 0ah
int 21h       ;AL = DL after execution
第二个优化是去掉CR和LF的所有直接控制台输出。您应该将这些信息合并到要打印的消息中。这样做还将消除使用
mov-BL,AL
将AL复制到BL的需要(您特别要求):

这是另一个失败的机会:

jmp exit               ;unconditional jump to end program
exit:

您的第二个计划也可以从这些建议中受益。

请将此贴在上,您将得到更好的答案,因为该网站专门针对此类问题,因此它们作为工作计划的增强功能是离题的。请将说明从标签向右缩进一级,以便很容易看到分支标签。我喜欢将操作数缩进同一制表位,而不是由于可变长度insn助记符而使操作数列参差不齐。(我还喜欢将跳转目标缩进到比其他操作数稍小的位置,这样分支与分支目标一样突出)。有一个关于格式化asm的链接。顺便说一句,你在评论格式方面做得很好,在内容方面也不错。通常避免描述insn的功能,只说它的用途。
mov ah, 06h
mov dl, 0ah
int 21h       ;AL = DL after execution
cmp bl, 5              ;BL = AL
jz ifZero              ;jump to ifZero if BL = 5
jl ifLess              ;jump to isLess if BL < 5
jg ifGreater           ;jump to ifGreater if BL > 5
ifZero:
cmp bl, 5              ;BL = AL
jl ifLess              ;jump to isLess if BL < 5
jg ifGreater           ;jump to ifGreater if BL > 5
ifEqual:
less  db 13,10,"Less than 5... adding 5 $"
great db 13,10,"Greater than 5... subtracting 5 $"
eq    db 13,10,"Equal to 5... adding 3 $"
jmp exit               ;unconditional jump to end program
exit: