Форум.orn

HARD&SOFT => Программирование => Тема начата: Романтик от 25 Января 2007, 00:06:47

Название: TASM, MASM
Отправлено: Романтик от 25 Января 2007, 00:06:47
Выложу в тему пару простых программ. В своё время когда изучал в инсте этот язык, повесился бы за эти примеры, ибо в инете сразу маньяческие. Простеньких нету(((( Выкладывайте сюда свои программки либо ваше мнение, заметки, модули, етс

1. Межсегментные переходы
st_s segment stack "stack"

st_s ends
;==
dt1_s segment
   text1 db "TEXT1", 0ah, 0dh, "$"
dt1_s ends
;==
dt2_s segment
   text2 db "TEXT2", 0ah, 0dh, "$"
      adr1 dd segm1
      adr2 dd segm2
dt2_s ends
;==
dt3_s segment
   text3 db "TEXT3", 0ah, 0dh, "$"
dt3_s ends
;===================
ct1_s segment
   assume ss : st_s, ds : dt2_s, cs : ct2_s;

   segm2 label far
      mov ax, dt2_s
      mov ds, ax

      mov ah, 9h
      lea dx, text2
      int 21h
      

   jmp far ptr endall   

ct1_s ends
;==
ct2_s segment
   assume ss : st_s, ds : dt3_s, cs : ct2_s;

   segm1 label far
      mov ax, dt3_s
      mov ds, ax

      mov ah, 9h
      lea dx, text3
      int 21h

            assume ds: dt2_s
            mov ax, dt2_s
            mov ds, ax

      jmp[adr2]
            

         
ct2_s ends
;==
ct3_s segment
   assume ss : st_s, ds : dt1_s, cs : ct3_s;
      begin:
         mov ax, dt1_s
         mov ds, ax

         mov ah, 9h
         lea dx, text1
         int 21h

            assume ds: dt2_s
            mov ax, dt2_s
            mov ds, ax

         jmp[adr1]


   endall:

      mov ah, 4ch
      int 21h
ct3_s ends
      end begin;
;==


2. Вывод не попорядку из стека
st_s segment stack "stack"

st_s ends
;====
dt_s segment

dt_s ends
;====
ct_s segment
   assume ss: st_s, ds: dt_s, cs: ct_s
      begin:
         mov ax, 31h
         ;mov ax, 0 - for numeric format
         mov cx, 6
            m1:
               push ax
               inc ax
            loop m1

         mov cx, 3
         mov bp, sp
            m2:
               mov dx, [bp]
               add bp, 4

               mov ah, 2
               add dx, 30h
               int 21h   
            loop m2
;=======================
         mov cx, 3
         mov bp, sp
            m3:
               mov dx, [bp+2]
               add bp, 4

               mov ah, 2
               add dx, 30h
               int 21h   
            loop m3

   mov ah, 4ch
   int 21h
ct_s ends
      end begin



3. Выбор цифр и букв

st_s segment stack "stack"

st_s ends
;====
dt_s segment
   mas dw "S", "Q", 1, 3, 7, "R", 6, 5
dt_s ends
;====
ct_s segment
   assume ss: st_s, ds: dt_s, cs: ct_S
      begin:
         mov ax, dt_s
         mov ds, ax

         mov bx, 0
         mov dx, 0
         mov di, 0

         mov cx, 8

            m1:
               mov ax, mas[di]
               inc di
               
               cmp ax, 9h
               jnl m2

               inc bx
               jmp m3


                  m2:
                  inc dx
               m3:

            loop m1   

         ;=======
         mov ah, 2
         add dx, 30h
         int 21h

         mov dx, bx

         mov ah, 2
         add dx, 30h
         int 21h
         
   mov ah, 4ch
   int 21h
ct_s ends
      end begin