Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 通过索引访问指向的阵列EDI点_Arrays_Assembly_Cpu Registers - Fatal编程技术网

Arrays 通过索引访问指向的阵列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

我需要将一个整数值转换为一个以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 [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:老了,错了,有好朋友真好:-}