Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Flat Assembler - przenoszenie segmentu danych

jack99 19 Gru 2017 13:51 276 3
  • #1 19 Gru 2017 13:51
    jack99
    Poziom 2  

    Witam, mam problem z realizacją prostego zadania w Assemblerze.
    Muszę napisać w (tym) języku treść: Ala ma kota
    z tym, że:
    ma
    kota
    to są osobne segmenty danych, które trzeba przenieść do pierwszego segmentu (Ala .... ....)

    Obencie kod wygląda tak (https://pastebin.com/YGX9Ww1T) :

    format MZ
    stack stk:256
    entry codeseg:main

    segment data_1 use16 ;segment danych
    p db 'Ala ';0Dh,0Ah newline,24h znak $ w ASCII
    dlugw=$-p
    db ' ',0Dh,0Ah,24h
    db ' ',0Dh,0Ah,24h


    segment data2 use16
    w db 'ma'
    data2_size=$-w

    segment data3 use16
    z db 'kota'
    data3_size=$-z


    segment codeseg use16 ;use16 dlugosc adresu 16bit
    main: push ds
    push bx
    push dx ;wrzuca wartosciz rejestrow na stos
    push es
    push fs

    mov cx, data2_size
    mov ax, data2
    mov ds, ax
    mov si, w

    mov ax, data_1
    mov es, ax
    mov di, dlugw

    petla:
    lodsb
    stosb


    loop petla

    mov bx, data_1
    mov ds, bx

    mov dx, p
    mov ah, 9
    int 21h

    mov ah, 1
    int 21h ;czeka na wcisniecie klawisza

    pop es
    pop dx
    pop bx
    pop ds
    pop fs

    mov ax,4c00h
    int 21h
    ret

    segment stk use16
    db 256 dup(?)

    Przenosi jeden segment (Ala ma), chciałbym rozbudować, aby wyświetlało z 2 i 3 segmentu.

    0 3
  • #2 19 Gru 2017 15:24
    BlueDraco
    Specjalista - Mikrokontrolery

    No i gdzie są Twoje próby tej rozbudowy?

    Swoją drogą, nie przypuszczałem, że mamy studia z muzealnictwa komputerowego a nia nich zadania z programowania pod DOSem. Łza się w oku kręci - ostatni raz robiłem coś takiego na początku lat 1990-tych.

    0
  • #3 19 Gru 2017 16:13
    jack99
    Poziom 2  

    Zadeklarowałem trzeci segment :

    segment data3 use16
    z db 'kota'
    data3_size=$-z

    kiedy zmienię część kodu

    mov cx, data2_size
    mov ax, data2
    mov ds, ax
    mov si, w

    na

    mov cx, data2_size
    mov ax, data2
    mov ds, ax
    mov si, w

    mov cx, data2_size
    mov ax, data2
    mov ds, ax
    mov si, w

    mov cx, data3_size
    mov ax, data3
    mov ds, ax
    mov si, z

    To po prostu zamiast "Ala ma" mam "Ala kota", wiem że jest to spowodowane przez rejestr "ds". I chciałbym dowiedzieć, jak rozbudować ten program, aby do segmentu 1 (Ala), zostały dostawione segmenty 2-3 (Ala ma kota). Głównie chodzi o naprowadzenie mnie jak miałbym ten manewr zrobić.

    0
  • #4 19 Gru 2017 18:25
    BlueDraco
    Specjalista - Mikrokontrolery

    No pomyślmy. Jaka to cudowna sekwencja instrukcji powoduje kopiowanie danych z drugiego segmentu i co należałoby zrobić, żeby po dokopiowaniu z drugiego dokopiować następnie z trzeciego? Podpowiedź a + b sumuje a i b. Jakie działanie zsumuje a, b i c?

    0