Другие языки программирования и технологии

помогите объяснить значение каждой строчки программы на ассемблере!?

1. ; include io.asm 2. 3. .model SMALL 4. .stack 256 5. 6. .data 7. 8. arr db 1, 3, 0, -2, 0, 4, 222, 0, 0, 0 9. 10. .code 11. Entry:  12. mov AX, @data 13. mov DS, AX 14. 15. ;------------------------- 16. xor dx, dx 17. lea bx, arr 18. mov cx, 10 19. c1: mov al, [bx] 20. cmp al, 0 21. je m1 22. inc dx 23. m1: inc bx 24. loop c1 25. 26. ; outint dx 27. ;------------------------------------- 28. ; finish 29. mov AX,4C00h 30. int 21h 31. end Entry 32.
1 - подключаем файл io.inc
3 - модель памяти
4 - размер стека
6 - секция данных
8 - задаем массив
10 - начало секции кода
11 - точка входа
12 - 14 - инициализация секции данных
16 - очищаем регистр bx
17 - в bx загружаем адрес массива arr
18 - в cx заносим значение (это счетчик)
19 - в al заносим текущий элемент массива
20 - сравниваем элемент массива с 0
21 - если элемент равен 0, то переходим на метку m1
22 - если <>0 то увеличиваем dx на 1
23 - выбираем следующий элемент массива
24 - переходим на с1, пока cx>0
26-27 - вывод кол-ва нулевых элементов массива
28-32 - выход из программы
Петр Манякин
Петр Манякин
7 571
Лучший ответ
странновато написано но попробую
сначала подключается файл io.asm
модель памяти small
256 размер стека
дальше сегмент данных
потос сами данные с меткой arr
сегмент кода
точка входа (старта)
берем сегмент данных в ax
из ax перебрасываем в ds
в dx загружаем ноль
в bx смещение метки arr

в cx записываем 10
там где метка с1 берём байт из начала данных (по адресу arr)
сравниваем с нулём
если ровно то переходим на метку m1
иначе dx+1
метка m1 - увеличиваем bx (на единицу)
уменьшаем cx и цикл на метку с1 если cx не равен нулю
дальше закоментирован макрос вероятно отображающий значение в dx
потом закоментирован какойто finish (или это всё просто коментарии)
mov ax,4c00 и int 21 - это команды выхода в дос
потом в конце пишим что конец и метку старта

Похожие вопросы