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

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

  1. x-treem

    x-treem Elder - Старейшина

    Joined:
    8 Nov 2006
    Messages:
    130
    Likes Received:
    16
    Reputations:
    0
    у мну лам проблем.

    имеется такой код на масм:

    Code:
    .DATA 
    Buff db 100
    
    .code
    start:
    mov [Buff], byte "A"
    end start:
    
    надо вообщем в буффер вставить А.
    но ошибка.
    помогите пожалуйсто
     
    #41 x-treem, 25 Jun 2007
    Last edited by a moderator: 29 Apr 2008
  2. slesh

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

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    2 x-treem тебе нужно весь буфер забить символом A?
    Если а то вот код на FASM

    Code:
    xor edi,edi
    m:
    mov [Buff+edi], byte "A"
    inc edi
    cmp edi,100
    jbe m
    
    я с масм не работал, поэтому незнаю прокатит
    mov [Buff+edi], byte "A" или нет.
    Ты попробуй сделать так:
    Code:
    xor edi,edi
    lea ebx,buff 
    mov al,"A"
    
    m:
    mov [ebx+edi], byte al
    inc edi
    cmp edi,100
    jbe m
    
     
    #42 slesh, 25 Jun 2007
    Last edited: 25 Jun 2007
    1 person likes this.
  3. x-treem

    x-treem Elder - Старейшина

    Joined:
    8 Nov 2006
    Messages:
    130
    Likes Received:
    16
    Reputations:
    0
    не, мне нуна добавлять туда символы.
    сначала например А
    потом Hello
    потом puki

    а потом вывести в мессаджбоксе
     
  4. iv.

    iv. Elder - Старейшина

    Joined:
    21 Mar 2007
    Messages:
    1,183
    Likes Received:
    438
    Reputations:
    107
    2x-treem:
    Если мне не изменяет память, так работать с памятью нельзя. Надо через регистры.
    Типа:
    mov AL, byte "A"
    mov [Buff], AL
     
    1 person likes this.
  5. slesh

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

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Ну тогда юзай АПИ функцию
    Code:
    mov [Buff], 0
    
    invoke lstrcat,[Buff],'HELLO'  ; добавить данные к буферу
    
    
     
    1 person likes this.
  6. GlOFF

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

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    iv. с памятью можно так работать, это же не из одного места памяти в другое, это в область памяти число пересылается... команда mov - это сделать в силах! mov Buff, "A" ;)

    x-treem
    Code:
    .386  
    .model  flat, stdcall  
    option  casemap:none  
       
    .DATA?   
    Buff db 100 dup(?)   
     
    .code  
    start:  
    mov [Buff], "A"  
    ret  
    end start
    
    Нужно было обьявить правильно буфер "Buff db 100 dup(?)" + "end start:" - двоеточие не нужно...

    P.S. x-treem Символы добавляются откуда? из DATA или просто в коде по штуке? или тебе сразу строку можно в буфер положить?
     
    #46 GlOFF, 25 Jun 2007
    Last edited: 25 Jun 2007
  7. x-treem

    x-treem Elder - Старейшина

    Joined:
    8 Nov 2006
    Messages:
    130
    Likes Received:
    16
    Reputations:
    0
    у мну lstrcat не работает. то естьвот

    и нету мессадж бокса. да и вообще только 4 символа можно добавить
    что тут не так?
     
  8. GoreMaster

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

    Joined:
    28 May 2007
    Messages:
    119
    Likes Received:
    32
    Reputations:
    4
    "HELL" должна быть определена в .data как строка
    ---------Пример функции lstrcat----------------
    .data
    hell db "HELL",0
    .code
    invoke lstrcat,addr Buff,addr hell
    ------------------Работа с символами-------------------
    lea edi, Buff
    mov al, "и"
    mov byte ptr ds:[edi] , al
    xor al,al
    inc edi
    mov al,"з"
    mov byte ptr ds:[edi] ,al

    имхо так
     
    #48 GoreMaster, 25 Jun 2007
    Last edited: 25 Jun 2007
  9. GlOFF

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

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    x-treem Если ты пишешь на masm'e то все данные в виде строк и т.д. нужно хранить в .data ,а буферы в .data? ... В fasm'e немного по другому...
    Code:
    ;###################################################
    
          .386
          .model flat, stdcall
          option casemap :none   ; case sensitive
    
    ;###################################################
    
          include C:\masm32\include\windows.inc
          include C:\masm32\include\user32.inc
          include C:\masm32\include\kernel32.inc
    
          includelib C:\masm32\lib\user32.lib
          includelib C:\masm32\lib\kernel32.lib  
    
    ;###################################################
    
    .DATA 
    Buff	db 100 dup(?)
    szMsg	db "Hello",0
    
    ;###################################################
    
    .code
    start:
    	mov Buff, "A"
    	invoke MessageBox, 0, ADDR Buff, ADDR Buff, 40h 
    
    	invoke MessageBox, 0, ADDR szMsg, ADDR szMsg, 40h
    
    	invoke lstrcpy, ADDR Buff, ADDR szMsg 
    	invoke MessageBox, 0, ADDR Buff, ADDR Buff, 40h 
    
    	invoke ExitProcess, 0
    end start
    
    ;###################################################
    
    Некоторые приемы вывода в Мессаге...
     
    2 people like this.
  10. Tikson

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

    Joined:
    9 Oct 2005
    Messages:
    263
    Likes Received:
    42
    Reputations:
    14
    как обычно компилю тасмом com программу
    --------------------код------------------------
    cseg segment
    assume cs:cseg, ds:cseg,es:cseg,ss:cseg
    org 100h
    start:
    mov ax, 0b800h
    mov es,ax
    mov di, 0

    mov ah,31
    mov al, 1
    mov es:[di], ax
    mov ax, 10h
    int 16h
    int 20h
    cseg ends
    end start
    --------------------код------------------------
    tasm program.asm
    tlink program.obj/t/x

    все ок(тасм ошибок никаких не выдает) , запускаю из командной строчки и программа виснет(ОС не виснет) , смайлик не выводится.... хотя раньше выводился. В чем может быть проблема?
     
  11. FeraS

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

    Joined:
    19 Jan 2007
    Messages:
    555
    Likes Received:
    420
    Reputations:
    76
    Tikson
    Скомпилил MASM'ом, запустил в Volkov Commander - все работает
     
  12. Tikson

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

    Joined:
    9 Oct 2005
    Messages:
    263
    Likes Received:
    42
    Reputations:
    14
    FeraS
    интерсно как это у тебя получилось , если у меня там ошибка (вместо mov ax, 10h нужно было писать mov ah, 10h) ? Но даже так не работает
     
  13. GlOFF

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

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    Tikson А ты Masm'om или tasm'om пробывал?
     
  14. da_ff

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

    Joined:
    11 Jul 2006
    Messages:
    118
    Likes Received:
    22
    Reputations:
    26
    опять же смотря чем компилить и как проверять результат если в отладчике то он перед запуском обнулит все регистры и вообще это не синтаксическая ошибка и повлиять на компиляцию не может
     
  15. Feshh

    Feshh Banned

    Joined:
    6 Mar 2007
    Messages:
    97
    Likes Received:
    53
    Reputations:
    -45
    извините за супер ламерский вопрос но как скомпилить asm код? и чем это удобнее сделать :) с меня +
     
  16. iv.

    iv. Elder - Старейшина

    Joined:
    21 Mar 2007
    Messages:
    1,183
    Likes Received:
    438
    Reputations:
    107
    Не поверишь, но с помощью компилятора. TASM, MASM, FASM, NASM..
    Я бы на твоем месте сразу убился, задавая такие вопросы.
     
    CKAP likes this.
  17. Feshh

    Feshh Banned

    Joined:
    6 Mar 2007
    Messages:
    97
    Likes Received:
    53
    Reputations:
    -45
    не все так просто я в MASM вставляю код щелкаю в меню Project по кнопке Compile Resourse файл и он мне пишет no file loaded
     
  18. GoreMaster

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

    Joined:
    28 May 2007
    Messages:
    119
    Likes Received:
    32
    Reputations:
    4
    в qeditor'е пакета masm32 вверху вкладка Project и там выбираешь Build All
    или батфайлом
    Example:
    Code:
    @echo off
    
    if exist Keygen.exe del Keygen.exe
    if exist Keygen.obj del Keygen.obj
    if exist rsrc.res     del rsrc.res
    if exist rsrc.obj     del rsrc.obj
    
    \masm32\bin\ml /c /coff Keygen.asm
    \masm32\bin\rc rsrc.rc
    \masm32\bin\cvtres /machine:ix86 rsrc.res
    \masm32\bin\Link /SUBSYSTEM:WINDOWS Keygen.obj rsrc.obj
    
    if exist Keygen.obj  del Keygen.obj
    if exist rsrc.obj     del rsrc.obj
    if exist rsrc.res     del rsrc.res
    
    Пример взят из обычного Keygen Template'а
     
    1 person likes this.
  19. Feshh

    Feshh Banned

    Joined:
    6 Mar 2007
    Messages:
    97
    Likes Received:
    53
    Reputations:
    -45
    блин вроде разобрался) только там код шо писец... несколько страниц сурового кода в одну строчку и ниодного коментария. пишет что нельзя скомпилить изза того что строчка слишком длинная.((((
     
  20. Lamia

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

    Joined:
    11 Jul 2007
    Messages:
    186
    Likes Received:
    77
    Reputations:
    -9
    Офигеть!Не разу не просила помощи!Но в элементарных вещях можно разобраться и самому!
     
    #60 Lamia, 13 Jul 2007
    Last edited: 13 Jul 2007