Прога в ассемблере( - Assembler
Формулировка задачи:
Приветствую, имеется задание к лаб. работе и звучит оно следующим образом - все отрицательные числа превратить в "0". Имеется следующее:
_________________________
____________________
Что в данной программе не так?((
data segment mass dw 1,1,1,1,1,-1,-1,-1,-1,-1 data ends code segment assume cs: code, ds:data start:mov ax, data mov ds,ax lea bx, mass mov cx,10 beg: cmp byte [mass],0 jl no mov byte ptr ax, [bx] no: inc bx inc bx loop beg quit: mov ax, 4c00h int 21h code ends end start
Решение задачи: «Прога в ассемблере(»
textual
Листинг программы
data segment mass dw 1,1,1,1,1,-1,-1,-1,-1,-1 data ends code segment assume cs: code, ds:data start: mov ax, data mov ds,ax lea bx, mass mov cx,10 beg: cmp word ptr [bx],0 jnl no mov word ptr [bx],0 no: add bx,2 loop beg quit: mov ax, 4c00h int 21h code ends end start
Объяснение кода листинга программы
- Присваиваем сегмент данных переменной ax (mov ax, data).
- Присваиваем сегмент данных переменной ds (mov ds,ax).
- Легко запоминаемая точка начала (lea bx, mass).
- Считаем, сколько элементов мы хотим обработать (mov cx,10).
- Запускаем цикл, который будет выполняться 10 раз (beg:).
- Проверяем значение в памяти по адресу, который хранится в bx (cmp word ptr [bx],0).
- Если значение равно нулю, то записываем в память по этому адресу единицу (mov word ptr [bx],0).
- Если значение не равно нулю, то мы его пропускаем и переходим к следующей итерации (jnl no).
- Увеличиваем значение bx на 2 (add bx,2).
- В конце цикла мы выходим из него (loop beg).
- Завершаем работу программы (quit:).
- Выводим в дам память значение 4c00h (mov ax, 4c00h).
- Вызываем обработчик прерывания 21h (int 21h).
- Конец кода (code ends).
- Точка входа в программу (end start).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д