Вывод строки по буквам (FASM) - Assembler

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

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

Доброго времени суток, господа программисты! Задача такова: нужно вывести на экран строку, допустим Hello World, посимвольно, и, чтобы каждый символ перебирал все буквы, прежде, чем остановиться на той, которая нужна. Надеюсь, всё понятно Буду благодарна, если поможете)

Решение задачи: «Вывод строки по буквам (FASM)»

textual
Листинг программы
org     100h
        jmp     @@00
dbStr   db      'qwertyuiopasdfghjkl'
@@00:   mov     ax,3
        int     10h
        mov     ax,0B800h
        mov     es,ax
        mov     cx,19
        mov     si,dbStr
        mov     ah,0Fh
        xor     di,di
@@01:   lodsb
        push    cx
        mov     bl,'a'-1
        xchg    al,bl
@@02:   inc     al
        stosw
;        sub     di,2;для проверки работы кода
        mov     cx,-1
@@03:   loop    @@03
        cmp     bl,al
        jnz     @@02
        pop     cx
        stosw
        mov     al,' ';вывод разделителя, для проверки работы кода
        stosw;
        loop    @@01
        xor     ax,ax
        int     16h
        ret

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

  1. org 100h — начало выполнения программы, адрес 100h используется как точка отсчёта
  2. jmp @@00 — переход к метке @@00
  3. dbStr db 'qwertyuiopasdfghjkl' — определение строки dbStr, которая содержит последовательность 'qwertyuiopasdfghjkl'
  4. mov ax,3 — значение переменной ax устанавливается равным 3
  5. int 10h — вывод значения переменной ax на экран (в данном случае это 3)
  6. mov ax,0B800h — значение переменной ax устанавливается равным 0B800h (используется для работы с сегментом памяти)
  7. mov es,ax — значение переменной es устанавливается равным значению переменной ax (0B800h)
  8. mov cx,19 — значение переменной cx устанавливается равным 19
  9. mov si,dbStr — значение переменной si устанавливается равным значению переменной dbStr (начальный адрес строки 'qwertyuiopasdfghjkl')
  10. mov ah,0Fh — значение переменной ah устанавливается равным 0Fh (используется для работы с регистром AL)
  11. xor di,di — значение регистра di устанавливается равным 0 (используется в цикле)
  12. @@00: lodsb — загрузка байта из памяти по адресу, на который указывает смежная переменная si, в регистр AL
  13. push cx — значение переменной cx сохраняется на стеке
  14. mov bl,'a'-1 — значение переменной bl устанавливается равным 'a'-1 (используется для сравнения с регистром AL в цикле)
  15. xchg al,bl — обмен значений между регистрами AL и BL
  16. inc al — увеличение значения регистра AL на 1
  17. stosw — вывод значения регистра AL в память по адресу, на который указывает смежная переменная es, с последующим инкрементом (переменная es увеличивается на 2)
  18. sub di,2 — уменьшение значения регистра di на 2 (используется для проверки работы кода)
  19. loop @@03 — переход к метке @@03 при условии, что значение регистра di больше или равно 2 (то есть до завершения цикла)
  20. cmp bl,al — сравнение значений регистров BL и AL (в данном случае они должны быть равны после инкремента в предыдущем цикле)
  21. jnz @@02 — переход к метке @@02 при условии, что регистры BL и AL не равны (то есть до завершения цикла)
  22. pop cx — восстановление значения переменной cx из стека
  23. stosw — вывод значения переменной cx в память по адресу, на который указывает смежная переменная es, с последующим инкрементом (переменная es увеличивается на 2)
  24. mov al,' '; — вывод разделителя ' ' (регистр AL устанавливается равным ' ')
  25. stosw — вывод значения регистра AL в память по адресу, на который указывает смежная переменная es, с последующим инкрементом (переменная es увеличивается на 2)
  26. loop @@01 — переход к метке @@01 до тех пор, пока значение регистра cx не станет меньше или равным 0 (то есть до завершения цикла)
  27. xor ax,ax — обнуление значения регистра ax (используется для завершения работы программы)
  28. int 16h — завершение работы программы (возврат управления операционной системе)
  29. ret — конец программы (возврат управления на уровень, предшествующий вызовому данной программы)

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


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

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

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