Программирование обработки, преобразования и ввода-вывода данных на ассемблере ПЭВМ. Домнин Л.Н. - 27 стр.

UptoLike

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

26
extrn des:word
public ascbin
;------------------------------------------------------------;
cseg segment para public 'code' ;
ascbin proc far ; с ;
assume cs:cseg ; ;
push bx ; Сохранение содержимого ; е ;
push cx ; рабочих регистров ; ;
push si ; ; г ;
Продолжение прил.
mov ax,0 ; ; ;
mov bx,0 ; Подготовка цикла ; м ;
mov cx,3 ; ; ;
povt1: ; е ;
imul des ; ax:=ax*10 ; ;
inc si ; Формирование в bl ; н ;
mov bl,[si] ; двоичного эквивалента ; ;
and bl,0fh ; i-го разряда числа ; т ;
add ax,bx ; ax:=ax+bl (bh содерж. 0); ;
loop povt1 ; ; ;
pop si ; Восстановление si ; ;
cmp byte ptr [si],'+' ; формирование ; ;
je pos ; знака двоичного ; к ;
neg ax ; эквивалента числа ; ;
pos: ; о ;
pop cx ; Восстановление содержимого ; ;
pop bx ; рабочих регистров ; д ;
ret ; Возврат в вызывающую программу ; ;
ascbin endp ; а ;
;------------------------------------------------------- ;
cseg ends ;
;------------------------------------------------------------;
end
Подпрограмма func
Обеспечивает вычисление функции y=(a+b)*c/d, где a,b,c,d дво-
ичные знаковые числа в формате слова. Перед запуском
func в
регистр
bx должен быть помещен адрес начала таблицы, содержа-
щей адреса аргументов a,b,c,d и адрес результата
y.
Используемые регистры:
ax,bx,dx,si.
        extrn    des:word
        public   ascbin
;------------------------------------------------------------;
cseg    segment para public 'code'                           ;
ascbin proc      far                                   ; с ;
        assume   cs:cseg                               ;     ;
        push     bx        ; Сохранение содержимого    ; е ;
        push     cx        ; рабочих регистров         ;     ;
        push     si        ;                           ; г ;
                                                Продолжение прил.

       mov      ax,0           ;                       ;     ;
       mov      bx,0           ; Подготовка цикла      ; м ;
       mov      cx,3           ;                       ;     ;
povt1:                                                 ; е ;
        imul     des         ; ax:=ax*10               ;     ;
        inc      si      ; Формирование в bl           ; н ;
        mov      bl,[si] ; двоичного эквивалента       ;     ;
        and      bl,0fh ; i-го разряда числа           ; т ;
        add      ax,bx       ; ax:=ax+bl (bh содерж. 0);     ;
        loop     povt1       ;                         ;     ;
        pop      si          ; Восстановление si       ;     ;
        cmp      byte ptr [si],'+' ; формирование      ;     ;
        je       pos               ; знака двоичного   ; к ;
        neg      ax                ; эквивалента числа ;     ;
pos:                                                   ; о ;
        pop      cx   ; Восстановление содержимого     ;     ;
        pop      bx   ; рабочих регистров              ; д ;
        ret           ; Возврат в вызывающую программу ;     ;
ascbin endp                                            ; а ;
;-------------------------------------------------------     ;
cseg    ends                                                 ;
;------------------------------------------------------------;
        end

                       Подпрограмма   func

   Обеспечивает вычисление функции y=(a+b)*c/d, где a,b,c,d дво-
ичные знаковые числа в формате слова. Перед запуском func в
регистр bx должен быть помещен адрес начала таблицы, содержа-
щей адреса аргументов a,b,c,d и адрес результата y.
  Используемые регистры: ax,bx,dx,si.
                            26