Написать комментарии для программы, пожалуйста) - Assembler
Формулировка задачи:
Листинг программы
- .model tiny
- .stack 100h
- .data
- outStr db '0000$'
- .code
- translByte proc
- push ax
- push ax
- shr al,4
- cmp al,9
- ja greater10
- mov byte ptr [bx],'0'
- add [bx],al
- jmp next4Bit
- greater10:
- mov byte ptr [bx],'A'
- sub al,10
- add [bx],al
- next4Bit:
- pop ax
- and al,0Fh
- cmp al,9
- ja _greater10
- mov byte ptr [bx+1],'0'
- add [bx+1],al
- jmp exitByteProc
- _greater10:
- mov byte ptr [bx+1],'A'
- sub al,10
- add [bx+1],al
- exitByteProc:
- pop ax
- ret
- translByte endp
- translWord proc
- push ax
- push ax
- shr ax,8
- call translByte
- pop ax
- and ax,00FFh
- add bx,2
- call translByte
- sub bx,2
- pop ax
- ret
- translWord endp
- start:
- mov ax,@data
- mov ds,ax
- mov bx,OFFSET outStr
- mov ax,60000
- call translWord
- mov ah,9
- mov dx,OFFSET outStr
- int 21h
- mov ax,4c00h
- int 21h
- end start
Решение задачи: «Написать комментарии для программы, пожалуйста)»
textual
Листинг программы
- .286 ;разрешение команд для процессора i80286
- .model small ;определение модели памяти small
- .stack 100h ;определение размера стека 256 байт
- .data ;начало описания сегмента данных
- outStr db '0000$' ;выделение переменной 5 байт
- .code ;начало описания сегмента кода
- translByte proc
- push ax ;сохранение регистра ax
- push ax
- shr al,4 ;сдвиг вправо на 4 бита
- cmp al,9 ;сравнение al с числом 9
- ja greater10 ;перейти, если больше
- mov byte ptr [bx],'0' ;поместить символ '0' в текущую позицию строки
- add [bx],al ;сложить код '0' в текущей позиции строки со значением в регистре al
- jmp next4Bit ;перейти к обработке младших четырёх бит
- greater10:
- mov byte ptr [bx],'A' ;поместить символ 'A' в текущую позицию строки
- sub al,10 ;вычесть из регистра al число 10
- add [bx],al ;сложить код 'A' в текущей позиции строки со значением в регистре al
- next4Bit:
- pop ax ;восстановить значение ax из стека
- and al,0Fh ;выделить в al младшие четыре бита
- cmp al,9 ;сравнение al с числом 9
- ja _greater10 ;перейти, если больше
- mov byte ptr [bx+1],'0' ;поместить символ '0' в текущую позицию строки
- add [bx+1],al ;сложить код '0' в текущей позиции строки со значением в регистре al
- jmp exitByteProc ;перейти к завершению процедуры
- _greater10:
- mov byte ptr [bx+1],'A' ;поместить символ 'A' в следующую позицию строки
- sub al,10 ;вычесть из регистра al число 10
- add [bx+1],al ;сложить код 'A' в следующей позиции строки со значением в регистре al
- exitByteProc:
- pop ax ;восстановление содержимого регистра ax
- ret ;завершение процедуры
- translByte endp
- translWord proc
- push ax ;сохранение регистра ax
- push ax ;преобразуем старший байт слова
- shr ax,8 ;сдвиг вправо на 8
- call translByte ;вызов процедуры преобразования байта
- pop ax ;преобразуем младший байт слова
- and ax,00FFh ;выделение младшего байта из слова
- add bx,2 ;указатель на строку указывает на 3-й символ
- call translByte ;вызов процедуры преобразования байта
- sub bx,2 ;восстановление исходного значения регистра bx
- pop ax ;восстановление исходного значения регистра ax
- ret ;завершение процедуры
- translWord endp
- start:
- mov ax,@data ;инициализация сегментного регистра данных
- mov ds,ax
- mov bx,OFFSET outStr ;формирование параметров процедуры
- mov ax,60000
- call translWord ;вызов процедуры
- mov ah,9 ;вывод на экран полученной строки
- mov dx,OFFSET outStr
- int 21h
- mov ax,4c00h ;завершение программы
- int 21h
- end start
Объяснение кода листинга программы
- Код написан на ассемблере для процессора i80286.
- Размер стека 256 байт.
- Модель памяти - small.
- Сегмент данных начинается с адреса 100h.
- Переменная outStr содержит строку '0000$'.
- Процедура translByte преобразует один байт в шестнадцатеричную систему счисления.
- Процедура translWord преобразует два байта в шестнадцатеричную систему счисления.
- Начало программы помечено меткой start.
- Программа инициализирует сегментный регистр данных и сегментный регистр стека.
- Затем программа вызывает процедуру translWord для преобразования двух байтов в шестнадцатеричную систему счисления.
- Результат выводится на экран с помощью функции int 21h.
- Программа завершается с кодом 4c00h.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д