 |
Ассемблер в примерах - Вывод строки на экране
- Вопрос:
- Объясните, пожалуйста, как работает эта программа, а именно что происходит с 8-15 строки. Что в данном случае обозначают квадратные скобки, я не вижу в отладчике что происходит когда в [di] заносится ah (11 строка).
; программа считывает строку символов в буфер, затем отображает на экране.
;Функция DOS 0Ah - Считать строку символов из STDIN в буфер
1. .model tiny
2. .code
3. org 100h
4. start:
5. mov ah,0ah
6. mov dx,offset buffer
7. int 21h
;======================================
8. inc dx
9. mov di,dx
10. mov bl,[di]
11. mov [di],ah
12. xor bh,bh ;Можно и без этого, но! лучше так.
13. inc di
14. mov byte ptr [di+bx],'$'
15. dec ah
;======================================
16. int 21h
17. ret
buffer db 10 ; максимальная длина ввода строки
dlina db 0 ; фактическая длина ввода
text db 10 dup() ; фактически ввод размещается здесь
end start
- Ответ:
-
; программа считывает строку символов в буфер, затем отображает на экране.
;Функция DOS 0Ah - Считать строку символов из STDIN в буфер
1. .model tiny
2. .code
3. org 100h
4. start:
5. mov ah,0ah; процедура ввод строки
6. mov dx,offset buffer
7. int 21h
;======================================
8. inc dx; адрес буффера ввода +1, теперь dx указывает на dlina - кол-во введенных символов
9. mov di,dx; di=dx адрес переменной dlina
10. mov bl,[di]; записать значение байта по адресу находящемуся в di в bl, кол-во введенных символов, bl=dlina
11. mov [di],ah; записать ah по адресу находящемуся в di, dlina=ah
12. xor bh,bh ;Можно и без этого, но! лучше так.
13. inc di ;di=di+1 теперь di содержит адрес начала строки text
14. mov byte ptr [di+bx],'$' ; записать в конец строки знак доллар, адрес начала строки+кол-во символов в строке
15. dec ah; ah=0Ah-1=09h функция вывод строки
;======================================
16. int 21h
17. ret
buffer db 10 ; максимальная длина ввода строки
dlina db 0 ; фактическая длина ввода
text db 10 dup() ; фактически ввод размещается здесь
end start
|  |