gpt4 book ai didi

assembly - 我怎样才能更有效地编写这段代码?

转载 作者:行者123 更新时间:2023-12-02 19:14:28 26 4
gpt4 key购买 nike

因此,对我来说,考试中的问题之一是使用至少 1 行更少的命令使这组代码更加高效。我不知道该怎么做。这段代码的目标是从数组中获取第一个数字的 4 个右位和第二个数字的左位(其地址位于 si 中),然后合并这 8 位,并将结果放入 8 位寄存器中。0dh是enter的ASCII,我需要确保enter不是用户输入的字符之一,如果是0应该替换它。(数组是字符数组)这是代码:

我想也许她只是想得到不会影响函数外部返回值的行,但她告诉我这不是她的意思,所以这是错误的。

cmp [byte ptr si],0Dh
je LessThan4
mov al,[si]
shl al,4;(a)-first nibble
inc si
cmp [byte ptr si],0Dh
je LessThan4
mov dl,[si]
and dl,240;11110000b
shr dl,4;(b)-second nibble
or al,dl;al=ab merging the nibbles
inc si
jmp Normal
LessThan4:
mov[byte ptr si],0
Normal:
ret

异常(exception)的结果是使用 1 个命令,这将交换当前代码中的 2 个命令。编辑:老实说,我不知道为什么我使用这一行: mov[byte ptr si],0我不需要,如果有回车我需要输入0而不是回车。但这是单独发生的,因为如果数组中有一个输入,函数就会结束,并且 0 是替换第二个半字节或两个半字节的内容,但我确实需要确保 al 是 0。如果这就是她的意思,我会感到非常尴尬和倾斜,因为我可能无法在我们类学到明年我想学的科目。):):):):):我应该能够很容易地看到它,所以这对我来说真的很糟糕......

最佳答案

The expected result is using 1 command, that will swap 2 commands in the current code.

shr​​ dl, 4 指令之前的 and dl, 11110000b 指令是多余的。右移将自行丢弃低 4 位。

有几件事我想提请您注意。

  • 半字节如何组合

    get the 4 right bits of the first number, the 4 left bits of the second number and then merge those 8 bits

    表示这种位组合的逻辑方法是将这 4 个右位(即低半字节)保留在结果的低半字节中,并将这 4 个左位(即高半字节)保留在结果的高半字节中。您的代码不会这样做,其他答案也不会这样做。也许是因为他们想模仿您所写的内容。

    如果第一个数字在 AL 中,第二个数字在 AH 中,则 和 ax, 0F00Fh 将屏蔽掉不需要的位, or al, ah 会将组合保留在 AL

  • 如何将 13 替换为 0

    0Dh is the ASCII of enter. I need to make sure that enter isn't one of the chars that user had input. If it does 0 should replace it.

    我认为您可能会误解这个“...0 应该替换它。”
    可能这是 DOS,输入以 enter 终止,因此在输入的字符后附加了一个回车符 (13)。老师警告的是值 13 不能成为结果的一部分。您在计算中将其替换为零,但不在内存中

如果这是一次性计算

AL中返回结果并保留SI

    mov     ax, [si]
cmp al, 13
jne L1
xor ax, ax ; Falling through shaves off an instruction
L1:
cmp ah, 13
jne L2
xor ah, ah
L2:
and ax, 0F00Fh
or al, ah
ret

如果必须对字符串中的所有字符重复此操作

始终以 AL 返回结果,并让 SI 指向剩余字符或终止回车符。

Again:
mov ax, [si]
cmp al, 13 ; If 1st byte is 13, then next byte is just garbage!
je CR1 ; ... so no further interpretation needed
and al, 0Fh
inc si
cmp ah, 13 ; If 2nd byte is 13, then result is based on 1st byte
je CR2 ; ... and that kind-of zero-replacement
and ah, 0F0h
inc si
or al, ah

...

jmp Again

CR1:
xor al, al
CR2:
...

关于assembly - 我怎样才能更有效地编写这段代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56702191/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com