Определить первую и последнюю цифры числа - Assembler

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

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

2.Написать и протестировать функцию,которая по заданному натуральному числу определяет его первую и последнюю цифры.

Решение задачи: «Определить первую и последнюю цифры числа»

textual
Листинг программы
@stack  segment para stack
        db      1024 dup(?)
@stack  ends
 
@data   segment
        N               dw      45678
        First           db      ?
        Last            db      ?
        MsgFirst        db      'The First digit: '
        FirstChar       db      ?
                        db      0Dh, 0Ah
                        db      'The Last digit: '
        LastChar        db      ?
        CrLf            db      0Dh, 0Ah, '$'
@data   ends
 
@code   segment
        assume  cs:@code, ds:@data, ss:@stack
main    proc
        ;инициализация сегментного регистра данных
        mov     ax,     @data
        mov     ds,     ax
 
        mov     ax,     [N]
        call    GetFirstLastDigits
        mov     [Last], al
        mov     [First],ah
        ;Преобразование результата для вывода на экран
        add     ax,     '00'
        mov     [LastChar],     al
        mov     [FirstChar],    ah
        ;вывод результата
        mov     ah,     09h
        lea     dx,     [MsgFirst]
        int     21h
        ;завершение программы
        mov     ax,     4C00h
        int 21h
main    endp
 
;Функция возвращает первую и последнюю цифры числа
;на входе:
;  ax - число
;на выходе:
;  al - последняя (младшая) цифра числа
;  ah - первая (старшая) цифра числа
GetFirstLastDigits      proc
        push    bx
        push    cx
        push    dx
 
        ;записываем в стек цифры заданного числа
        mov     bx,     10      ;делитель
        mov     cx,     0       ;количество цифр в числе
        @@While:
                mov     dx,     0
                div     bx
                push    dx
                inc     cx
        cmp     ax,     0
        jnz     @@While
 
        ;извлекаем цифры из стека
        mov     ah,     dl      ;запоминаем первую цифру
        @@For:
                pop     dx
        loop    @@For
        mov     al,     dl
 
        pop     dx
        pop     cx
        pop     bx
        ret
GetFirstLastDigits      endp
 
@code   ends
 
        end     main

Объяснение кода листинга программы

В этом коде на языке Assembler выполняется следующая последовательность действий:

  1. Инициализация сегментного регистра данных
  2. Загрузка числа в регистр ax
  3. Вызов функции GetFirstLastDigits
  4. Сохранение результата в регистрах al и ah
  5. Преобразование результата для вывода на экран
  6. Вывод результата на экран
  7. Завершение программы Функция GetFirstLastDigits выполняет следующие действия:
  8. Записывает цифры числа в стек
  9. Извлекает цифры из стека и сохраняет их в регистрах ah и al В коде используются следующие переменные: — N - число, для которого необходимо определить первую и последнюю цифры — First - первая (старшая) цифра числа — Last - последняя (младшая) цифра числа — FirstChar - переменная для сохранения первой цифры в формате символа — LastChar - переменная для сохранения последней цифры в формате символа — MsgFirst - строка сообщения для вывода первой цифры — LastChar - строка сообщения для вывода последней цифры — CrLf - строка символов для перевода строки В коде используются следующие команды: — mov - перенос значения одной переменной в другую — call - вызов функции — push - сохранение значения переменной в стеке — pop - извлечение значения переменной из стека — div - деление одной переменной на другую — cmp - сравнение двух переменных — jnz - переход к следующему действию, если значение переменной не равно нулю — inc - увеличение значения переменной на единицу — loop - повторение цикла определенное количество раз — ret - возврат из функции с указанным значением

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


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

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

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