Вывод значения ячейки памяти (через регистр) на эран - 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

Объяснение кода листинга программы

  1. Объявление переменных:
    • string dw 255 - строка, содержащая символы (в данном случае — строка из 255 символов)
  2. Код программы:
    • 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 — вызов функции вывода на экран
  3. Значения регистров и сегментов:
    • ax — используется для хранения и передачи значений
    • ds — сегмент данных (в данном случае равен значению регистра ax)
    • offset string — смещение строки (в данном случае равно 8)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.867 из 5
Похожие ответы