gpt4 book ai didi

loops - x86 程序集中嵌套在另一个循环中的两个循环

转载 作者:行者123 更新时间:2023-12-03 18:25:42 25 4
gpt4 key购买 nike

我在汇编语言中遇到循环问题。

当我们想在嵌套循环中使用计数寄存器进行循环时,我们首先要做的是将计数器寄存器的值移动到外循环的堆栈中,然后在完成内循环后将其取回,这样我们就可以使用一个计数器寄存器来循环进入嵌套循环每个循环的迭代次数不同。

但是嵌套循环中的嵌套循环呢?

我想打印一个由字符 S 组成的金字塔。我得到的是,

SSSSSSSSSS
SSSSSSSSS
SSSSSSSS
SSSSSSS
SSSSSS
SSSSS
SSSS
SSS
SS
S

我真正想要的是,

 SSSSSSSSSS
SSSSSSSS
SSSSSS
SSSS
SS
S

这是我的程序代码

MOV BX,10           ; HOLD 10 IN BX FOR INNER LOOP
MOV AX,0 ; START ITERATIONS FROM 0
MOV CX,10 ; MAX NUMBER OF ITERATIONS

L2:

PUSH CX ;PUSH CX IN A STACK
MOV CX,BX ;STORE NEW VALUE IN CX FOR INNER LOOP ITERATION

L1:

MOV DX, [SI] ; MOVE THE STRING INTO DX
MOV AH,02H ; DISPLAY EVERYTHING FROM DX
INT 21H

LOOP L1

MOV DX,0AH ;PRINT LINE FEED AFTER PRINTING EACH LINE OF ASTERIKS
MOV AH,02H
INT 21H

SUB BX,01 ;DECREASE THE VALUE OF BX BY 1

POP CX ;RESTORE ORIGINAL VALUE OF CX FOR OUTER LOOP
ADD AX,01 ;INCREMENT VALUE OF AX BY 1

LOOP L2


MOV AH, 4CH ;RETURN CONTROL TO DOS
INT 21H

为了实现我想要的,我需要在嵌套循环中添加另一个循环来打印空格字符(即 020H)。但为此我需要另一个柜台登记,但我无法做到。我该如何解决这个问题?

最佳答案

您已经在做给定 ASM 中需要做的事情。您可以将 CX 的当前值压入堆栈(保存)并稍后弹出以恢复它。当您需要额外的嵌套时,您需要这样做。

在 JohnB 提供的代码中,他简单地添加了一个循环以在打印星号之前打印出空格。不需要额外的嵌套,这意味着它非常简单。

有点像这样:

For each line
Print an incrementing number of spaces
Print a decrementing number of asterisks
Repeat

这正是 JohnB 向您展示的内容。

关于loops - x86 程序集中嵌套在另一个循环中的两个循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12329001/

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