Skocz do zawartości
  • Ogłoszenia

  • Gdzie świętować urodziny GMCLANu   9 użytkowników zagłosowało

    1. 1. Gdzie świętować urodziny GMCLANu


      • Warszawa (bo w centrum)
      • Szczecin (bo tam mieszka Ranma i narodził się GMCLAN)

    Żeby zagłosować w tej ankiecie, prosimy się zalogować lub zarejestrować. Zobacz temat
Chell

[ASM] load effective address, albo coś innego

Rekomendowane odpowiedzi

Chell    25

kod z poprzedniego tematu teraz wyglada tak:

format binary
use16

    org 0x100
    jmp start
    string1 db "string numer jeden$"
     

bok:
         push cx
         mov cx, 1
         mov ah, 0x02;pos
         add dh, 1
         int 0x10
         mov ah, 0x09;write
         int 0x10
         pop cx
         ret

macro print xx,yy,len,str:
         {mov dh, xx
         mov dl, yy
         call pprint1
         mov cx, len
         call pprint2}

pprint1:
         mov ah, 0x02
         int 0x10
         ret

pprint2:
         mov ah, 0x09
         mov si, cx
         sub si, 1
                 petla:
                 mov al, [string1+si]
                 int 0x10
                 sub si, 1
                 loop petla
         ret


start:
     mov al, 0x02;80x25 text
     int 0x10
     
     mov ah, 0x09;write character and attribute at cursor position     ;pasek tytulowy i menu
     mov bl, 0x40;col
     mov al, 0x00;char
     mov cx, 160;ile
     int 0x10

     mov ah, 0x02
     mov dh, 0
     mov dl, 0
     int 0x10

     print 0,31,18
     
     mov ah, 0x02                          ;bg
     mov dh, 2
     mov dl, 0
     int 0x10
     mov ah, 0x09
     mov bl, 0x70
     mov al, 0x00
     mov cx, 1760
     int 0x10
     
     mov bl, 0x74   ;dolny pasek
     
     mov ah, 2
     mov dh, 24
     int 0x10
     mov ah, 0x09
     mov al, 0xDC
     mov cx, 80
     int 0x10
     
     mov bl, 0x40   ;lewy i prawy pasek
     
     mov ah, 2
     mov dh, 1
     int 0x10
     mov al, 0x00
     mov cx, 23
     lewy:
         call bok
         loop lewy
     mov ah, 2
     mov dh, 1
     mov dl, 79
     int 0x10
     mov cx, 23
     prawy:
         call bok
         loop prawy
         
     mov ah, 2
     mov dh, 0
     mov dl, 0
     int 0x10

         
     mov ax, 0x4c00
     int 0x21

po wywolaniu makra print juz nic nas nie obchodzi, tylko rysuje sobie okienko. doszedłem do wniosku że przekazywanie argumentów przez makro jest 100x wygodniejsze, więc chwilowo na tym stanęło. pytanie tylko - jak w ten sposób przekazać dowolny string w miejsce string1? kombinowałem movem, kombinowałem lea, ale wszystko chce operować na obu bajtach rejestru.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
ediepl    2
format binary
use16

    org 0x100
    jmp start
    string1 db "string numer jeden$"
     

bok:
         push cx
         mov cx, 1
         mov ah, 0x02;pos
         add dh, 1
         int 0x10
         mov ah, 0x09;write
         int 0x10
         pop cx
         ret

macro print xx,yy,len,str:
         {mov dh, xx
         mov dl, yy
         call pprint1
         mov cx, len
         mov bp, str
         call pprint2}

pprint1:
         mov ah, 0x02
         int 0x10
         ret

pprint2:
         mov ah, 0x09
         mov si, cx
         sub si, 1

                 petla:
                 mov al, [bp+si]
                 int 0x10
                 sub si, 1
                 loop petla
         ret


start:
     mov al, 0x02;80x25 text
     int 0x10
     
     mov ah, 0x09;write character and attribute at cursor position    ;pasek tytulowy i menu
     mov bl, 0x40;col
     mov al, 0x00;char
     mov cx, 160;ile
     int 0x10

     mov ah, 0x02
     mov dh, 0
     mov dl, 0
     int 0x10

     print 0,31,18,string1
     
     mov ah, 0x02                         ;bg
     mov dh, 2
     mov dl, 0
     int 0x10
     mov ah, 0x09
     mov bl, 0x70
     mov al, 0x00
     mov cx, 1760
     int 0x10
     
     mov bl, 0x74  ;dolny pasek
     
     mov ah, 2
     mov dh, 24
     int 0x10
     mov ah, 0x09
     mov al, 0xDC
     mov cx, 80
     int 0x10
     
     mov bl, 0x40  ;lewy i prawy pasek
     
     mov ah, 2
     mov dh, 1
     int 0x10
     mov al, 0x00
     mov cx, 23
     lewy:
         call bok
         loop lewy
     mov ah, 2
     mov dh, 1
     mov dl, 79
     int 0x10
     mov cx, 23
     prawy:
         call bok
         loop prawy
         
     mov ah, 2
     mov dh, 0
     mov dl, 0
     int 0x10

         
     mov ax, 0x4c00
     int 0x21

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się tutaj.

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×