Arrays 通过索引访问指向的阵列EDI点
我需要将一个整数值转换为一个以null结尾的字符串,该字符串包含整数的十六进制等价物。这是我在汇编中编写的第一个程序,我想知道为什么我不能通过索引(一个8字节的数组)访问edi指向的值,如下所示:Arrays 通过索引访问指向的阵列EDI点,arrays,assembly,cpu-registers,Arrays,Assembly,Cpu Registers,我需要将一个整数值转换为一个以null结尾的字符串,该字符串包含整数的十六进制等价物。这是我在汇编中编写的第一个程序,我想知道为什么我不能通过索引(一个8字节的数组)访问edi指向的值,如下所示: mov startNum, 23 lea esi, startNum lea edi, bNumStr mov bx, 16 mov ecx, 7 mov ax, [esi] WhileNotZero: div bx mov [e
mov startNum, 23
lea esi, startNum
lea edi, bNumStr
mov bx, 16
mov ecx, 7
mov ax, [esi]
WhileNotZero:
div bx
mov [edi][ecx], dl
sub ecx, 1
cmp ecx, 0
ja WhileNotZero
如果我完全误解了什么,请告诉我。如果您能给我提供正确的建议,我将不胜感激。因为您将ECX设置为7,您的目标是检索8位十六进制数字,因此您必须将EAX中的dword值除以16。在此除法之前,您需要将EDX寄存器归零。
因为您需要以null结尾的字符串,所以从写入null开始
mov ebx, 16 ;Divider
mov ecx, 8 ;Number of digits
mov eax, [esi] ;Dividend
mov [edi][ecx], ch ;Null-termination, here CH is zero
WhileNotZero:
dec ecx
xor edx, edx ;Divide EDX:EAX by EBX
div ebx ;Quotient in EAX, remainder in EDX (<16)
...
mov [edi][ecx], dl
cmp ecx, 0
jne WhileNotZero
mov-ebx,16;分隔器
mov-ecx,8;数字位数
mov-eax[esi];股息
mov[edi][ecx],ch;零终止,这里CH是零
WhileNotZero:
12月ecx
xor-edx,edx;将EDX:EAX除以EBX
div-ebx;EAX中的商,EDX中的余数(你正在使用的汇编程序的名称是什么?对于MASM,你不能写[edi][ecx];你必须写[edi+ecx]。真的吗?嗯,那我可能错了。我经常使用MASM,但从未写过[edi][ecx]。我想这是不合法的。忘了我说了什么…:-{让我们重新开始。您向我们展示了一些代码。您抱怨“它”不起作用。您的具体证据是什么?您正在使用调试器吗?您是否收到汇编程序的投诉?什么特定设备不允许您“访问值”?请参阅以获得许多好的链接。此外,请编写[edi+ecx]
像一个普通人一样,这样人们就可以阅读你的代码。在我和Ira看来,你的代码好像坏了,我们都看到了很多汇编。@PeterCordes:老了,错了,有好朋友真好:-}