Голосование

Умеете ливы программировать на асме?

Профессионально
2 (4.8%)
Хорошо
2 (4.8%)
Базовые знания
4 (9.5%)
Нет, но скоро планирую
3 (7.1%)
Нет, а зачем?
26 (61.9%)
Фу старьё!
5 (11.9%)

Проголосовало пользователей: 30

Автор Тема: TASM, MASM  (Прочитано 2521 раз)

Оффлайн Романтик

  • Продвинутый
  • *****
  • Сообщений: 1182
  • Карма: +33/-0
    • Просмотр профиля
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