我一直在研究这个程序,我必须输入一个字符串,然后在该字符串中显示字符分布.
例如:
如果输入是"minecode",则输出应为
C - 1
O - 1
D - 1
E - 2
I - 1
M - 1
N - 1
这是我试图做的,但我真的不知道如何遍历循环并检查相似的字符然后增加计数.汇编程序是在32位机器上运行的MASM 615.
.686
.MODEL flat, stdcall
.STACK
INCLUDE Irvine32.inc
.DATA
msg0 BYTE "Enter a string of characters: ",0
msg1 BYTE "Character Distribution: ",0
MainArray dword 10000 dup (?)
UniqueChar dword 10000 dup (?)
CharCount dword 10000 dup (?)
.CODE
MAIN PROC
lea edx, msg0
call WriteString
call dumpregs ; 1
call ReadString
mov MainArray, eax
call …Run Code Online (Sandbox Code Playgroud) 使用以下示例,ESP和EIP寄存器之间有什么区别?解释代码在做什么.
main PROC
0000 0020 call MySub
0000 0025 mov eax, ebx
.
.
main ENDP
MySub PROC
0000 0040 mov eax, edx
.
.
ret
MySub ENDP
Run Code Online (Sandbox Code Playgroud)
0000 0025是紧跟在CALL指令之后的指令的偏移量
0000 0040是MySub中第一条指令的偏移量
CALL指令将0000 0025推入堆栈,并将0000 0040加载到EIP中
|-------------| |----------|
| 0000 0025 |<--ESP | 0000 0040| EIP
|-------------| |----------|
| |
|-------------|
| |
|-------------|
Run Code Online (Sandbox Code Playgroud)
RET指令从堆栈弹出0000 0025到EIP(RET执行前的堆栈显示)
|-------------| |----------|
| 0000 0025 |<--ESP | 0000 0025| EIP
|-------------| |----------|
| |
|-------------|
| |
|-------------|
Run Code Online (Sandbox Code Playgroud)