Assembly 如何在程序集中反转和修改字符串?
我有一个项目,我想输入一个数字,然后说我输入3,它会给你一个输出Assembly 如何在程序集中反转和修改字符串?,assembly,masm,irvine32,Assembly,Masm,Irvine32,我有一个项目,我想输入一个数字,然后说我输入3,它会给你一个输出 ZYX**XYZ ZY****YZ Z******Z 5分可以给你 ZYXWV**VWXYZ ZYXW****WXYZ ZYX******XYZ ZY********YZ Z**********Z 在我的项目中,我认为我的导师不会允许我使用数组,或者至少现在还不会,但这是我的想法 我想用一个字符串来表示这个数字,比如说我得到了一个3。我将生成ZYX*并简单地反转它,得到三角形的另一半。唯一的问题是,我不知道如何把字
ZYX**XYZ
ZY****YZ
Z******Z
5分可以给你
ZYXWV**VWXYZ
ZYXW****WXYZ
ZYX******XYZ
ZY********YZ
Z**********Z
在我的项目中,我认为我的导师不会允许我使用数组,或者至少现在还不会,但这是我的想法
我想用一个字符串来表示这个数字,比如说我得到了一个3。我将生成ZYX*并简单地反转它,得到三角形的另一半。唯一的问题是,我不知道如何把字母一个一个地改成星星。我正在考虑使用循环来实现它,但不确定如何实现。我只知道下一个字符串是ZY**然后简单地反转它
别误会我的意思,我并不是要求你们都为我做这件事,但也许可以给我一些关于如何去做的建议。多谢各位
到目前为止,感谢你们,我已经能够想出这个
TITLE MASM Template (main.asm)
; Description:
;
; Revision date:
INCLUDE Irvine32.inc
.data
x DWORD ?
msg BYTE "Please input a number: " ,0dh,0ah,0
.code
;crlf
main PROC
call Clrscr
MOV edx, OFFSET msg ; Moves message to input number into register
call WriteString ; Displays message on screen to prompt user to input number
call readInt ; Take the number that the user inputs
MOV x,eax ; Store it into x
MOV ecx, eax ; For the loop counter
MOV al, 'Z' ; Move Z to the register
L2:
MOV al, 'Z' ; Resets al to z for loop
L1: ; Start of the loop with label L1
call WriteChar ; To write the letters
;call crlf ; To put in 'enter'
SUB al, 1 ; To Move the next char going downward
LOOP L1
MOV al, ' '
call WriteChar
MOV ecx, x ; Resets ecx for outside loop
SUB x, 1 ; Decrements x for counter
call crlf ; To be tidy
LOOP L2
exit
main ENDP
END main
现在我只需要另一面。欢迎来到最黑暗的计算机艺术-汇编程序 让我们从汇编程序员的角度来看这个问题 你有一个数字,比如BL('因为这是一个很好的汇编语言名称),你要做的是生成BL行输出。假设BL=5 现在,CX作为计数器寄存器非常好,所以如果我们将BL复制到CL,并通过对其自身进行XOR来清除CH,那么我们也有CX=#行 在反转之前我们必须打印的字符数比这个要多一个,所以我们可以增加CX,这是一个重要的数字,所以把它保存在比如说BP中 每一行由字母“Z”到('Z'-BH+1)和一个星号组成,然后是相同的反方向和一个新行。每增加一行,你就减少一个字母的打印数量,并增加一个星号 要生产一条生产线,我们需要
- 加载一个寄存器,比如说,DL,加上“Z”(DL),因为这样做很方便 “printme”例程的输出)
- 将其复制到另一个寄存器,例如BH(寄存器移动的寄存器是 比负载更快、更小(即时)
- 从BH中减去BL,得到一个神奇的值,'Z'-5='U'-存在吗 铃响了吗
以下是我们想要做的事情:
- 用DL-写出这个角色,并加上一个转折
- 通过递减更改DL中的字符
以下是我们想要做的事情:
- 用DL-写出这个角色,并加上一个转折
- 通过递增更改DL中的字符
- 在堆栈上保存DX
- 加载带有星号的DL,如果DL我写了一篇关于如何创建数据库的教程。它使用NASM和Windows API而不是Irvine,但本教程应该会让您开始学习,并在后勤方面为您提供一些帮助。我在这里没有看到任何代码,因此我认为您对汇编绝对是新手。您可能希望从一个简单的hello world程序开始。“使用数组”是什么意思。字符串是数组,对吗?无论如何,在汇编中,它在任何情况下都只是一块内存,除非您将字符串放入一个或多个寄存器中。