Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.04.2011, 17:45   #1
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию Вывод физ. и stack'ого адреса переменной / 8086

Всем привет! Ребят имею представление как получить стековый адрес и физ. адрес переменной, но не могу понять как можно вывести все это дело на экран.
То есть я как понимаю, я получу значение адреса, значение переводить в Hex, с Hex'а в строку и только потом вывод.
За ранее благодарен за любую подсказку.
coNsept вне форума Ответить с цитированием
Старый 13.04.2011, 18:11   #2
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

Скажем, адрес в ax.
Код:
lea bx,hextable
lea di,buf
mov cx,4
@@:
rol ax,4
push ax
and al,0fh
xlatb
stosb
pop ax
loop @b
..................
hextable db '0123456789ABCDEF'
buf db 4 dup (?),'$'
vadimych вне форума Ответить с цитированием
Старый 14.04.2011, 20:10   #3
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

Почему-то компилятор ругается на Rol Ax, 4 - то есть если явно указать 4.
А если так к примеру Mov Cl, 4; Rol Ax, Cl - так нормально.
coNsept вне форума Ответить с цитированием
Старый 14.04.2011, 20:36   #4
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

Надо указать в начале кода, что используются команды .186 процессора, тогда можно без cl обойтись.
vadimych вне форума Ответить с цитированием
Старый 14.04.2011, 23:23   #5
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

Не совсем твой вариант у меня работает, к сожалению.
Когда пытаюсь вывести buf у меня вообще программа висит.
Sorry, что такой тугой, я просто только не давно перебрался с Сях на Асмус

Код:
lea bx,hextable
lea di,buf
mov cx,4
@@:
rol ax,4
push ax
and al,0fh
xlatb
stosb
pop ax
loop @b

lea dx, [buf]
mov ah, 9H
int 21h
coNsept вне форума Ответить с цитированием
Старый 15.04.2011, 04:39   #6
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

Может быть, дело в квадратных скобках? Попробуй mov dx,offset buf.
vadimych вне форума Ответить с цитированием
Старый 15.04.2011, 04:53   #7
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

vadimych так тоже не работает, но все равно спасибо за помощь. Вообщем я разобрался с выводом адреса, может кому пригодиться.


Код:
.186

.Model Small

.Stack 100H

.DATA
 Buffer DW 0ABH, 0CDH, 0EFH
 
.CODE

InitSeg Proc
 Mov Ax, @DATA
 Mov Ds, Ax
 Ret
InitSeg Endp

PressKey Proc
 Mov Ax, 0C07H
 INT 21H
 Ret
PressKey Endp

Exit Proc
 Mov Ax, 4C00H
 INT 21H
 Ret
Exit Endp

GetSymbol Proc
 Push Bp
 Mov Bp, Sp
 Sub Sp, 4H
 Mov Dx, [Bp + 4H]
 Mov Ah, 02h 
 INT 21H
 Mov Sp, Bp
 Pop Bp
 Ret
GetSymbol Endp

EndLine Proc
 Mov Dx, 0AH 
 Mov Ah, 02H
 INT 21H
 Ret
EndLine Endp

OutputAddr Proc
 Push Bp
 Mov Bp, Sp
 Sub Sp, 4H
 Mov Ax, [Bp + 4H]
 Mov Cl, 16-4
 Xchg Dx, Ax
@Cicle:
 Mov Ax, Dx
 Shr Ax, Cl
 And Al, 0FH
 Add Al, '0'
 Cmp Al, '9'
 Jbe @NotHexDigit
 Add Al, 'A'-('9'+1)
@NotHexDigit:
 int 29H
 Sub Cl, 4
 Jnc @Cicle
 Mov Sp, Bp
 Pop Bp
 Ret
OutputAddr Endp

Begin:
 Call InitSeg
 Mov Dx, Buffer
 Push Dx
 Call OutputAddr 
 Mov Dx, ' '
 Push Dx
 Call GetSymbol
 Lea Dx, Buffer
 Push Dx
 Call OutputAddr
 Call EndLine 
 Call PressKey
 Call Exit
End Begin

Последний раз редактировалось coNsept; 15.04.2011 в 04:59.
coNsept вне форума Ответить с цитированием
Старый 15.04.2011, 06:02   #8
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

coNsept, не знаю, почему у тебя не пошёл мой вариант. Вот рабочий код. Сначала выводится адрес hextable, потом - стековый адрес возврата из программы.
Код:
.model tiny
.code
.186
org 100h
start:

lea ax,hextable
mov bx,ax
lea di,buf
call @f

inc di
mov bp,sp
mov ax,[bp+2]
call @f

exit:
lea dx,buf
mov ah, 9H
int 21h

xor ax,ax
int 16h
ret
@@:
mov cx,4
@@:
rol ax,4
push ax
and al,0fh
xlatb
stosb
pop ax
loop @b
ret

hextable db '0123456789ABCDEF'
buf db 4 dup (?),' ',4 dup (?),'$'
end start
Вложения
Тип файла: rar 1.rar (147 байт, 9 просмотров)

Последний раз редактировалось vadimych; 15.04.2011 в 12:07.
vadimych вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка вычисления и вывод переменной _elena Общие вопросы C/C++ 5 19.03.2011 22:14
вывод переменной из функции kirosin JavaScript, Ajax 4 07.10.2010 16:12
вывод переменной в поток на Си pysik Помощь студентам 2 17.08.2009 16:17