Изучение языка ассемблера для персональных компьютеров

Страницы работы

Содержание работы

Федеральное агентство по образованию

Красноярский государственный технический университет

ЦУ И МП

Лабораторная работа № 1

ИЗУЧЕНИЕ ЯЗЫКА АССЕМБЛЕРА ДЛЯ

ПЕРСОНАЛЬНЫХ КОМПЬЮТЕРОВ

Выполнили:

Студент гр. Р52-1

Яксанов П.

Красноярск 2005

Цель работы:

  Знакомство со структурой программы при программировании на языке ассемблера для персональных компьютеров, компилирование программы, отладка программы с помощью TURBO DEBUGER.

Задание:

  Вариант № 5. Сформировать массив из 10 двухбайтных чисел. Переписать во второй массив все отрицательные числа.

Текст программы:

; Laba 1

; Variant 5

        seg_data segment para public 'data'

         mas_in  dw      2h,0fffeh,20h,1bh,0ffbfh,0ffa2h,66h,0ff9ah,3ah,43h,0ffdbh

         mas_out dw      0ah dup ('#')

        seg_data ends

        seg_stack segment stack

         db      256 dup ('?')

        seg_stack ends

        seg_code segment para public 'code'

         main    proc

          assume  ds:seg_data, cs:seg_code, ss:seg_stack

          mov     ax,seg_data

          mov     ds,ax

; обнуляем регистры

          mov     ax,0

          mov     bx,0

          mov     cx,0

          mov     dx,0

          mov     si,0

          mov     di,0

; сравнение

srav:     mov     ax,mas_in[si]

          add     si,2

          cmp     si,20

          ja      exit

          cmp     ax,0

          jge     srav

          mov     mas_out[di],ax

          jmp     srav

; выход

exit:     mov    ah,4ch

          int    21h

         main endp

        seg_code ends

       end main

Лабораторная работа № 2

ИЗУЧЕНИЕ  СТАНДАРТНЫХ  ФУНКЦИЙ  ПРЕРЫВАНИЯ  DOS

Цель работы:

Знакомство со стандартными функциями прерывания DOS, вывод информации на дисплей, ввод данных с клавиатуры и запись в файл.

Текстпрограммы:

; Laba 2

; Variant 5

        seg_data segment para public 'data'

         mas_in  dw   0ah dup ('?')

         mas_out dw 0ah dup ('#')

         mess            db  0ah,0dh,'$'

         razrad            dw  0ah

         des_t             dw  2710h

         tis                  dw  1000

         sot                 dw  100

         des                dw  10

        seg_data         ends

        seg_stack segment stack

         db      256 dup ('?')

        seg_stack ends

        seg_code segment para public 'code'

         main    proc

          assume  ds:seg_data, cs:seg_code, ss:seg_stack

          mov    ax,seg_data

          mov    ds,ax

; обнуляем регистры

          mov    ax,0

          mov    bx,0

          mov    cx,0

          mov    dx,0

          mov    si,0

          mov    di,0

; ввод элементов массива

ent:    mov             ah,9h

          lea      dx,mess

          int      21h

          mov             ah,1h

          int      21h

          cmp   al,2dh

          jne     ddd

          mov             di,1

          mov             ah,1h

          int      21h

ddd:   sub     al,30h

          xor     ah,ah

          add     bx,ax

          mov             cx,4

cikl:   mov             ah,1h

          int      21h

          cmp   al,0dh

          je       zap

          push   ax

          mov  ax,bx

          mul    razrad

          mov   bx,ax

          pop    ax

          sub     al,30h

          xor     ah,ah

          add     bx,ax

          loop   cikl

          jmp    zap

; запись

zap:   cmp    di,1

          jne    dd2

          neg    bx

dd2:   xor    di,di

          mov    mas_in[si],bx

          xor     bx,bx

          add    si,2

          cmp    si,20

          jb       ent

          xor    si,si

          jmp    srav

; сравнение

srav:  mov    ax,mas_in[si]

          add     si,2

          cmp    si,20

          ja      print

          cmp    ax,0

          jge     srav

          mov    mas_out[di],ax

          add     di,2

          jmp     srav

; вывод элементов второго массива

print: xor    si,si

          xor    dx,dx

          mov   ah,9h

          lea      dx,mess

          int      21h

dd3:             mov    ah,9h

          lea      dx,mess

          int      21h

          mov             ax,mas_out[si]

          neg    ax

          mov             bx,ax

          mov             dl,2dh

          mov             ah,2h

          int      21h

          xor    ah,ah

          xor    dx,dx

          mov             ax,bx

          div    des_t

          mov             cx,dx

          add    al,30h

          mov             dl,al

          mov             ah,2h

          int      21h

          xor    dx,dx

          mov   ax,cx

          div    tis

          mov             cx,dx

          add    al,30h

          mov             dl,al

          mov             ah,2h

          int      21h

          xor    ah,ah

          xor    dx,dx

          mov             ax,cx

          div    sot

          mov             cx,dx

          add    al,30h

          mov             dl,al

          mov             ah,2h

          int      21h

          xor    ah,ah

          xor    dx,dx

          mov    ax,cx

          div    des

          mov             cx,dx

          add    al,30h

          mov             dl,al

          mov             ah,2h

          int      21h

          xor    ah,ah

          xor    dx,dx

          mov             ax,cx

          add    al,30h

          mov             dl,al

          mov             ah,2h

          int      21h

          xor    dx,dx

          xor    ah,ah

          add    si,2

          cmp    si,di

          jb       dd3

; выход из программы

exit:   mov             ah,4ch

          int      21h

         main   endp

        seg_code ends

       end main

Похожие материалы

Информация о работе