Исповедь системного администратора (многа букаф, мат)

Discussion in 'Off Topic' started by stalke, Aug 8, 2008.

  1. Flk

    Flk Well-Known Member

    Joined:
    Aug 21, 2002
    Messages:
    18,562
    Location:
    Izhevsk
    Ну... :shuffle: А в чём вопрос кроме воспоминаний? :)
     
  2. fas---

    fas--- Дремучий патриархал

    Joined:
    Jun 4, 2006
    Messages:
    11,919
    Location:
    Российское Царство
    сложить два числа произвольных, вывести на консоль

    затупил на моменте - выводит из DL символ значения, а не значение (ну у меня там 70h в сумме, соответственно на консольку выводит "p"). А там "сунуть в регистр значение, потом добавить в регистр еще, потом вывести на консоль.
    А если там цинично складывать 2+2, то это вообще зона спец.символов и возможны чудеса на виражах. Короче, мне надо числовое представление вывести. Помню, что есть какой-то алгоритм преобразования, но сунувшись в инет
    че-то как-то совсем приуныл. Куда рыть, куда копать. Пример реально ученический, но я бля СЛИШКОМ давно это все смотрел и исключительно по диагонали, ибо нахер было не надо. А тут школоте (студентам) надо на нативной ХТ че-то показать и я как-то на жопу присел в том смысле, что нихуя не помню...

    org 100h
    mov al,20h
    add al,50h
    mov dl,al
    mov ah,2
    int 21h
    ret

    Ну условно так, без заголовков как таковых для тасма и все такое. Чисто код.

    зы терзают смутные сомнения на счет mov dl,al
    зыы - уже не терзают, все правильно вроде
    тасм не знает про аам (вроде), нынче модняво делать через аам, как я понял...
    точнее, я нихера не понял, но пытаюсь
     
    Last edited: Apr 11, 2024
  3. fas---

    fas--- Дремучий патриархал

    Joined:
    Jun 4, 2006
    Messages:
    11,919
    Location:
    Российское Царство
    Так...
    Вот ЭТО вроде как работает...

    org 100h
    mov ax,2h
    add ax,5h
    aam
    add ax,3030h
    mov dl,ah
    mov dh,al
    mov ah,02
    int 21h
    mov dl,dh
    int 21h
    ret

    искомое значение "7" исправно выводит и не падает. Я правда на эмуле 8086 гонял пока, не на тасме...

    Любые комментарии приветствуются...
     
  4. Flk

    Flk Well-Known Member

    Joined:
    Aug 21, 2002
    Messages:
    18,562
    Location:
    Izhevsk
    Ну и всё правильно, символ и выводит:
    Не просто так результат вывести в консоль DOS. Сюда глянь: https://fasmworld.ru/uchebnyj-kurs/022-vyvod-chisel-na-konsol/
     
  5. Flk

    Flk Well-Known Member

    Joined:
    Aug 21, 2002
    Messages:
    18,562
    Location:
    Izhevsk
    Какой эмуль пользуешь?
     
  6. --maty

    --maty Well-Known Member

    Joined:
    Jan 22, 2002
    Messages:
    7,173
    Location:
    Marseille, FRANCE
    Чатжпт предлагает такой вариант и божится что это для Turbo Assembler на 8086 архитектуру
    .model small
    .stack 100h

    .data
    msg1 db 10, 13, "Enter first digit: $"
    msg2 db 10, 13, "Enter second digit: $"
    msg3 db 10, 13, "Sum: $"
    result db ?

    .code
    main:
    mov ax, @data
    mov ds, ax

    ; Display prompt for the first digit
    mov ah, 09h
    lea dx, msg1
    int 21h

    ; Read the first digit
    mov ah, 01h
    int 21h
    sub al, 30h ; Convert ASCII to numeric value
    mov bl, al

    ; Display prompt for the second digit
    mov ah, 09h
    lea dx, msg2
    int 21h

    ; Read the second digit
    mov ah, 01h
    int 21h
    sub al, 30h ; Convert ASCII to numeric value
    add bl, al ; Add the two digits

    ; Convert the sum back to ASCII
    add bl, 30h
    mov result, bl

    ; Display the result
    mov ah, 09h
    lea dx, msg3
    int 21h

    mov ah, 02h
    mov dl, result
    int 21h

    mov ah, 4Ch
    int 21h
    end main
     
  7. fas---

    fas--- Дремучий патриархал

    Joined:
    Jun 4, 2006
    Messages:
    11,919
    Location:
    Российское Царство
    emu8086
     
  8. fas---

    fas--- Дремучий патриархал

    Joined:
    Jun 4, 2006
    Messages:
    11,919
    Location:
    Российское Царство
    Да как бы не отсюда и брал кусок, где преобразование через запхание в AX 3030h делается. Метод рабочий, но до определенных пределов. Дальше надо по условиям раскидывать и в зависимости от разные значения на сдвиг подсовывать.
     
  9. fas---

    fas--- Дремучий патриархал

    Joined:
    Jun 4, 2006
    Messages:
    11,919
    Location:
    Российское Царство
    Чат гпт конечно наше все, но по словам истерично ржущего старшего, который сам сейчас с асмом трахается - "херня это все, оно не работает"... Он вообще мазохист, типа "нахер эмуль, оно работать не будет"... и продолжает
    париться с той IDE которое с них препод требует под ту или иную лабораторку. Старший хотел на 32 битах сделать, хуй - давай, мочи в 16...

    А у меня сейчас как раз практиканты, а я им "историю развития платформы" читаю, от 8086 и до момента на котором они сами за компьютер сели.

    Показал живую ХТ с EGA - у людей отвал башки от откровений... :)
     
    mcgru- likes this.
  10. fas---

    fas--- Дремучий патриархал

    Joined:
    Jun 4, 2006
    Messages:
    11,919
    Location:
    Российское Царство
    Так. Какая-то херомантия. В принципе после засовывания 3030н в АХ, там все правильно, но... Я же потом туда код процедуры 21-го прерывания сую и старшая половина затирается кодом... Брр... Т.е. вывод корректный, пока я из габаритов
    AL не вылезаю, а если что-то в верхний попадает - то затирается присвоением значения 2...
     
  11. rgreat

    rgreat FH Developer

    Joined:
    Jul 19, 2000
    Messages:
    44,838
    Location:
    Russia
    А зачем тебе вообще ассемблер для решения такой простой задачи?
     
    mcgru- likes this.
  12. fas---

    fas--- Дремучий патриархал

    Joined:
    Jun 4, 2006
    Messages:
    11,919
    Location:
    Российское Царство
    Для общего развития. Регистры, прерывания MS-DOS и прочая лабуда на простых примерах. Тут даже не столько студноте показать что-то, у них на это профильные преподы есть. Тут больше что б самому лохом полным не выглядить и понимать
    о чем люди говорят. Самообразование короче.
     
    mcgru-, anti--, zdes and 1 other person like this.
  13. Flk

    Flk Well-Known Member

    Joined:
    Aug 21, 2002
    Messages:
    18,562
    Location:
    Izhevsk
    Там по ссылке канонический вывод чисел в десятичном виде через извлечения остатков от деления на 10 и разворотом результата через стек.
     
    Last edited: Apr 12, 2024
  14. fas---

    fas--- Дремучий патриархал

    Joined:
    Jun 4, 2006
    Messages:
    11,919
    Location:
    Российское Царство
    Короче. "Я сделаль..."

    org 100h
    mov al,45
    add al,37
    aam
    add ax,3030h
    mov bx,ax
    mov dl,bh
    mov ah,02
    int 21h
    mov dl,20h
    int 21h
    mov dl,bl
    int 21h
    mov ah,4ch
    int 20h
    ret

    Вывод в консоль - 82
     
  15. Flk

    Flk Well-Known Member

    Joined:
    Aug 21, 2002
    Messages:
    18,562
    Location:
    Izhevsk
    Теперь выведи 100+ :)

    Для чего этот пробел?
    mov dl,20h
    int 21h

    И для чего mov ah,4ch перед int 20h?
    4c - функция int 21h:
     
  16. Flk

    Flk Well-Known Member

    Joined:
    Aug 21, 2002
    Messages:
    18,562
    Location:
    Izhevsk
    Там кстати есть пример вывода байта - calculate sum (обрезал лишнее):

    Code:
    name "calc-sum"
    
    org 100h ; directive make tiny com file.
    
    ; print result in decimal:
    mov al, m
    call print_al
    
    
    ; wait for any key press:
    mov ah, 0
    int 16h
    
    ret
    
    ; variables:
    m db 255
    
    print_al proc
    cmp al, 0
    jne print_al_r
        push ax
        mov al, '0'
        mov ah, 0eh
        int 10h
        pop ax
        ret
    print_al_r:   
        pusha
        mov ah, 0
        cmp ax, 0
        je pn_done
        mov dl, 10
        div dl   
        call print_al_r
        mov al, ah
        add al, 30h
        mov ah, 0eh
        int 10h   
        jmp pn_done
    pn_done:
        popa 
        ret 
    endp
     
  17. fas---

    fas--- Дремучий патриархал

    Joined:
    Jun 4, 2006
    Messages:
    11,919
    Location:
    Российское Царство
    Да, больше 100 оно корявит, я в курсе. Т.е. решение с принудительным пробелом - это что б не парится с позиционированием курсора для вывода следующего значения. Т.е. упрощенная реализация, что б лишнего не воротить.
    Тут я понимаю, что костыль, но это осознанный костыль :)

    Косяк с 4сн и прерыванием - выйти можно и через 4сн (и тогда да, надо 21) или просто вызвать 20-е, это "брек". Т.е. либо писать 21, либо убирать 4сн, оно тогда не нужно. Видать когда писал, еще не решил как оставить, а потом
    тупо забыл и оно выходит по двадцатому.
     
  18. Flk

    Flk Well-Known Member

    Joined:
    Aug 21, 2002
    Messages:
    18,562
    Location:
    Izhevsk
    Понятно, только он у тебя в этой реализации выводится между цифрами числа, а не после них, как задумано.
     
  19. fas---

    fas--- Дремучий патриархал

    Joined:
    Jun 4, 2006
    Messages:
    11,919
    Location:
    Российское Царство
    Не. Просто когда пошагово выполняешь, одно значение другое затирает. Когда просто на исполнение запускаешь, выводит нормально (сейчас закомментарил, и запустил именно на исполнение - все Ок).
     
  20. fas---

    fas--- Дремучий патриархал

    Joined:
    Jun 4, 2006
    Messages:
    11,919
    Location:
    Российское Царство
    Вот так без пробела между значениями выводит, если запуск делать, а не пошагово. Ну и лишнее закомментарил.

    org 100h
    mov al,55
    add al,44
    aam
    add ax,3030h
    mov bx,ax
    mov dl,bh
    mov ah,02
    int 21h
    ;mov dl,20h
    ;int 21h
    mov dl,bl
    int 21h
    ;mov ah,4ch
    int 20h
    ret