Архитектура микропроцессоров и их программирование. Карягин А.П. - 42 стр.

UptoLike

Составители: 

42
Идея работы программы состоит в том, что в соответствии с кодом (N)
регистра CX будет осуществляться N-кратный регистра AX. После операции
сдвига содержимое регистра АХ преобразуется к символьному виду и соответ-
ствующей процедурой выводится на экран монитора (см. пример 4.2).
Пример 4.2 - Написать программу моделирования дешифратора
К155ИД3 на языке Ассемблера. Текст программы:
title modell_id3
;----------------------------------------
stacksg segment para stack 'stack'
dw 32 dup (?)
stacksg ends
;----------------------------------------
datasg segment para 'data'
indat1 db '0000',10,13 ;входные данные
indat2 dw 0
outdat db '0000000000000000','$' ;выходные данные
datasg ends
;----------------------------------------
codesg segment para 'code'
begin proc far
assume cs:codesg,ds:datasg,ss:stacksg
push ds
sub ax,ax
push ax
mov ax,datasg ;настройка сегмента
mov ds,ax ;данных
call vvod ;ввод данных
;------------------------------------------
lea si,indat1-1
mov bx,04 ;преобразование
mov cx,01 ;символьных
a10: ;данных
mov al,[si+bx] ;(ASCII-код)
and ax,000fh ;в
mul cx ;двоичное
add indat2,ax ;число
shl cx,1
dec bx
jnz a10
mov cx,indat2 ;(сх)= число сдвигов
mov ax,0fffeh ;(ах)= 1111111111111110
rol ax,cl ;циклический сдвиг влево
; преобразование двоичного числа в символьное
;--------------------------------------------
       Идея работы программы состоит в том, что в соответствии с кодом (N)
регистра CX будет осуществляться N-кратный регистра AX. После операции
сдвига содержимое регистра АХ преобразуется к символьному виду и соответ-
ствующей процедурой выводится на экран монитора (см. пример 4.2).
       Пример 4.2 - Написать     программу моделирования дешифратора
К155ИД3 на языке Ассемблера. Текст программы:

      title modell_id3
      ;----------------------------------------
      stacksg segment para stack 'stack'
            dw 32 dup (?)
      stacksg ends
      ;----------------------------------------
      datasg segment para 'data'
      indat1 db '0000',10,13                    ;входные данные
      indat2 dw 0
      outdat db '0000000000000000','$' ;выходные данные
      datasg ends
      ;----------------------------------------
      codesg segment para 'code'
      begin proc far
      assume cs:codesg,ds:datasg,ss:stacksg
            push ds
            sub ax,ax
            push ax
            mov ax,datasg             ;настройка сегмента
            mov ds,ax                       ;данных
            call vvod                   ;ввод данных
      ;------------------------------------------
            lea si,indat1-1
            mov bx,04                ;преобразование
            mov cx,01                  ;символьных
      a10:                                 ;данных
            mov al,[si+bx]              ;(ASCII-код)
            and ax,000fh                   ;в
            mul cx                           ;двоичное
            add indat2,ax                     ;число
            shl cx,1
            dec bx
            jnz a10
            mov cx,indat2             ;(сх)= число сдвигов
            mov ax,0fffeh             ;(ах)= 1111111111111110
            rol ax,cl                 ;циклический сдвиг влево
      ; преобразование двоичного числа в символьное
      ;--------------------------------------------
42