Составить алгоритм и программу занесения в область памяти 2100H-2150H последовательность чисел от 0H до 50H - Assembler
Формулировка задачи:
Задача такова:
Составить алгоритм и программу занесения в область памяти 2100H-2150H последовательность чисел от 0H до 50H.
Я написал такое:
Но он ругается на mov ax, 4c00b
Может быть что-то исправить? Помогите
Assume cs text, ds data myproc proc mov AX, Data mov DS, AX mov BX, 2100H mov CX, 50 A1: mov BYTE PTR(ax), 1h inc BX loop A1 mov ax, 4c00b int 21h myproc endp text ends data segment data ends end myproc
Решение задачи: «Составить алгоритм и программу занесения в область памяти 2100H-2150H последовательность чисел от 0H до 50H»
textual
Листинг программы
; masm dos exe # .286 .model small .data x db 50h dup (?) .code .386 start: mov ax,@data mov es,ax mov di,offset x mov cx,50h/4 mov eax,3020100h a: stosd add eax,4040404h loop a mov ah,4Ch int 21h end start
Объяснение кода листинга программы
В этом коде:
- Объявлена переменная
xтипаdb(содержит байтовые значения) в сегменте данных.data. - В сегменте кода
.codeопределена точка входаstart. - При запуске программы точка входа
startстановится активной. Первый же байт кода после точки входа (используемfдля перехода к следующему байту) — это командаmov ax,@data, которая устанавливает сегментный регистрaxравным сегменту данных. - Следующая команда
mov es,axустанавливает сегментный регистрesравным сегменту данных. - Команда
mov di,offset xустанавливает регистрdiравным смещению переменнойxот начала сегмента данных. - Команда
mov cx,50h/4устанавливает регистрcxравным 50 (10001110 в двоичном формате), делённому на 4, то есть 12 (10001010 в двоичном формате). - Команда
mov eax,3020100hустанавливает регистрeaxравным 3020100h (в двоичном формате 00110000 00110010 00000100 00000000). - Выполняется команда
stosd, которая записывает в память байт из регистраeax(текущее значение — 00110000) и инкрементирует регистрdiна 2 (смещение переменнойxв памяти). - К регистру
eaxдобавляется 4040404h (в двоичном формате 00110000 00110010 00000100 00000000), что приводит к новому значению в регистреeax— 3020104h (в двоичном формате 00110000 00110010 00000100 00000001). - Выполняется команда
loop a, которая проверяет, равен ли 0 регистрcx. Если равен, то программа возвращается к командеmov cx,50h/4. Если не равен, то выполняется следующая команда. - Команда
mov ah,4Chустанавливает регистрahравным 4Ch (в двоичном формате 00110000 00110011). - Выполняется команда
int 21h, которая передаёт в BIOS запрос на выполнение функции 21h (в данном случае — вывод на экран). - Программа завершается.