Целочисленных арифметических действий - Assembler
Формулировка задачи:
Дано трехзначное натуральное число А. Получить новое натуральное число В, который являлся бы перевёртышём числа А (например, А=123, тогда В=321).
результат eax=121, а нам нужно eax=321.
Заранее буду благодарен!
include 'C:\fasmw\INCLUDE\win32ax.inc' .data text db 'eax=%d', 0 caption db 'ÐåçóëüòГ*ГІ',0 r db 100 DUP(?) A dd 123 q1 dd 10 q2 dd 100 .code main: mov eax, [A] cdq div [q2] mov eax,edx cdq div [q1] imul eax, 10 add eax,100 add eax,1 invoke wsprintfA, addr r, addr text,eax invoke MessageBox, 0, addr r, addr caption, 0 invoke ExitProcess,0 .end main
Решение задачи: «Целочисленных арифметических действий»
textual
Листинг программы
mov eax,[A]; eax=123 mov bl,10 div bl; ah=3 al=12 mov ch,ah; ch=3 mov ah,0 div bl; ah=2 al=1 mov cl,ah; cl=2 mov dl,al; dl=1 mov al,ch mul bl; al=30 add al,cl; ax=32 mul bl; ax=320 add al,dl;eax=321
Объяснение кода листинга программы
mov eax,[A]
— в начале кода переменнаяeax
получает значение 123 из области памяти, которая имеет смещение A.mov bl,10
— затем, переменнаяbl
получает значение 10.div bl;
— выполняется деление переменнойeax
на переменнуюbl
. Результат деления сохраняется в регистреah
, а остаток от деления сохраняется в регистреal
.mov ch,ah;
— значение регистраah
присваивается переменнойch
.mov ah,0;
— значение 0 присваивается региструah
.div bl;
— выполняется деление переменнойeax
на переменнуюbl
. Результат деления сохраняется в регистреah
, а остаток от деления сохраняется в регистреal
.mov cl,ah;
— значение регистраah
присваивается переменнойcl
.mov dl,al;
— значение регистраal
присваивается переменнойdl
.mov al,ch
— значение переменнойch
присваивается региструal
.mul bl;
— выполняется умножение переменнойal
на переменнуюbl
. Результат умножения сохраняется в регистреal
.add al,cl;
— к значению регистраal
прибавляется значение переменнойcl
. Результат сохраняется в регистреax
.mul bl;
— выполняется умножение переменнойax
на переменнуюbl
. Результат умножения сохраняется в регистреax
.add al,dl;
— к значению регистраal
прибавляется значение переменнойdl
. Результат сохраняется в регистреeax
.eax=321
— в конце кода значение переменнойeax
равно 321.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д