Контрольная по Assembler

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

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

Выручьте пожалуйста студента с контрольной по Assembler, есть 6 заданий, может у кого какие примеры похожие есть, киньте, а я разберусь как-нибудь, ничего в голову не лезет ввиду не изучения этого языка (Assembler) в принципе. Заранее благодарен... Удалить все пробелы из строки символов.

Решение задачи: «Контрольная по Assembler»

textual
Листинг программы
ORG 100h
JMP start
 
text0   DB  13,10,' String..: $'
text1   DB  13,10,' Result..: $'
buff    DB  80,0,80 DUP(0)  ; буфер для строки
 
start:
   MOV   AH,9              ; (fn.09h) сообщение
   MOV   DX,text0
   INT   21h
   INC   AH                ; (fn.0Ah) ввод
   MOV   DX,buff
   INT   21h
   DEC   AH                ; (fn.09h) сообщение
   MOV   DX,text1
   INT   21h
;================================================================
   MOV   SI,buff+2         ; адрес строки
   XOR   CX,CX
   MOV   CL,[buff+1]       ; её длина
printf:
   LODSB                   ; читаем байт
   CMP   AL,' '            ; это пробел?
   JZ    abort             ; да - пропускаем
   INT   29h               ; выводим символ на экран
abort:
   LOOP  printf            ; мотаем цикл пока CX > 0
;================================================================
exit:
   XOR   AX,AX
   INT   16h
   INT   20h               ; выход!

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

Объяснение кода:

  1. ORG 100h — команда начальной адресации, устанавливает точку входа в программу в 100h.
  2. JMP start — команда перехода к метке start.
  3. text0 DB 13,10,' String..: $' — определение переменной text0 типа DB (double byte), содержащей строку String..: $ с символами 13 и 10.
  4. text1 DB 13,10,' Result..: $' — определение переменной text1 типа DB (double byte), содержащей строку Result..: $ с символами 13 и 10.
  5. buff DB 80,0,80 DUP(0) — определение переменной buff типа DB (double byte), представляющей собой буфер размером 80 байт, инициализированный нулями.
  6. start: — метка начала выполнения программы.
  7. MOV AH,9 — команда загрузки регистра AH значением 9, необходимым для вызова функции 9h (сообщение).
  8. MOV DX,text0 — команда загрузки регистра DX значением, содержащимся в переменной text0.
  9. INT 21h — команда вызова функции 21h (вывод на экран).
  10. INC AH — команда увеличения значения регистра AH на 1.
  11. MOV DX,buff — команда загрузки регистра DX значением, содержащимся в переменной buff.
  12. INT 21h — команда вызова функции 21h (вывод на экран).
  13. DEC AH — команда уменьшения значения регистра AH на 1.
  14. MOV DX,text1 — команда загрузки регистра DX значением, содержащимся в переменной text1.
  15. INT 21h — команда вызова функции 21h (вывод на экран).
  16. MOV SI,buff+2 — команда загрузки регистра SI значением, равным сумме адреса переменной buff и 2.
  17. XOR CX,CX — команда инициализации регистра CX значением 0.
  18. MOV CL,[buff+1] — команда загрузки регистра CL значением, содержащимся в байте, на который указывает смещение от buff.
  19. LODSB — команда загрузки байта из памяти в регистр AL.
  20. CMP AL,' ' — команда сравнения значения регистра AL со значением пробела.
  21. JZ abort — команда перехода к метке abort, если значение регистра AL равно значению пробела.
  22. INT 29h — команда вызова функции 29h (вывод символа на экран).
  23. LOOP printf — команда перехода к метке printf, если значение регистра CX больше 0.
  24. abort: — метка начала выполнения цикла.
  25. XOR AX,AX — команда инициализации регистра AX значением 0.
  26. INT 16h — команда вызова функции 16h (вывод значения регистра AX на экран).
  27. INT 20h — команда вызова функции 20h (выход из программы).

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


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

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

12   голосов , оценка 4.167 из 5