Составить алгоритм и программу занесения в область памяти 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 (в данном случае — вывод на экран). - Программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д