Требуется написать программу складывающую числа в девятеричной системе счисления - Assembler

Узнай цену своей работы

Формулировка задачи:

Есть программа складывающая два числа в десятичной сс, как сделать так, чтобы она складывала в девятеричной, может знает кто...

Решение задачи: «Требуется написать программу складывающую числа в девятеричной системе счисления»

textual
Листинг программы
org  100h
jmp  start
 
msgS    db  13,10,' System  : $'
msgA    db  13,10,' Enter(A): $'
msgB    db  13,10,' Enter(B): $'
msgX    db  13,10,'----------------------'
        db  13,10,' Result  : $'
inErr   db  7,' <--Value out of range!$'
system  dw  10
 
start:
   mov   ah,9            ;
   mov   dx,msgS         ;
   int   21h             ;
   mov   ah,1            ; ввод системы счисления
   int   21h             ;
   cmp   al,13           ; Enter = десятичная (по-умолчанию)
   je    decimal
   and   ax,0Fh          ; символ -> число
   mov   [system],ax     ; запомним систему счисления
decimal:
 
   mov   ah,9            ;
   mov   dx,msgA         ;
   int   21h             ;
   mov   bx,[system]     ; система счисления для ввода
   call  ASC2HEX         ; зовём функцию
   or    dx,dx           ; проверка на переполнение
   jnz   error           ; DX должен быть нуль
   push  cx              ; запомним введённое число(А)
 
   mov   ah,9            ;
   mov   dx,msgB         ;
   int   21h             ;
   mov   bx,[system]     ;
   call  ASC2HEX         ;
   or    dx,dx           ;
   jnz   error           ;
   push  cx              ; запомним число(В)
 
   mov   ah,9            ; результат
   mov   dx,msgX         ;
   int   21h             ;
   pop   ax bx           ; AX,BX = введённые числа
 
   add   ax,bx           ; складываем их
   jc    error           ; проверка на переполнение AX
   mov   bx,[system]     ; выводим сумму в указанной СС
   call  HEX2ASC         ;
   jmp   exit            ;
 
error:                   ; если число юзера больше FFFFh,
   mov   ah,9            ; ..то ошибка!
   mov   dx,inErr        ;
   int   21h             ;
 
exit:                    ;
   xor   ax,ax           ;
   int   16h             ;
   int   20h             ; выход в DOS...
 
;*********************************************************************
ASC2HEX:                 ; Процедура перевода символов в число
   xor   cx,cx           ; Вход:  ВХ = система счисления
@@:                      ; Выход: СХ = число
   xor   ax,ax           ;
   int   16h             ; ждём символ..
   cmp   al,13           ; Enter заканчивает ввод
   jz    stop            ;
   cmp   al,'0'          ; фильтр цифр
   jb    @b              ; ^
   cmp   al,'9'          ; ^
   ja    @b              ; ^
   int   29h             ; покажем ввод на экране
   and   ax,0fh          ; перевод символа в число
   cmp   ax,bx           ; тест с системой счисления
   jae   overlow         ; больше/равно - ошибка
   xchg  ax,cx           ;
   xor   dx,dx           ;
   mul   bx              ;
   add   cx,ax           ; иначе: число в СХ
   jmp   @b              ; сл.символ..
overlow:                 ;
   jmp   error           ; на обработчик ошибки
stop:                    ;
RET                      ;
 
;*********************************************************************
HEX2ASC:                 ; Функция переводит числа в символы
   pusha                 ; Вход:  АХ = число, BX = система счисления
   xor   cx,cx           ; счётчик разрядов числа
isDiv:                   ;
   xor   dx,dx           ;
   div   bx              ; делитель
   push  dx              ; остаток будет числом
   inc   cx              ;
   or    ax,ax           ;
   jnz   isDiv           ;
isOut:                   ;
   pop   ax              ; выводим его на экран
   cmp   al,9            ;
   jle   noHex           ;
   add   al,7            ;
noHex:                   ;
   add   al,30h          ;
   int   29h             ;
   loop  isOut           ;
   popa                  ;
RET                      ;

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.857 из 5
Похожие ответы