【问题标题】:Why does this loop show 20 as the result instead of 120?为什么这个循环的结果是 20 而不是 120?
【发布时间】:2019-08-17 08:53:53
【问题描述】:

为什么这个循环的结果是 20 而不是 120?

ORG 100H 
  facto dw ? 
START: 
   MOV CX, 5 
   MOV AX, 5
   DEC CX  
   repeat : 
     MUL CX 
     MOV facto , AX 
   LOOP repeat 
ENDS
END START :

【问题讨论】:

  • 对我有用,循环结束时 AX = 120 = 0x78。 (我在 Linux 静态可执行文件中使用 NASM 进行了测试,并使用 GDB 单步执行)。不是minimal reproducible example。

标签: assembly x86-16 machine-language


【解决方案1】:

代码运行良好,尽管有一些不需要的命令。 这是在 FASM 中进行测试的完整代码。你会看到我将 mov cx, 5 和 dec cx 组合成 mov cx, 4 并将赋值从 ax 移到 facto 远离循环以避免不必要的代码执行。

format PE console
entry main
include '%INCLUDE%/win32a.inc'

section '.data' data readable writeable
facto dd 0

section '.text' code readable executable

main:
    mov ecx, 4
    mov eax, 5
L0:
    mul ecx
loop L0
    mov [facto], eax
    invoke  ExitProcess,    eax

section '.idata' data import readable
library kernel32,'kernel32.dll'

import kernel32,\
ExitProcess,'ExitProcess'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-05
    • 2015-11-15
    • 2023-01-16
    • 2017-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    相关资源
    最近更新 更多