пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

Из одной сс в другую (моя версия)

.model small
.stack 100h

.data
    MsgInput db "Input number: $"
    MsgResult db 10, 13, "Result: $"

.code
start:
    mov ax, @data
    mov ds, ax

    mov dx, offset MsgInput
    mov ah, 09h
    int 21h

input:    mov ah, 00h    ; Ввод числа до нажатия 'Enter'
    int 16h

    cmp al, 0Dh    ; Если нажат Enter
    je a0        ; Переходим к a0

    cmp al, '0'    ; Если введены не 0 или 1
    jl input    ; Получаем следующий символ

    cmp al, '9'
    jg input

    mov dl, al    ; Вывод введенного символа
    mov ah, 02h
    int 21h

    sub al, 30h    ; Превращаем ASCII символ в число
    xor ah, ah
    xchg ax, bx    ; Обнуляем ah и меняем ax и bx местами

    mov dx, 5    ; Умножаем ax на 2
    mul dx

    add bx, ax    ; Складываем ax и bx
    jmp input

a0:    mov dx, offset MsgResult
    mov ah, 09h
    int 21h

    mov ax, bx    ; Перевод числа в семеричную сс
    mov dx, 4    ; В dx - сс, в которую переводить
    xor cx, cx

a1:    xor bx, bx

a2:    cmp ax, dx    ; Сравниваем ax и dx
    jb a3        ; Если ax меньше, то пер. к a3
    sub ax, dx    ; Если больше, то отнимаем dx от ax
    inc bx        ; bx - количество "отниманий"
    jmp a2        ; Проверяем снова

a3:    add ax, '0'    ; Превращаем ax в ASCII символ
    push ax        ; Засоввываем его в стек
    inc cx        ; cx - количество символов для вывода в a4
    xchg ax, bx    ; Меняем ax и bx местами
    cmp ax, 0    ; Если ax не равен нулю, то переходим к a1
    jne a1

a4:    pop dx        ; Вывод результата из стека посимвольно 
    mov ah, 02h
    int 21h
    loop a4

exit:    mov ah, 00h
    int 16h

    mov ah, 4ch
    int 21h
end start

 


15.01.2014; 21:28
хиты: 133
рейтинг:0
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь