The task is as follows:

Insert another array into the specified array of numbers, starting from the selected position.

When checking registers, garbage or incomprehensible values ​​are recorded, look in your debugger pliz

.486 .model flat, stdcall option casemap :none include \masm32\include\windows.inc include \masm32\include\masm32.inc include \masm32\include\kernel32.inc include \masm32\macros\macros.asm includelib \masm32\lib\masm32.lib includelib \masm32\lib\kernel32.lib .data mas1 dd 1,2,3,4,5,6 ; инициализация 1 массива mas2 dd 7,8; инициализация 2 массива .code start: mov EDI, 0 ; ΠΎΠ±Π½ΡƒΠ»Π΅Π½ΠΈΠ΅ рСгистров mov ECX, 0 mov ESI, 0 mov EBP,0 ; 0-ΠΎΠΉ элСмСнт массива mas2 mov EDI,1 ; Π²Ρ‹Π±ΠΎΡ€ΠΊΠ° с ΠΊΠ°ΠΊΠΎΠ³ΠΎ элСмСнта массива Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ‡Π°Π»ΠΎ Π·Π°ΠΌΠ΅Π½Ρ‹ mov ECX, 2; счСтчик, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π° ΠΎΡ‚Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ 1 metka: mov ESI,mas2[EBP] ; Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽ 0 Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ массива Π² рСгистр ESI mov mas1[EDI], ESI ; Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽ ΠΈΠ· рСгистра ESI Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ массива mas1 Π½Π° 1 ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ inc EBP ; ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° слСд Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ массива mas2 inc EDI; ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° слСд Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ массива mas1 loop metka mov ECX, mas1[0] ; ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ массива, Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ рСгистр, Ρ‡Ρ‚ΠΎΠ± Π³Π»ΡΠ½ΡƒΡ‚ΡŒ. mov EBX, mas1[1]; ΠΈ Ρ‚ΠΎΠΆΠ΅ самоС.. mov EAX, mas1[2] mov EDX, mas1[3] ;mov ECX, mas1[4] ;mov ECX, mas1[5] int 20h end start 
  • Your array element (dd) is 4 bytes long. And you add only 1 to the offsets. Although I don’t understand how masm perceives all kinds of mas1 [2] it can multiply by 4 ... I suggest, without any transformations, to start simply load the register mas1 [2] for example and make sure that the number is correct. Personally, I would go more usual for asm in the way, load, say, the address of the beginning of the array in edi and make mov eax,[edi] and then add to edi by 4. Although of course modern masm can do something for you ... - Mike
  • @Mike, masm understands as [mas1 + 2] (the address of the beginning of the array + 2 bytes). Those. There is no pointer arithmetic there. - insolor

0