Преобразование строки двоичных цифр в эквивалентное ей целое десятичное число - Assembler
Формулировка задачи:
2. Написать и протестировать функцию, которая преобразует строку двоичных цифр в эквивалентное ей целое десятичное число.На Ассемблере
Решение задачи: «Преобразование строки двоичных цифр в эквивалентное ей целое десятичное число»
textual
Листинг программы
@stack segment para stack db 1024 dup(?) @stack ends @data segment A db '0101011111111' LenA equ ($-A) B db '1010101010101010' LenB equ ($-B) C db '1x10101010101010' LenC equ ($-C) D db '10101010101010100' LenD equ ($-D) CrLf db 0Dh, 0Ah, '$' @data ends @code segment assume cs:@code, ds:@data, ss:@stack main proc ;инициализация сегментного регистра данных mov ax, @data mov ds, ax ;1 lea dx, [A] mov cx, LenA call TestProc ;2 lea dx, [B] mov cx, LenB call TestProc ;3 lea dx, [C] mov cx, LenC call TestProc ;4 lea dx, [D] mov cx, LenD call TestProc ;завершение программы mov ax, 4C00h int 21h main endp ;Функция преобразует строку из не более 16 символов ;с двоичными цифрами в число ;на входе: ; ds:dx - адрес строки с числом ; cx - длина строки ;на выходе: ; ax - эквивалентное строке целое число BinToNum proc push bx push cx push dx push si push di mov ax, 0 jcxz @@ExitBinToNum cmp cx, 16 ja @@ExitBinToNum mov bx, 0 mov si, dx @@ForBinToNum: mov dl, byte ptr [si] inc si cmp dl, '0' ;если символ не двоичная цифра - выйти jb @@ExitBinToNum cmp dl, '1' ja @@ExitBinToNum sub dl, '0'+1 ;Result:=(Result << 1)+цифра cmc rcl bx, 1 loop @@ForBinToNum mov ax, bx @@ExitBinToNum: pop di pop si pop dx pop cx pop bx ret BinToNum endp ;Процедура для проверки функции преобразования строки в число TestProc proc push ax push bx push cx push dx push si push di call BinToNum push ax mov ah, 09h lea dx, [CrLf] int 21h pop ax call Show_AX pop di pop si pop dx pop cx pop bx pop ax ret TestProc endp ; выводит знаковое 16-разрядное число из регистра AX на экран ; входные данные: ; ax - число для отображения Show_AX proc push ax push bx push cx push dx push di mov cx, 10 xor di, di ; di - кол. цифр в числе @@Conv: xor dx, dx div cx ; dl = num mod 10 add dl, '0' ; перевод в символьный формат inc di push dx ; складываем в стек or ax, ax jnz @@Conv ; выводим из стека на экран @@Show: pop dx ; dl = очередной выводимый символ mov ah, 2 ; ah - функция вывода символа на экран int 21h dec di ; повторяем пока di<>0 jnz @@Show pop di pop dx pop cx pop bx pop ax ret Show_AX endp @code ends end main
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д