assembly - 通过字符串循环遇到指针和跟踪寄存器值的问题
问题描述
这个大会课让我想质疑这个专业。我认为这个任务是正确的,直到她给我发电子邮件“你确实意识到 esi 和 edi 永远不等于 g?他们开始是 1000h 和 2000h。显然你没有注意。没有信用”。
有人可以帮我纠正我做错了什么吗?这是否意味着在前两行和两列中,我有 esi 和 edi 我把 h?如果是这样,就是这样吗?还是还有其他遗漏?她非常挑剔。
这是我所拥有的,就指令而言,她只是希望我们“解码”它,这意味着准确地告诉她这些寄存器中发生了什么。
我们所做的几乎就是将 EAX 和 ECX 设置为零,然后我们进入一个循环。ECX 首先增加 1,然后与 10 进行比较。如果 ECX 小于 10,则将 ECX 添加到 EAX,循环将重复,直到 ECX 大于 10。然后 EAX 的当前值移动到名为Total
和的变量中打印总数。
; 2 parameters passed
; string1 ghost0 ("ghost") AT ADDRESS 1000 (goes into the ESI register)
; string2 ghostly0 ("ghostly") AT ADDRESS 2000 (goes into the EDI register)
; remember, C++ delineates the end of a string by adding zero
_Task1 proc
_asm
Mov bx,0 ; set return result to failed
mov esi, DWORD PTR [esp + 4] ; this is taking a passed pointer off the stack
mov edi, DWORD PTR [esp + 8] ; this is taking a passed pointer off the stack
esi edi al ah
L1:
mov al, [esi] g g g
mov ah, [edi] g g g g
cmp al, 0 h g g g
jne L2 h h g g
cmp ah, 0 h h h g
jne L2 h h h h
mov bx,1 o h h h
jmp L3 o o h h
L2: o o o h
inc esi s o o o
inc edi s o o o
cmp al, ah s s o o
je L1 s s s o
L3: t s s s
Ret t t s s
_Task1 endp t t s s
End t t t t
Loop1 move the character 0 t t t
from esi and edi 0 I t t
0 I 0 t
Loop1 将 char 从 esi 和 edi 移动到 al 和 ah 寄存器。然后将分配给 al 寄存器的字符与 0 进行比较。如果比较不等于,程序将跳转到 Loop2。Loop2 将 esi 和 edi 递增到下一个字符,并比较 al 和 ah。由于 al 和 ah 相等,程序将跳转到 Loop1。这将重复直到 al 等于 0 程序将终止。