Переведите в двоичную систему счисления число 57 - Assembler
Формулировка задачи:
Нужно написать программу для 16 разрядного ассемблера:
Переведите в двоичную систему счисления число 57.
Решение задачи: «Переведите в двоичную систему счисления число 57»
textual
Листинг программы
LOCALS .model small .stack 100h .data CrLf db 0Dh, 0Ah, '$' .code main proc mov ax, @data mov ds, ax mov ax, 57 call ShowBin mov ax, 4C00h int 21h main endp ;выводит на экран в двоичной системе счисления содержимое регистра AX ; входные данные: ; ax - число для отображения ShowBin proc push ax push bx push cx mov bx, ax ; из-за распределения регистров ; при выводе на экран с помощью int 29h, ; выводимое число будет находится в bx mov cx, 16 ; переменная цикла равна количеству бит в слове @@For: mov ax, '0' ; в регистрах al=код символа '0', ah=00h shl bx, 1 ; выделение бита adc al, ah ; сложение кода символа '0' со значением выделенного бита int 29h loop @@For pop cx pop bx pop ax ret ShowBin endp end main
Объяснение кода листинга программы
- LOCALS - сегменты данных и кода, а также стек, инициализируются перед выполнением программы.
- .model small - указывает компилятору, что программа написана для 16-битного процессора и использует небольшой сегментный режим.
- .stack 100h - устанавливает размер стека в 100 байтов.
- .data - сегмент данных, в котором хранятся константы и переменные программы.
- CrLf db 0Dh, 0Ah, '$' - определяет строку, которая выводится на экран после каждого выводимого числа.
- main proc - метка процедуры, которая является точкой входа в программу.
- mov ax, @data - перемещает адрес сегмента данных в регистр AX.
- mov ds, ax - устанавливает сегмент данных равным сегменту, указанному в регистре AX.
- mov ax, 57 - перемещает число 57 в регистр AX.
- call ShowBin - вызывает процедуру ShowBin, передавая ей в качестве аргумента число из регистра AX.
- mov ax, 4C00h - перемещает в регистр AX число, которое является кодом окончания работы программы.
- int 21h - вызывает функцию окончания работы программы.
- ShowBin proc - метка процедуры, которая выводит число в двоичной системе счисления.
- push ax - откладывает в стек значение регистра AX.
- push bx - откладывает в стек значение регистра BX.
- push cx - откладывает в стек значение регистра CX.
- mov bx, ax - копирует значение регистра AX в регистр BX.
- mov cx, 16 - устанавливает значение переменной CX равным 16.
- @@For: - метка цикла, который выполняется 16 раз.
- mov ax, '0' - перемещает в регистр AX число, которое является кодом символа '0'.
- shl bx, 1 - сдвигает значение регистра BX вправо на один бит.
- adc al, ah - складывает значение регистра AX с значением выделенного бита, сохраняя результат в регистре AX.
- int 29h - выводит на экран символ, соответствующий числу в регистре AX.
- loop @@For - продолжает выполнение цикла до тех пор, пока не будет выполнено условие остановки.
- pop cx - восстанавливает из стека значение переменной CX.
- pop bx - восстанавливает из стека значение регистра BX.
- pop ax - восстанавливает из стека значение регистра AX.
- ret - завершает выполнение процедуры.
- end main - указывает точку окончания программы.