Требуется написать программу складывающую числа в девятеричной системе счисления - 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 ;
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д