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

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

  1. 0x22b

    0x22b Elder - Старейшина

    Joined:
    1 Dec 2007
    Messages:
    114
    Likes Received:
    32
    Reputations:
    9
  2. z01b

    z01b Муджахид

    Joined:
    5 Jan 2007
    Messages:
    494
    Likes Received:
    382
    Reputations:
    22
    тогда компиль с флагом /AT
     
  3. 0x22b

    0x22b Elder - Старейшина

    Joined:
    1 Dec 2007
    Messages:
    114
    Likes Received:
    32
    Reputations:
    9
    ml /c /AT first.asm - команда проканала
    link /SUBSYSTEM:CONSOLE first.obj - ругаца..
    warning LNK4033: converting object format from OMF to COFF
    fatal error LNK1190: invalid fixup found, type 0x0001

    вот кодес:
    Code:
    ;---------------------------------
    TITLE PRIMER11
    ;---------------------------------
    CODSEG SEGMENT
    ASSUME CS:CODSEG, DS:CODSEG, SS:CODSEG, ES:CODSEG
    ORG 100H
    BEGIN:
    JMP BEG_CODE
    TEXT DB 'My first program on assembler. $'
    BEG_CODE:
    MOV AX,CS
    MOV DS,AX
    LEA DX,TEXT
    MOV AH,9
    INT 21H
    MOV AH,4CH
    INT 21H
    CODSEG ENDS
    END BEGIN
    
     
  4. NetSter

    NetSter Moderator

    Joined:
    30 Jul 2007
    Messages:
    810
    Likes Received:
    414
    Reputations:
    62
    не могу понять...

    есть процедура на асме которая выставляет частоту микросхемы таймера.
    ____________________________________________
    Code:
    SetTimeFraq Proc
     ARG freq:word
     push bp
     mov bp,sp
     mov al, 36h
     out 43h,al
     [B]jmp $+2[/B] 
     mov ax, freq
     out 40h,al
     jmp $+2
     xchg al,ah
     out 40h, al
     pop bp
     ret
    SetTimeFraq EndP
    ____________________________________________
    Вопрос: почему для задержки при переходе к след. инструкции используется JMP $+2 (а не nop или друг.) :confused:

    В асме поке не силен так что сильно не ругайте)
     
    _________________________
    #224 NetSter, 14 Mar 2008
    Last edited by a moderator: 29 Apr 2008
  5. VERte][

    VERte][ Elder - Старейшина

    Joined:
    17 May 2007
    Messages:
    240
    Likes Received:
    163
    Reputations:
    32
    потому что $ - адрес команды jmp, команда занимает 2 байта (short), + 2 переход на следующую команду (mov ax, freq),
    можно очевидно в данном случае nop также использовать
     
    1 person likes this.
  6. desTiny

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

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    Да на самом деле не особо понятно, зачем вообще ждать...
     
  7. NetSter

    NetSter Moderator

    Joined:
    30 Jul 2007
    Messages:
    810
    Likes Received:
    414
    Reputations:
    62
    На сколько я понял все таки нужно ждать, потому что:
    каждый из 3-х каналов микросхемы таймера i8253 (i8254) состоит из 3-х регистров. Доступ к каждой группе регистров осуществляется через 1 порт (номера портов от 40h до 42h соответственно каналам 0-2).
    Порт связан с 8-битн регистром ввода/вывода. Через порт отправляется 2-байтн значение (с младш байта) которое сохраняется в 16 битн регистре.

    ИМХО) по ходу задержка для того чтоб в 2 этапа протолкнуть 16 битн значение через 8 битн порт.
    если не прав помогите понять что к чему)
     
    _________________________
    1 person likes this.
  8. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    nop использовать не стоит, т.к. jmp short занимает куда больше тактов процессора

    Ждать надо, что бы успела обработать аппаратура. Только не надо спрашивать конкретнее - что куда там обработать, как микросхема пашет и пр. - я хз.
     
  9. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    ребят, у меня мандрива линукс 2007.
    скажите пожалуйста что нужно установить и сделать, чтобы скомпилить самую примитивную прогу на ассемблере? чтоб проще неё уже ниче придумать нельзя было.
    какие пакеты нужны?
    редактор? (вима хватит?)
    исходный код (в его содержимом после разберусь)
    как компильнуть и запустить?
     
  10. 0x0c0de

    0x0c0de Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    441
    Likes Received:
    396
    Reputations:
    297
    2Дикс
    nasm
    http://linux.softpedia.com/get/Programming/Compilers/NASM-The-Netwide-Assembler-643.shtml

    nasm manual
    http://nasm.sourceforge.net/doc/nasmdoc0.html
     
  11. herna

    herna Banned

    Joined:
    7 Jan 2008
    Messages:
    1
    Likes Received:
    40
    Reputations:
    -35
    скачать фасм под линукс там в примерах всё написано
     
    1 person likes this.
  12. Jes

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

    Joined:
    16 Apr 2007
    Messages:
    370
    Likes Received:
    391
    Reputations:
    34
    (я недавно в асме):
    ... компилит нормально , но при запуске пишет "точка входа в процедуру CreateFile не найдена в библиотеке Kernel32.dll" ( fasm , ps: а масме всё нормально)
    :
    format Pe GUI 4.0
    entry main
    include 'C:\fasm\Include\win32a.inc'

    DO_NOT_SHARE equ 0
    OPEN_EXISTING equ 3
    GENERIC_WRITE = 40000000h
    FILE_ATTRIBUTE_NORMAL = 80h
    ...
    main:
    push 0
    push FILE_ATTRIBUTE_NORMAL
    push OPEN_EXISTING
    push 0
    push DO_NOT_SHARE
    push GENERIC_WRITE
    push filename

    call dword [CreateFile]

    ...

    section '.data' readable writable

    filename db 'log.txt',13,10,0

    section '.idata' data import readable writable

    library kernel32,'kernel32.dll'

    import kernel32,\
    CreateFile,'CreateFile'
    ...
    :(
     
    #232 Jes, 28 Mar 2008
    Last edited: 28 Mar 2008
  13. desTiny

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

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    Потому что CreateFileA

    PS У меня в статье - пример использования :)
     
    2 people like this.
  14. Jes

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

    Joined:
    16 Apr 2007
    Messages:
    370
    Likes Received:
    391
    Reputations:
    34
    ps: а учить полезно и то и то :)
     
    1 person likes this.
  15. Manoff

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

    Joined:
    15 Dec 2007
    Messages:
    38
    Likes Received:
    4
    Reputations:
    0
    А где можно компилятор Masm?
     
  16. Manoff

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

    Joined:
    15 Dec 2007
    Messages:
    38
    Likes Received:
    4
    Reputations:
    0
    А каким компилятором лучше пользоваться новичку?
     
  17. Manoff

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

    Joined:
    15 Dec 2007
    Messages:
    38
    Likes Received:
    4
    Reputations:
    0
    Под виндос и дос , но масм у меня не устанавливается :(
     
  18. De-visible

    De-visible [NDC] Network develope c0ders

    Joined:
    6 Jan 2008
    Messages:
    916
    Likes Received:
    550
    Reputations:
    66
    Установи себе emu8086 и радуйся жизни:)
     
  19. Manoff

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

    Joined:
    15 Dec 2007
    Messages:
    38
    Likes Received:
    4
    Reputations:
    0
    Я установил себе ФАСМ
     
  20. z01b

    z01b Муджахид

    Joined:
    5 Jan 2007
    Messages:
    494
    Likes Received:
    382
    Reputations:
    22
    Масм и Фасм это не одно и тоже.
     
    1 person likes this.