Целочисленных арифметических действий - Assembler

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

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

Дано трехзначное натуральное число А. Получить новое натуральное число В, который являлся бы перевёртышём числа А (например, А=123, тогда В=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
результат eax=121, а нам нужно eax=321. Заранее буду благодарен!

Решение задачи: «Целочисленных арифметических действий»

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

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

  1. mov eax,[A] — в начале кода переменная eax получает значение 123 из области памяти, которая имеет смещение A.
  2. mov bl,10 — затем, переменная bl получает значение 10.
  3. div bl; — выполняется деление переменной eax на переменную bl. Результат деления сохраняется в регистре ah, а остаток от деления сохраняется в регистре al.
  4. mov ch,ah; — значение регистра ah присваивается переменной ch.
  5. mov ah,0; — значение 0 присваивается регистру ah.
  6. div bl; — выполняется деление переменной eax на переменную bl. Результат деления сохраняется в регистре ah, а остаток от деления сохраняется в регистре al.
  7. mov cl,ah; — значение регистра ah присваивается переменной cl.
  8. mov dl,al; — значение регистра al присваивается переменной dl.
  9. mov al,ch — значение переменной ch присваивается регистру al.
  10. mul bl; — выполняется умножение переменной al на переменную bl. Результат умножения сохраняется в регистре al.
  11. add al,cl; — к значению регистра al прибавляется значение переменной cl. Результат сохраняется в регистре ax.
  12. mul bl; — выполняется умножение переменной ax на переменную bl. Результат умножения сохраняется в регистре ax.
  13. add al,dl; — к значению регистра al прибавляется значение переменной dl. Результат сохраняется в регистре eax.
  14. eax=321 — в конце кода значение переменной eax равно 321.

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


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

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

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