Проанализировать рабоу программы

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

Ответить
Odin
Сообщения: 3
Зарегистрирован: 24 июн 2015, 21:28

24 июн 2015, 22:14

Нужно проанализировать работу программы, я с ней почти разобралась,она выводит
Hello world1
Hello world2
C
Мне не понятно только ,почему в сегменте данных мы пишем :c db '34', а программа выводит с.
Здесь понятно mov dx, ‘c’,что в регистр dx записываем символ с;
Еще я прочитала ,что 34-это код кавычек в ASCII.
Объясните пожалуйста мне вот это.
dat1 segment
a db 'Hello world1',10,13
b db 'Hello world2',10,13,'$'
c db '34'
dat1 endS

cod1 segment
assume cs:cod1, ds:dat1
start1: mov ax, dat1
mov ds, ax
xor ax, ax

mov ah, 09h
mov dx, offset a
int 21h

mov ah, 02h
mov dx, ‘c’
int 21h

mov ah,4Ch
int 21h
cod1 endS
end Start1
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

24 июн 2015, 22:49

Вывод строки в функции 09h заканчивается на символе '$'
А функция 02h выводит символ с кодом, который передан в DL, то есть 'c'
А переменная С которая по сути содержит два байта, она вообще нигде не используется и ее можно удалить из кода
It's a long way to the top if you wanna rock'n'roll
Odin
Сообщения: 3
Зарегистрирован: 24 июн 2015, 21:28

25 июн 2015, 20:57

Спасибо, а 34 -что обозначает?
Hello world1
Hello world2
C-здесь маленькая с-это я не правильно написала.Про функции мне было понятно,непонятно про-34.
Спасибо еще раз.
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

26 июн 2015, 09:17

Я не знаю что автор программы заложил в эти 34, но могу сказать определенно, что они нигде не используются и что это не одно число (не один байт), как вы думаете - а на самом деле два.
Поскольку они указаны в кавычках, то компилятор рассматривает их как символьную ASCII строку и для каждого символа записывает в память его код. То есть сначала запишет в память 3 (значение 33h) а потом 4 (значение 34h).
Вот если бы было написано c db 34, без кавычек, тогда компилятор записал бы в память один байт - 34 (22h), что соответствует символу двойной кавычки в таблице ASCII.
Вообще любые числа в памяти мы, как программисты, вольны интерпретировать как угодно. Они не обязательно должны быть символами кодовых таблиц, тут уж как фантазия развернется.
It's a long way to the top if you wanna rock'n'roll
Odin
Сообщения: 3
Зарегистрирован: 24 июн 2015, 21:28

02 июл 2015, 20:10

Спасибо, вы очень понятно объясняете.
Ответить