[ Assembler ] — начинающим: задаем вопросы

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by !_filin_!, 25 May 2007.

  1. xam!e

    xam!e New Member

    Joined:
    14 Dec 2009
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    Доброго времени суток, прошу подсказать, что в нижеприведенной программе неверно:

    Заранее благодарен.

    ps: это синтаксис masm intel 8086
     
    #1301 xam!e, 4 Dec 2012
    Last edited: 4 Dec 2012
  2. MTV

    MTV New Member

    Joined:
    16 Feb 2011
    Messages:
    180
    Likes Received:
    2
    Reputations:
    0
    Что то я впервые вижу
    Code:
    inint ax - это что за команда такая?
     div cx, тут нужен операнд
     outint dx  и это?
    Вот,почитайте http://www.codenet.ru/progr/asm/newbee/lesson8.php самые основы...
     
  3. xam!e

    xam!e New Member

    Joined:
    14 Dec 2009
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    Code:
      Макрокоманды вывода на экран целого значения  [B]outint  [/B]op1[,op2]  [B]outword [/B]op1[,op2]
    Code:
    Макрокоманда ввода целого числа  [B]inint [/B]op1
    http://assembler.programmation.ru/
     
  4. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    442
    Reputations:
    288
    макросы если я правильно понял.конкретно ошибку опиши.подозреваю что их у тебя нету
     
  5. xam!e

    xam!e New Member

    Joined:
    14 Dec 2009
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    код компилируется, но после ввода числа ничего не происходит, а по идее должно вывести значение регистра dx в котором значение остатка от деления.
     
  6. MTV

    MTV New Member

    Joined:
    16 Feb 2011
    Messages:
    180
    Likes Received:
    2
    Reputations:
    0
    Даешь весь код, так не разобраться.
     
  7. Donet

    Donet New Member

    Joined:
    11 Apr 2011
    Messages:
    22
    Likes Received:
    0
    Reputations:
    0
    Код в студию...
     
  8. Donet

    Donet New Member

    Joined:
    11 Apr 2011
    Messages:
    22
    Likes Received:
    0
    Reputations:
    0
    Помогите программа циклюется... Непонятно чего???

    calcavg.cpp
    Code:
    #include <stdio.h>
    extern "C" float Average(char *ValuePtr);
    int main()
    {
    	Average("FILE.TXT");
    	return 0;
    }
    average.asm
    Code:
    .MODEL SMALL
    .data
        buf	DB 2600 dup('$')
    	a DB 257 dup(0)	
    .CODE
    	PUBLIC _Average
    _Average PROC
    	push bp
    	mov bp,sp
    	mov ax,@data
    	mov ds,ax
       	MOV ax,  3D00h	
       	MOV dx,[bp+4] 	
       	INT 21h	
       	PUSH ax	
       	MOV ah,  3Fh	
       	POP   BX	
       	MOV   DX,  offset buf
       	INT   21h
       	MOV   AH,  3Eh	
       	INT   21h
       	MOV  AH,  9
       	MOV  DX,  offset buf
       	INT  21h
    	add sp,4   	
    	pop bp
    	ret      
    _Average ENDP
    END
    FILE.TXT
    Code:
    1dfgdfg
    compil.bat
    Code:
    echo off
    cls
    bcc calcavg.cpp average.asm
    del *.obj
    pause
    Выводит
    Code:
    1dfgdfg1dfgdfg1dfgdfg1dfgdfg......(и.т.д)
     
  9. Degger

    Degger New Member

    Joined:
    20 Aug 2010
    Messages:
    34
    Likes Received:
    0
    Reputations:
    0
    assembler

    Начал вести свой блог по assembler
    Вот он
    Строго прошу не судить..сам только недавно начал его изучать, и пытаюсь объяснить всем кто тольrо начинает учить assembler более просто и понятно..и уберечь от основной массы ошибок и проблем
     
  10. Donet

    Donet New Member

    Joined:
    11 Apr 2011
    Messages:
    22
    Likes Received:
    0
    Reputations:
    0
    Этот блог про (MASM) или обширно про весь ассемблер (MASM • GAS • fasm • NASM • RosASM • TASM • Yasm • HLASM)
     
  11. MaxFast

    MaxFast Elder - Старейшина

    Joined:
    12 Oct 2011
    Messages:
    575
    Likes Received:
    149
    Reputations:
    94
    Нужны годные мануалы по NASM под Unix, желательно на русском языке.
     
  12. MTV

    MTV New Member

    Joined:
    16 Feb 2011
    Messages:
    180
    Likes Received:
    2
    Reputations:
    0
    Извращенец :D , но если очень надо, то пару годных есть на васм http://web.archive.org/web/20120119112612/http://wasm.ru/publist.php?list=28
    P.S Васм не робит,в архиве можно посмотреть.
     
    #1312 MTV, 14 Jan 2013
    Last edited: 14 Jan 2013
  13. MaxFast

    MaxFast Elder - Старейшина

    Joined:
    12 Oct 2011
    Messages:
    575
    Likes Received:
    149
    Reputations:
    94
    Ну в общем там по FASM.
     
  14. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    http://www.nasm.us/doc/
     
  15. DeepBlue7

    DeepBlue7 Elder - Старейшина

    Joined:
    2 Jan 2009
    Messages:
    359
    Likes Received:
    50
    Reputations:
    12
    Вопрос в коде.

    Code:
    
    #include <stdio.h>
    
    int main()
    {
    	char* testStr = "TEST STRING HEHEHE";
    	char* formatStr = "eax: %d, ebx: %d, ecx: %s, edx: %s, teststr: %s";
    	__asm
    	{
    		mov eax, 1337;
    		mov ebx, 1337;
    		dec eax;
    		inc ebx;
    		mov edx, dword ptr ds:[testStr];
    
    		//---------------
    		//Какие есть более адекватные варианты для осуществления этого действия ?
    		//Т.е. получение адреса в массиве
    		mov ecx, edx;
    		add ecx, 5; 
    		//---------------
    
    		push testStr;
    		push edx;
    		push ecx;
    		push ebx;
    		push eax;
    		push formatStr;
    		call dword ptr ds:[printf];
    		
    
    		pop testStr;
    		pop edx;
    		pop ecx;
    		pop ebx;
    		pop eax;
    		pop formatStr;
    	}
    
    	getchar();
    	return 0;
    }
    
     
  16. MTV

    MTV New Member

    Joined:
    16 Feb 2011
    Messages:
    180
    Likes Received:
    2
    Reputations:
    0
    Чем этот способ не адекватен?
     
  17. DeepBlue7

    DeepBlue7 Elder - Старейшина

    Joined:
    2 Jan 2009
    Messages:
    359
    Likes Received:
    50
    Reputations:
    12
    MTV, мне кажется, что это можно сделать как-то более элегантно... Разве регистры (E)SI, (E)DI, (E)BP не существуют для осуществления подобных операций ?
     
  18. strann1k

    strann1k New Member

    Joined:
    28 Feb 2013
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Помогите написать программу, очень нужно.
    Есть масив x[1..1000] y[1..1000] z=[]
    Без разницы какие буду даные, желательно рандом. Нужно сложить елементы с масива х с масивом у, и записать результат в масив z. И найти числа кратные 2. И вывести их на екран.
     
  19. KIR@PRO

    KIR@PRO from Exception

    Joined:
    26 Dec 2007
    Messages:
    826
    Likes Received:
    291
    Reputations:
    359
    Code:
    .data
    x dd 1000 dup (0)
    y dd 1000 dup (0)
    z dd 1000 dup (0)
    .code
    
    
    SArray proc
    mov ecx,1000
    xor eax, eax
    lea edi, offset x
    
    set_x_array:
      stosb
      inc al
    loop set_x_array
    
    xor eax,eax
    mov ecx,1000
    lea edi, offset y
    
    set_y_array:
      stosb
      inc al
    loop set_y_array
    
    mov ecx, 1000
    lea edi, offset z
    lea esi, offset x
    lea ebx, offset y
    
    sum_array:
      lodsb
      add al,byte ptr [ebx]
      inc ebx
      stosb
      bt al, 0
      jnc sum_array_1
        mov ebx, 1000
        sub ebx, ecx
          ;в ebx номер элемента в массиве z, от 0 до 999
          ;в al число, являющееся суммой соответствующих элементов массивов x и y, кратное 2
          ;здесь надо что то сделать чтоб потом отобразить элементы кратные 2
      sum_array_1:
    loop sum_array
    SArray endp
    Синтаксис MASM.
    Сори если есть опечатки, написал на что меня хватило... Печатал на планшете, а это чертовски неудобно! В начале надо вызвать GetModuleHandle, затем AllocConsole, затем getstdhandle для получения хендла стандартного вывода, а после этого с помощью write выводить на экран данные.

    Чем смог помог!
    Маловероятно, что за тебя, кто то сделает всю прогу бесплатно...
     
    _________________________
    #1319 KIR@PRO, 22 Mar 2013
    Last edited: 22 Mar 2013
  20. KIR@PRO

    KIR@PRO from Exception

    Joined:
    26 Dec 2007
    Messages:
    826
    Likes Received:
    291
    Reputations:
    359
    Кто знает, как получить информацию, о количестве ядер/потоков процессора?

    Проверял что 3-й байт регистра ebx или edx (точно не помню), после вызова Cupid с значением eax равным 0x01, отображает правильное к-во потоков, но на i7 вместо 8 (как в диспетчере задач) выдает 16 (010h)...

    На виртуалке, выдает столько, сколько поставишь в настройках...

    Заранее благодарю, за конструктивную помощь!
    С уважением KIR@PRO
     
    _________________________
    #1320 KIR@PRO, 22 Mar 2013
    Last edited: 23 Mar 2013