Вывод значения ячейки памяти (через регистр) на эран - Assembler
Формулировка задачи:
Здравствуйте!
Учусь по книге В.Н. Пильщиков "ASSEMBLER Программирование на языке ассемблера IBM PC"
Работаю в MASM 4.0, DOSBox 0.78
Мне нужно вывести значение ячейки памяти -- as dw 123 -- через регистр АХ на экран:
data segment as dw 123 data ends code segment assume ss:stack, ds:data, cs:code start: mov ax, as ; или mov ax, [as] outword ax code ends end start finish
Проблема в том, что вместо 123 выводиться значение 8397 (может быть адрес ячейки).
Перепробовал варианты из форума "Ввод\вывод чисел на экран", но они того же действия- выводиться 8397.
Если, например, в сам регистр непосредственно поместить значение 123, оно выводиться без проблем!
К примеру, команда OUTSTR работает нормально:
......
s db 'Hellou', '$'
as dw s
mov dx, as
outstr
С чем же связана проблема вывода числа?
Решение задачи: «Вывод значения ячейки памяти (через регистр) на эран»
textual
Листинг программы
; masm dos exe # .286 .model small .data string dw 255 .code start: mov ax,@data mov ds,ax mov ax,string; ax=0FFh mov ax,offset string; ax=8 mov ax,[offset string]; ax=8 mov ax,ds:[offset string];ax=8 mov ax,ds:[8];ax=0FFh exit: mov ah,4Ch int 21h end start
Объяснение кода листинга программы
- Объявление переменных:
- string dw 255 - строка, содержащая символы (в данном случае — строка из 255 символов)
- Код программы:
- start: — метка начала работы программы
- mov ax,@data — перемещение регистра ax в область данных
- mov ds,ax — установка сегмента данных равным значению регистра ax
- mov ax,string — перемещение регистра ax в начало строки (0FFh)
- mov ax,offset string — перемещение регистра ax в начало строки (8)
- mov ax,[offset string] — перемещение регистра ax в начало строки (8)
- mov ax,ds:[offset string] — перемещение регистра ax в начало строки (8)
- mov ax,ds:[8] — перемещение регистра ax в начало строки (0FFh)
- exit: — метка завершения работы программы
- mov ah,4Ch — подготовка к вызову функции вывода на экран
- int 21h — вызов функции вывода на экран
- Значения регистров и сегментов:
- ax — используется для хранения и передачи значений
- ds — сегмент данных (в данном случае равен значению регистра ax)
- offset string — смещение строки (в данном случае равно 8)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д