Контрольная по 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 ; выход!
Объяснение кода листинга программы
Объяснение кода:
- ORG 100h — команда начальной адресации, устанавливает точку входа в программу в 100h.
- JMP start — команда перехода к метке
start
. - text0 DB 13,10,' String..: $' — определение переменной
text0
типаDB
(double byte), содержащей строкуString..: $
с символами 13 и 10. - text1 DB 13,10,' Result..: $' — определение переменной
text1
типаDB
(double byte), содержащей строкуResult..: $
с символами 13 и 10. - buff DB 80,0,80 DUP(0) — определение переменной
buff
типаDB
(double byte), представляющей собой буфер размером 80 байт, инициализированный нулями. - start: — метка начала выполнения программы.
- MOV AH,9 — команда загрузки регистра AH значением 9, необходимым для вызова функции 9h (сообщение).
- MOV DX,text0 — команда загрузки регистра DX значением, содержащимся в переменной
text0
. - INT 21h — команда вызова функции 21h (вывод на экран).
- INC AH — команда увеличения значения регистра AH на 1.
- MOV DX,buff — команда загрузки регистра DX значением, содержащимся в переменной
buff
. - INT 21h — команда вызова функции 21h (вывод на экран).
- DEC AH — команда уменьшения значения регистра AH на 1.
- MOV DX,text1 — команда загрузки регистра DX значением, содержащимся в переменной
text1
. - INT 21h — команда вызова функции 21h (вывод на экран).
- MOV SI,buff+2 — команда загрузки регистра SI значением, равным сумме адреса переменной
buff
и 2. - XOR CX,CX — команда инициализации регистра CX значением 0.
- MOV CL,[buff+1] — команда загрузки регистра CL значением, содержащимся в байте, на который указывает смещение от
buff
. - LODSB — команда загрузки байта из памяти в регистр AL.
- CMP AL,' ' — команда сравнения значения регистра AL со значением пробела.
- JZ abort — команда перехода к метке
abort
, если значение регистра AL равно значению пробела. - INT 29h — команда вызова функции 29h (вывод символа на экран).
- LOOP printf — команда перехода к метке
printf
, если значение регистра CX больше 0. - abort: — метка начала выполнения цикла.
- XOR AX,AX — команда инициализации регистра AX значением 0.
- INT 16h — команда вызова функции 16h (вывод значения регистра AX на экран).
- INT 20h — команда вызова функции 20h (выход из программы).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д